我想在我的战争中包含(maven)依赖项,同时确保它们在运行时或测试范围内不。
问题如下:
在战争中我需要一些罐子(比如罐子A,B和C)。这是因为使用了CDI。
我有许多使用项目产生的战争的集成测试。这些集成测试是基于arquillian的测试。
但是,我还有其他测试 not 集成测试,这些测试会因类路径中包含jar A,B和C而受到不利影响。
答案 0 :(得分:4)
war
不是依赖范围。有效范围为provided
,compile
,runtime
,test
,system
。您只能选择其中一个,它们是唯一的选项,但不会从test
范围中排除。
答案 1 :(得分:0)
您具有多个选项的属性:运行时,测试,编译等。
例如:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j.version}</version>
<scope>runtime</scope>
</dependency>
您可以阅读here。
答案 2 :(得分:0)
您可以在依赖项部分中指定范围,如下所示。它可以被称为测试,编译或运行时。
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>org.springframework.integration.adapter</artifactId>
<version>1.0.3.RELEASE</version>
<scope>runtime</scope>
</dependency>
希望这会有所帮助。 谢谢,KJ
答案 3 :(得分:0)
好的选择:
啊哈哈!可以使用surefire-plugin从测试阶段中排除某些依赖项。这在StackOverflow answer中有所描述。这样我可以创建我的战争而不在测试范围内拥有依赖项(感谢Peter Mularien)!
错误选项:
看起来maven程序集插件要求您在依赖作用域中也可以使用任何include
依赖项。由于test
是最小的范围,因此不可能在战争中包含依赖关系,而不能在项目的测试范围内使用它。
maven war插件不允许您包含(或排除)依赖项。
另一个选择是创建第二个“分发”模块,其中包含所需的依赖关系。然而,这意味着arquillian测试然后引用了之前构建的战争 - 这也是不理想的。
另一个选择是使用Shrinkwrap创建一个带有测试的jar并分叉JVM来运行“test”jar - 我之前在需要使用多个ORM测试我的代码时已经这样做了(否则,有OpenJPA)在你的路径中与你的路径中的Hibernate冲突,例如)。但这会使您的测试与测试框架(JUnit,TestNG等)断开连接,并使测试难以调试。