我有一个通过 JNI 调用 Java 的 C 二进制文件。我将 CLASSPATH 设置为 somedir/* 以获取 somedir 中的所有 jar。
当我运行二进制文件时,找不到所需的类定义。当我运行时
java that.class's.name
从同一个命令行,成功找到类。如果我明确地将 somedir/中的所有 jar 添加到类路径,一切都很好,但这会导致非常长的类路径,我想避免。
通过 JNI 执行的 JVM 是否支持类路径的通配符扩展?能做到吗?
最佳答案
我通过阅读热点源码找到了答案。
只有通过 CLASSPATH
或 -cp
/-classpath
传递的路径才能进行通配符扩展。然后将它们作为系统属性通过 -Djava.class.path
传递给正在运行的 JVM。
您通过 JVMOptions
结构告诉 JNI 调用的 JVM 关于类路径,它可能包括 -Djava.class.path
但 -classpath
不会必然被兑现(并且在实践中,不是通过热点实现)。由于 java.class.path
作为系统属性直接传递给 JVM,它不会扩展通配符,因此通配符将不起作用。
关于java - 可以让 JNI 支持类路径中的通配符扩展吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320619/