我试图从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时,您是否知道如何提供带通配符的类路径?
提前致谢
答案 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文件路径的字符串。