小编J. *_*ile的帖子

我如何获得jjs --add-opens在Java9中工作?

我一直在使用https://apimeister.com/2015/06/27/add-jar-to-the-classpath-at-runtime-in-jjs.html中的反射技术来在运行时在Java的nashorn jjs中加载类。

它在Java 8中有效,但在Java 9中则无效。我知道/sf/answers/2888568721/中提到的推荐命令行解决方法

并且根据/sf/answers/3217961981/,使用=代替标志和其args之间的空格的这种替代语法似乎也应该是有效的(由于通过nashorn方法将jvm args通过通过jjs-J--...

有什么提示吗?


这有效...(java 8)...

$ wget -q http://central.maven.org/maven2/org/apache/poi/poi/4.0.0/poi-4.0.0.jar
$ /usr/lib/jvm/java-1.8.0/bin/jjs -scripting loadit.js -- poi-4.0.0.jar
DONE
Run Code Online (Sandbox Code Playgroud)

这不是...(java 9)...

$ wget -q http://central.maven.org/maven2/org/apache/poi/poi/4.0.0/poi-4.0.0.jar
$ /usr/lib/jvm/java-9/bin/jjs -J--add-opens=java.base/java.net=ALL-UNNAMED -scripting loadit.js -- poi-4.0.0.jar

Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.net.URLClassLoader.addURL(java.net.URL) accessible: module java.base does not "opens java.net" to module jdk.scripting.nashorn.scripts
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:337)...
Run Code Online (Sandbox Code Playgroud)

这是loadit.js ...

// loadit.js 
function addUrlToClasspath(pth) {
  var s = java.lang.ClassLoader.getSystemClassLoader();
  var C = Java.type("java.lang.Class[]");
  var …
Run Code Online (Sandbox Code Playgroud)

java reflection java-9 jjs

5
推荐指数
1
解决办法
459
查看次数

标签 统计

java ×1

java-9 ×1

jjs ×1

reflection ×1