我有一个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/

10-09 15:58