1+ import os
2+ import pathlib
3+ import subprocess
4+ import tempfile
5+ tmp_dir = tempfile .mkdtemp ()
6+
7+ import jnius_config
8+ jnius_config .add_classpath (tmp_dir )
9+
110def _get_logger (name ):
211 import logging
312 return logging .getLogger (name )
@@ -42,6 +51,54 @@ def _init_jvm():
4251_GrapeIvy = _autoclass ('groovy.grape.GrapeIvy' )
4352_grapeIvy = _GrapeIvy ()
4453_classLoader = _autoclass ('groovy.lang.GroovyClassLoader' )()
54+ _Thread = _autoclass ('java.lang.Thread' )
55+ _ClassLoader = _autoclass ('java.lang.ClassLoader' )
56+ get_class_loader_code = """
57+ import java.lang.Class;
58+ import java.lang.ClassLoader;
59+ import java.lang.reflect.Field;
60+
61+ public class GetClassLoaderClass
62+ {
63+ public static Class<ClassLoader> getClassLoaderClass()
64+ {
65+ return ClassLoader.class;
66+ }
67+
68+ public static void setSystemClassLoader( ClassLoader classLoader ) throws IllegalAccessException, NoSuchFieldException
69+ {
70+ Field scl = getClassLoaderClass().getDeclaredField( "scl" );
71+ scl.setAccessible( true );
72+ scl.set( null, classLoader );
73+ }
74+ }
75+ """
76+ fp = pathlib .Path ( tmp_dir ) / 'GetClassLoaderClass.java'
77+ print ( tmp_dir )
78+ with open ( fp , 'w' ) as f :
79+ f .write ( get_class_loader_code )
80+
81+
82+ javac = pathlib .Path ( os .environ [ 'JAVA_HOME' ] ) / 'bin' / 'javac'
83+ proc = subprocess .run (
84+ [ javac , '-cp' , jnius_config .split_char .join ( jnius_config .get_classpath () ), fp ],
85+ stdout = subprocess .PIPE ,
86+ stderr = subprocess .PIPE )
87+ if proc .returncode != 0 :
88+ print ("Failed!" )
89+ print ( proc .stderr )
90+
91+ _GetClassLoaderClass = _autoclass ('GetClassLoaderClass' )
92+ _GetClassLoaderClass .setSystemClassLoader ( _classLoader );
93+ print ("System classloader" , _ClassLoader .getSystemClassLoader ().getClass ().getName ())
94+
95+ # try:
96+ # _scl = _GetClassLoaderClass.getClassLoaderClass().getDeclaredField('scl')
97+ # print(_scl)
98+ # _scl.setAccessible(True)
99+ # _scl.set(None, _classLoader)
100+ # except JavaException as e:
101+ # print(e)
45102
46103def _default_map (** extra_options ):
47104 m = _HashMap ()
@@ -68,12 +125,22 @@ def dependency(groupId, artifactId, version=None, **grape_options):
68125 return _grapeIvy .grab (m )
69126
70127def import_class (clazz ):
71- loaded_class = _classLoader .loadClass (clazz )
128+ try :
129+ print ("SETTING CLASSLOADER" , _classLoader )
130+ # _Thread.currentThread().setContextClassLoader(_cast('java.lang.ClassLoader',_classLoader))
131+ _Thread .currentThread ().setContextClassLoader (_classLoader )
132+ except JavaException as e :
133+ print ( "e.classname -- {}" .format ( e .classname ) )
134+ print ( "e.innermessage -- {}" .format ( e .innermessage ) )
135+ # for st in e.stacktrace:
136+ # print( st )
137+ # loaded_class = _classLoader.loadClass(clazz)
72138 # clz = Class(noinstance=True)
73139 # clz.instanciate_from(create_local_ref(j_env, jc))
74- # return _autoclass(clazz)
75- print ( "CONSTRS " , loaded_class )
76- return _wrap_java_class (clazz , loaded_class )
140+ print ("classloader" , _Thread .currentThread ().getContextClassLoader ().getClass ().getName ())
141+ return _autoclass (clazz )
142+ # print( "CONSTRS ", loaded_class)
143+ # return _wrap_java_class(clazz, loaded_class)
77144
78145def list_grapes ():
79146 grapes = _grapeIvy .enumerateGrapes ()
0 commit comments