我们的产品是一个用Java编写的独立OS X桌面应用程序.我们包含一个嵌入式JRE来运行我们的软件.
对于JRE启动的规则似乎放在任何JAR文件/usr/lib/java,/Library/Java/Extensions以及~/Library/Java/Extensions在类路径中,我们明确地包含在类路径中的库之前.
如果用户在任何Java扩展机制文件夹中都有任何JAR文件,那么这些JAR文件将添加到我们的类路径中.最近出现了一个支持事件,因为客户有一个旧版本的关键第三方库/usr/lib/java- 这导致我们的软件在启动时意外崩溃.
在调用我们的应用程序中嵌入的JRE时,我无法确定如何禁用此扩展机制.我怎样才能做到这一点?
────────
注意:似乎这个扩展机制已弃用,最终将被删除:https://blogs.oracle.com/java-platform-group/entry/planning_safe_removal_of_under)
Pra*_*ala 10
您可以覆盖"java.ext.dirs"JVM参数以指向某个应用程序目录.
我快速测试了下面的类覆盖JVM Argument,它工作正常.
$ ls /Library/Java/Extensions
extentionstest.jar
$
$java ExtentionTest
Main method executed fine.
$
$ java -Djava.ext.dirs=/home/pratapk/work/ ExtentionTest
Error: Could not find or load main class ExtentionTest
$
Run Code Online (Sandbox Code Playgroud)
并且以下类被构建ExtentionTest并复制到extentionstest.jar
public class ExtentionTest {
public static void main(String args[] ) {
System.out.println("Main method executed fine.");
}
}
Run Code Online (Sandbox Code Playgroud)
/Library/Java/Extensions支持多个目录作为冒号分隔.在您的情况下,JRE与您的应用程序一起包含在内,您可以更轻松地包含java.ext.dirs不包括的路径lib/ext