将替代服务实现添加到类路径
Add alternative service implementation to the classpath
我有一些 CDI 应用程序,它作为带有 bootstrap main class:
的 fatjar 启动
java $ARGS -jar foo_cdi.jar
由于某些原因我无法更改此命令行,我也无法更改foo_cdi.jar
。
但是我可以配置$ARGS
环境变量。
我需要的是在 class 路径中添加一些额外的 additional.jar
(假设它位于与 foo.jar
相同的目录中)。
此 additional.jar
包含一些服务的替代实现,用于我在 foo_cdi.jar
中的 CDI 应用程序。
当然 additional.jar
包含 META-INF/beans.xml
和 scan/include 路径并编译 classes 标记为
@Alternative
@Priority(Interceptor.Priority.APPLICATION + 1)
然而,仅仅将 ARGS
设置为 -classpath additional.jar
是行不通的。我猜这是因为 -jar
选项:
When you use this option, the JAR file is the source of all user
classes, and other user class path settings are ignored.
所以我的问题是:有什么办法可以解决这个难题吗?
目前只有一个黑客解决方案建议我使用自己的 javaagent
,它将用我自己的实现重新定义所需的 classes。但在我看来,这是一个下流而肮脏的黑客行为。
(虽然我能做到:
java -javaagent:additional.jar foo_cdi.jar
)
还有其他想法吗?
您可以使用 -Xbootclasspath/a:additional.jar
for Java 8 将库附加到启动类路径。
我有一些 CDI 应用程序,它作为带有 bootstrap main class:
的 fatjar 启动java $ARGS -jar foo_cdi.jar
由于某些原因我无法更改此命令行,我也无法更改foo_cdi.jar
。
但是我可以配置$ARGS
环境变量。
我需要的是在 class 路径中添加一些额外的 additional.jar
(假设它位于与 foo.jar
相同的目录中)。
此 additional.jar
包含一些服务的替代实现,用于我在 foo_cdi.jar
中的 CDI 应用程序。
当然 additional.jar
包含 META-INF/beans.xml
和 scan/include 路径并编译 classes 标记为
@Alternative
@Priority(Interceptor.Priority.APPLICATION + 1)
然而,仅仅将 ARGS
设置为 -classpath additional.jar
是行不通的。我猜这是因为 -jar
选项:
When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.
所以我的问题是:有什么办法可以解决这个难题吗?
目前只有一个黑客解决方案建议我使用自己的 javaagent
,它将用我自己的实现重新定义所需的 classes。但在我看来,这是一个下流而肮脏的黑客行为。
(虽然我能做到:
java -javaagent:additional.jar foo_cdi.jar
)
还有其他想法吗?
您可以使用 -Xbootclasspath/a:additional.jar
for Java 8 将库附加到启动类路径。