Java 将替代服务实现添加到类路径

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-

我有一些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-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
将库附加到启动类路径