diff --git a/luaj-jse/pom.xml b/luaj-jse/pom.xml index cba44a6a..64cb4f72 100644 --- a/luaj-jse/pom.xml +++ b/luaj-jse/pom.xml @@ -33,6 +33,38 @@ + + org.apache.maven.plugins + maven-shade-plugin + 3.5.0 + + + package + + shade + + + + false + + + + + + + + org.luaj.vm2.Lua + + + + + + com.helger.maven ph-javacc-maven-plugin @@ -71,7 +103,15 @@ - + + org.apache.maven.plugins + maven-compiler-plugin + + 9 + 9 + + + diff --git a/luaj-jse/src/main/java/org/luaj/vm2/lib/jse/JavaMethod.java b/luaj-jse/src/main/java/org/luaj/vm2/lib/jse/JavaMethod.java index 2beb04e0..302a8a2c 100644 --- a/luaj-jse/src/main/java/org/luaj/vm2/lib/jse/JavaMethod.java +++ b/luaj-jse/src/main/java/org/luaj/vm2/lib/jse/JavaMethod.java @@ -21,6 +21,7 @@ ******************************************************************************/ package org.luaj.vm2.lib.jse; +import java.lang.reflect.InaccessibleObjectException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Collections; @@ -60,13 +61,15 @@ static LuaFunction forMethods(JavaMethod[] m) { final Method method; + private final boolean test = false; + private JavaMethod(Method m) { super(m.getParameterTypes(), m.getModifiers()); this.method = m; try { if (!m.isAccessible()) m.setAccessible(true); - } catch (SecurityException s) { + } catch (SecurityException | InaccessibleObjectException ignored) { } } diff --git a/luaj-jse/src/main/java/org/luaj/vm2/lib/jse/LuajavaLib.java b/luaj-jse/src/main/java/org/luaj/vm2/lib/jse/LuajavaLib.java index b7c0261b..0c936c1c 100644 --- a/luaj-jse/src/main/java/org/luaj/vm2/lib/jse/LuajavaLib.java +++ b/luaj-jse/src/main/java/org/luaj/vm2/lib/jse/LuajavaLib.java @@ -105,6 +105,12 @@ public class LuajavaLib extends VarArgFunction { static final int METHOD_MODIFIERS_VARARGS = 0x80; + private ClassLoader classloader; + + public LuajavaLib(final ClassLoader classloader) { + this.classloader = classloader; + } + public LuajavaLib() { } @@ -151,7 +157,7 @@ public Varargs invoke(Varargs args) { InvocationHandler handler = new ProxyInvocationHandler(lobj); // create the proxy object - Object proxy = Proxy.newProxyInstance(getClass().getClassLoader(), ifaces, handler); + Object proxy = Proxy.newProxyInstance(this.classloader == null ? getClass().getClassLoader() : this.classloader, ifaces, handler); // return the proxy return LuaValue.userdataOf(proxy); @@ -183,7 +189,11 @@ public Varargs invoke(Varargs args) { // load classes using app loader to allow luaj to be used as an extension protected Class classForName(String name) throws ClassNotFoundException { - return Class.forName(name, true, ClassLoader.getSystemClassLoader()); + return Class.forName(name, true, this.classloader == null ? getClass().getClassLoader() : this.classloader); + } + + public void setClassloader(final ClassLoader classloader) { + this.classloader = classloader; } private static final class ProxyInvocationHandler implements InvocationHandler {