【发布时间】:2018-03-23 18:39:26
【问题描述】:
我有一些 CDI 应用程序,它是作为具有引导程序主类的 fatjar 启动的:
java $ARGS -jar foo_cdi.jar
由于某些原因我无法更改此命令行,也无法更改foo_cdi.jar。
但是我可以配置$ARGS环境变量。
我需要的是在类路径中添加一些额外的additional.jar(假设它与foo.jar 位于同一目录中)。
这个additional.jar 包含一些服务的替代实现,在foo_cdi.jar 内的我的CDI 应用程序中使用。
当然additional.jar 包含META-INF/beans.xml 带有扫描/包含路径和标记为的编译类
@Alternative
@Priority(Interceptor.Priority.APPLICATION + 1)
但是,仅将 ARGS 设置为 -classpath additional.jar 是行不通的。我猜这是因为-jar 选项:
当您使用此选项时,JAR 文件是所有用户的来源 类和其他用户类路径设置将被忽略。
所以我的问题是:有什么办法可以解决这个难题?
目前我被建议的唯一一个破解解决方案是使用自己的javaagent,它将用我自己的实现重新定义所需的类。但在我看来,这是一个淫秽和肮脏的黑客行为。
(虽然我能做到:
java -javaagent:additional.jar foo_cdi.jar)
还有其他想法吗?
【问题讨论】:
标签: java jakarta-ee jar cdi weld