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

时间:2018-03-23 18:39:27

标签: java java-ee jar cdi weld

我有一些CDI应用程序,它是作为一个带有引导程序主类的胖子启动的:

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文件是所有用户的来源   类和其他用户类路径设置将被忽略。

所以我的问题是:有什么方法可以解决这个难题吗?

目前我建议只使用一个hack-solution,就是使用自己的javaagent,它将使用我自己的实现重新定义所需的类。但在我看来,这是一个淫秽和肮脏的黑客。

(虽然我能做到:

java -javaagent:additional.jar foo_cdi.jar

还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用{8}将Java 8附加到引导类路径中。