如何仅在我的战争中包含依赖项?

时间:2013-04-04 12:55:58

标签: java maven maven-3 war

我想在我的战争中包含(maven)依赖项,同时确保它们在运行时或测试范围内

问题如下:

  1. 在战争中我需要一些罐子(比如罐子A,B和C)。这是因为使用了CDI。

  2. 我有许多使用项目产生的战争的集成测试。这些集成测试是基于arquillian的测试。

  3. 但是,我还有其他测试 not 集成测试,这些测试会因类路径中包含jar A,B和C而受到不利影响。

4 个答案:

答案 0 :(得分:4)

war不是依赖范围。有效范围为providedcompileruntimetestsystem。您只能选择其中一个,它们是唯一的选项,但不会从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等)断开连接,并使测试难以调试。