如何以编程方式重写/更改Java中认可的标准?

如何以编程方式重写/更改Java中认可的标准?,java,endorsed,Java,Endorsed,在本文档中:它仅描述一种非编程方式来覆盖Java中认可的标准(例如,提供不同的TransformerFactory实现等)。通过将JAR放入\lib\approved 有没有一种方法可以通过编程方式指定一个被认可的jar?(看看Tomcat的被认可的目录,我认为这是可能的,毕竟Tomcat是用Java编写的)Tomcat在启动JVM时也只是设置系统属性,所以使用常规/文档化的方式(“Tomcat通过在启动容器的命令行中包含系统属性设置-Djava.annowered.dirs=$JAVA\u a

在本文档中:它仅描述一种非编程方式来覆盖Java中认可的标准(例如,提供不同的TransformerFactory实现等)。通过将JAR放入
\lib\approved


有没有一种方法可以通过编程方式指定一个被认可的jar?(看看Tomcat的被认可的目录,我认为这是可能的,毕竟Tomcat是用Java编写的)

Tomcat在启动JVM时也只是设置系统属性,所以使用常规/文档化的方式(“Tomcat通过在启动容器的命令行中包含系统属性设置-Djava.annowered.dirs=$JAVA\u annowered\u dirs来利用这种机制。”)

因此,以编程的方式实现它并不容易,我假设在JVM启动后设置system属性没有任何效果(我没有测试这个)


但是,这仍然是可能的:您只需从应用程序中启动另一个JVM,并在其中设置系统属性。您的应用程序必须首先检查是否设置了已认可的目录,如果是,则正常运行,如果不是:使用
Runtime.getRuntime().exec(cmdarray)
以“再次启动自身”(当然要正确设置系统属性)。要正确设置“启动本身”有点复杂,但这是可能的。我工作的公司()在所有产品中都使用它,我们称之为“快速启动”。我相信我们实际上并没有设置认可的目录,但我们设置了最大内存(
-Xmx..
)如果当前设置不够。

设置特定实现的系统属性确实有效果(例如,设置TransformerFactory实现,又名Xalan),但我希望每个类加载器都使用自己的实现。我想我找到了答案,但我会先等着看更多的想法。。。