从C ++代码运行JVM并设置类路径

时间:2015-03-21 22:00:12

标签: java c++ jvm java-native-interface classpath

我试图从C ++代码创建JVM 7并努力设置正确的类路径。我想使用通配符指定类路径:例如/ path / to / *(将文件夹中的所有jar包括到类路径中)

如果我通过

设置类路径
options[0].optionString = "-Djava.class.path=/path/to/*;"; 

然后找不到我的班级。我尝试使用反斜杠(我使用的是Windows 8),有了分号,没有分号,没有任何帮助。这实际上也不能从命令行工作。

然后我尝试提供一个" -cp"选项,但在这种情况下无法创建JVM。我试过了:

options[0].optionString = "-cp=/path/to/*";

options[0].optionString = "-cp /path/to/*"; 

options[0].optionString = "-classpath=/path/to/*"; 

options[0].optionString = "-classpath /path/to/*"; 

options[0].optionString = "-cp"; 
options[0].extraInfo = "/path/to/*"; 

options[0].optionString = "-cp"; 
options[1].optionString = "/path/to/*"; 

这些都没有帮助。

在从C ++创建JVM时,您是否知道如何提供带通配符的类路径?

提前致谢

3 个答案:

答案 0 :(得分:6)

您需要自己执行扩展,因为这是Java启动程序的一项功能,而不是JNI API的功能。请参阅启动程序源中的SetClassPath函数,该函数调用内部JLI_WildcardExpandClasspath函数,然后添加-Djava.class.path选项。

答案 1 :(得分:0)

如果我们让shell扩展通配符并且不止一个jar文件它将无法工作,事实上例如如果在/ path / to / jars中有A.jar和B.jar并且说我们想要使用其中一个jar文件中包含的C类,我们尝试运行(linux):

java -cp / path / to / jars / * C

它将被扩展为

java -cp /path/to/jars/A.jar /path/to/jars/B.jar C

java会抱怨它找不到类/path/to/jars/B.jar。

但是如果(再次在linux上,那么在windows上你应该用“;”替换“:”),按照deviantfan指出的文档,我执行命令

java -cp /path/to/jars/*.jar:C

它正常工作(在这种情况下不是shell,而是扩展通配符的jvm初始化)。所以我想在Windows上它应该可以工作,如果你追加一个“;”到“*”(如“-cp / path / to / jar /*;").

答案 2 :(得分:-1)

问题与C ++无关,实际上如果你从命令行(windows或任何其他)尝试类似的命令(如在java -cp / path / to / jars / * my.awesome.project.Main中) OS)你会遇到同样的问题。

遗憾的是,jvm初始化并不支持通配符,因此您必须自己扫描目录并构建包含jar文件路径的字符串。