Java 将替代服务实现添加到类路径
我有一些CDI应用程序,它是作为fatjar启动的,带有一个引导主类:Java 将替代服务实现添加到类路径,java,jakarta-ee,jar,cdi,weld,Java,Jakarta Ee,Jar,Cdi,Weld,我有一些CDI应用程序,它是作为fatjar启动的,带有一个引导主类: java $ARGS -jar foo_cdi.jar 由于某些原因,我无法更改此命令行,也无法更改foo\u cdi.jar 但是我可以配置$ARGS环境变量 我需要的是在类路径中添加一些额外的additional.jar(假设它与foo.jar位于同一目录中) 这个additional.jar包含一些服务的替代实现,这些服务在foo_CDI.jar中的CDI应用程序中使用 当然additional.jar包含META-
java $ARGS -jar foo_cdi.jar
由于某些原因,我无法更改此命令行,也无法更改foo\u 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\u cdi.jar
)
还有其他想法吗?您可以使用Java 8的
-Xbootclasspath/a:additional.jar
将库附加到启动类路径