【问题标题】:Add alternative service implementation to the classpath将替代服务实现添加到类路径
【发布时间】: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


    【解决方案1】:

    对于 Java 8,您可以使用 -Xbootclasspath/a:additional.jar 将库附加到引导类路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 2010-09-16
      • 2012-09-05
      • 2015-03-02
      • 2012-04-22
      相关资源
      最近更新 更多