[英]Can JNI be made to honour wildcard expansion in the classpath?
我有一个C二进制文件,通过JNI调用Java。 我将CLASSPATH设置为somedir / *以获取somedir中的所有jar。
当我运行二进制文件时,找不到所需的类定义。 我跑的时候
java that.class's.name
从同一命令行,成功找到该类。 如果我明确地将somedir /中的所有jar添加到类路径中,一切都很好,但这导致了一个很长的类路径,我想避免。
通过JNI执行的JVM是否支持类路径的通配符扩展? 可以这样做吗?
我通过阅读热点源代码找到了答案。
只有通过CLASSPATH
或-cp
/ -classpath
传递的路径才会受到通配符扩展的影响。 然后通过-Djava.class.path
将它们作为系统属性传递给正在运行的JVM。
您可以通过JVMOptions
结构告诉JNI调用的JVM有关类路径的JVMOptions
,该结构可能包括-Djava.class.path
但-classpath
不一定会受到尊重(实际上,不是由热点实现)。 由于java.class.path
作为系统属性直接传递给JVM,因此它不会扩展通配符,因此通配符将不起作用。
不,不,它不能。 使用JNI没有帮助。
你这样做的方法是实现自己的类加载器(在Java中),但是类加载器必须在无通配符的CLASSPATH中。
当然,您可以在调用JVM 之前将CLASSPATH设置为其扩展形式。 这可以工作,可以通过shell脚本完成(不需要JNI)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.