繁体   English   中英

JNI能否在类路径中实现通配符扩展?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM