运行 来自 C++ 代码的 JVM 和设置类路径
Running JVM from C++ code and setting classpath
我正在尝试从 C++ 代码创建 JVM 7 并努力设置正确的 class 路径。我想使用通配符指定 class 路径:例如/path/to/*(将文件夹中的所有 jar 包含到 class 路径)
如果我通过
设置 class 路径
options[0].optionString = "-Djava.class.path=/path/to/*;";
那么我的 class 没有找到。我尝试了反斜杠(我使用的是 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/*";
None 的帮助。
您知道如何在从 C++ 创建 JVM 时提供 class 带有通配符的路径吗?
提前致谢
问题与 C++ 无关,事实上,如果您从命令行 (windows 或任何其他 OS) 你会遇到同样的问题。
遗憾的是 jvm 初始化不支持通配符,因此您必须自己扫描目录并构建包含 jar 文件路径的字符串。
您需要自己执行扩展,因为这是 Java 启动器的一个功能,而不是 JNI API 的一个功能。参见launcher源码中的SetClassPath函数,它调用了内部的JLI_WildcardExpandClasspath函数,然后添加了一个-Djava.class.path选项。
如果我们让 shell 扩展通配符并且有多个 jar 文件它将不起作用,实际上例如如果在 /path/to/jars 中有 A.jar 和 B.jar 并说我们想使用包含在其中一个 jar 文件中的 C class 我们尝试 运行 (linux):
java -cp /path/to/jars/* C
它将扩展为
java -cp /path/to/jars/A.jar /path/to/jars/B.jar C
java 会抱怨找不到 class /path/to/jars/B.jar.
但是如果(再次在 linux,所以在 windows 你应该将“:”替换为“;”),按照 deviantfan 指出的文档,我执行命令
java -cp /path/to/jars/*.jar: C
它正常工作(在这种情况下不是 shell 而是扩展通配符的 jvm 初始化)。所以我想在 windows 上,如果你附加一个“;”,它应该可以工作。到“*”(如“-cp /path/to/jar/*;”)。
我正在尝试从 C++ 代码创建 JVM 7 并努力设置正确的 class 路径。我想使用通配符指定 class 路径:例如/path/to/*(将文件夹中的所有 jar 包含到 class 路径)
如果我通过
设置 class 路径options[0].optionString = "-Djava.class.path=/path/to/*;";
那么我的 class 没有找到。我尝试了反斜杠(我使用的是 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/*";
None 的帮助。
您知道如何在从 C++ 创建 JVM 时提供 class 带有通配符的路径吗?
提前致谢
问题与 C++ 无关,事实上,如果您从命令行 (windows 或任何其他 OS) 你会遇到同样的问题。
遗憾的是 jvm 初始化不支持通配符,因此您必须自己扫描目录并构建包含 jar 文件路径的字符串。
您需要自己执行扩展,因为这是 Java 启动器的一个功能,而不是 JNI API 的一个功能。参见launcher源码中的SetClassPath函数,它调用了内部的JLI_WildcardExpandClasspath函数,然后添加了一个-Djava.class.path选项。
如果我们让 shell 扩展通配符并且有多个 jar 文件它将不起作用,实际上例如如果在 /path/to/jars 中有 A.jar 和 B.jar 并说我们想使用包含在其中一个 jar 文件中的 C class 我们尝试 运行 (linux):
java -cp /path/to/jars/* C
它将扩展为
java -cp /path/to/jars/A.jar /path/to/jars/B.jar C
java 会抱怨找不到 class /path/to/jars/B.jar.
但是如果(再次在 linux,所以在 windows 你应该将“:”替换为“;”),按照 deviantfan 指出的文档,我执行命令
java -cp /path/to/jars/*.jar: C
它正常工作(在这种情况下不是 shell 而是扩展通配符的 jvm 初始化)。所以我想在 windows 上,如果你附加一个“;”,它应该可以工作。到“*”(如“-cp /path/to/jar/*;”)。