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