1

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

问题如下:

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

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

  3. 但是,我还有其他不是集成测试的测试,它们会受到在类路径中包含 jar A、B 和 C 的不利影响。

4

4 回答 4

4

war不是依赖范围。有效范围是provided, compile, runtime, test, system. 您只能选择其中一个,它们是唯一的选项,并且它们都不排除在test范围之外。

于 2013-04-04T13:02:53.940 回答
0

你有几个选项的属性:运行时、测试、编译等。

例如:

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
  <version>${org.slf4j.version}</version>
  <scope>runtime</scope>
</dependency>

更多你可以在这里阅读。

于 2013-04-04T12:58:53.600 回答
0

您可以在依赖项部分中指定范围,如下所示。它可以被称为测试、编译或运行时。

    <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>org.springframework.integration.adapter</artifactId>
        <version>1.0.3.RELEASE</version>
        <scope>runtime</scope>            
    </dependency>

希望这可以帮助。谢谢,KJ

于 2013-04-04T13:00:21.387 回答
0

不错的选择

啊哈!可以通过使用 surefire-plugin 从测试阶段排除某些依赖项。这在这个StackOverflow 答案中有所描述。

这样我就可以创建我的战争并且在测试范围内没有依赖项(感谢Peter Mularien)!

不好的选择

看起来 Maven 程序集插件要求您include在依赖范围内也有任何可用的依赖项。因为test它是最小的范围,所以不可能在你的战争中包含一个依赖项,而不让它在项目的测试范围内也可用。

maven war 插件不允许您包含(或排除)依赖项。

另一种选择是创建第二个“分发”模块,在它的 pom.xml 中包含所需的依赖项。然而,这意味着 arquillian 测试引用了之前构建的战争——这也不理想。

另一种选择是使用 Shrinkwrap 创建一个带有测试的 jar 并派生 JVM 来运行“测试”jar——我之前需要使用多个 ORM 测试我的代码时已经这样做了(否则,在你的路径中有 OpenJPA例如,与在您的路径中使用 Hibernate 冲突)。但这会使您的测试与测试框架(JUnit、TestNG 等)断开连接,并使测试难以调试。

于 2013-04-04T13:34:35.973 回答