C+中的模块路径+;调用Java JNI 当我在C++中创建java 8 JVM时,我通常使用类似下面的代码来告诉JVM类路径: JavaVMOption* options = new JavaVMOption[1]; // JVM invocation options options[0].optionString = (char *)"-Djava.class.path=.;./lib2"; // where to find java .class vm_args.version = JNI_VERSION_1.8; // minimum Java version vm_args.nOptions = 1; // number of options vm_args.options = options; vm_args.ignoreUnrecognized = false;
但是如何告诉Java9JVM模块路径呢?没有java.module.path系统属性。我能找到的最好的东西是:C+中的模块路径+;调用Java JNI 当我在C++中创建java 8 JVM时,我通常使用类似下面的代码来告诉JVM类路径: JavaVMOption* options = new JavaVMOption[1]; // JVM invocation options options[0].optionString = (char *)"-Djava.class.path=.;./lib2"; // where to find java .class vm_args.version = JNI_VERSION_1.8; // minimum Java version vm_args.nOptions = 1; // number of options vm_args.options = options; vm_args.ignoreUnrecognized = false;,java,java-native-interface,java-9,java-module,jnienv,Java,Java Native Interface,Java 9,Java Module,Jnienv,但是如何告诉Java9JVM模块路径呢?没有java.module.path系统属性。我能找到的最好的东西是: JavaVMOption* options = new JavaVMOption[2]; // JVM invocation options options[0].optionString = (char *)"-Djdk.module.path=.;./lib2"; // where to find java .class options[1].optionString =
JavaVMOption* options = new JavaVMOption[2]; // JVM invocation options
options[0].optionString = (char *)"-Djdk.module.path=.;./lib2"; // where to find java .class
options[1].optionString = (char *)"-Djdk.module.main=RemkaAgentService"; // where to find java .class
vm_args.version = JNI_VERSION_9; // minimum Java version
vm_args.nOptions = 2; // number of options
vm_args.options = options;
vm_args.ignoreUnrecognized = false;
但这段代码不起作用,当我尝试创建JVM时,它失败了。我想这是因为它不支持我尝试的选项 因此正确的选择如下
JavaVMOption* options = new JavaVMOption[2]; // JVM invocation options
options[0].optionString = (char *)"--module-path=.;./lib2"; // where to find java .class
options[1].optionString = (char *)"--add-modules=RemkaAgentService,spring.context";
vm_args.version = JNI_VERSION_9; // minimum Java version
vm_args.nOptions = 2; // number of options
vm_args.options = options;
vm_args.ignoreUnrecognized = false; // invalid options make the JVM init fail
它不应该是
java.module.path
而不是jdk.
?(只是相互关联)你从JNI\u CreateJavaVM
中得到了什么?JNI CreateJavaVM是用来创建VM的,它不加载和执行主类。对于模块路径,将选项字符串指定为“-module path=.;./lib2”。还指定“-addmodules=RemkaAgentService”以确保解析初始模块。创建VM后,您可以使用FindClass加载主类并执行其主方法。jdk.module.path是只读属性,记录在System.getProperties implNote中。在命令行和JNI CreateJavaVM上,选项是--module path
。java/javac启动器将-p
转换为--模块路径
,并将选项和值之间的空格转换为=
。最初的模块很复杂,java launcher将-m
和-module
转换为-Djdk.module.main=
,我已经忘记了这一点。_java_launcher_DEBUG是env变量(在我之前的评论中输入错误)。Java11似乎抱怨--module path“和--add modules”参数。此代码在再次运行Java11时失败