【问题标题】:How do I exclude a dependency in provided scope when running in Maven test scope?在 Maven 测试范围内运行时,如何排除提供范围内的依赖项?
【发布时间】:2012-09-07 08:25:06
【问题描述】:

在 Maven 测试范围内运行时,如何排除提供范围内的依赖项?我有一个不寻常的用例,我需要排除特定提供的实现并在测试用例中将其替换为另一个。似乎 Maven 测试也总是包含其他范围,但在我的情况下,我想做一些例外。我该怎么做?

【问题讨论】:

  • 听起来很奇怪。你有更多细节吗?
  • 我正在尝试构建测试用例,但在我知道的任何存储库中都找不到旧的可嵌入 servlet 容器。我使用的框架只允许更新的 servlet 容器作为“测试”包含在我们的依赖项中。旧的 servlet 版本作为“提供”包含在我们的依赖项中。当然,在类路径中混合它们会导致异常。因此,需要在 Maven 测试中从类路径中排除旧的 servlet。

标签: java maven maven-2


【解决方案1】:

在某些情况下,您需要在不同的模块中运行测试。这可能是您在这里所需要的。它允许您的测试使用不同的依赖项、属性和 Java 版本等。

【讨论】:

  • 我想真的没有别的办法了。我相信这是我能找到的最干净的方法。
【解决方案2】:

我认为,最简单的方法是为您要使用的每个依赖项创建 2 个配置文件。您可以通过默认激活具有提供范围的那个。

它可能看起来像这样:

<profiles>
    <profile>
        <id>providedDependency</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <dependencies>
            <dependency>[provided dependency information]</dependency>
        </dependencies>
    </profile>
    <profile>
        <id>testDependency</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <dependencies>
            <dependency>[test dependency information]</dependency>
        </dependencies>
    </profile>
</profiles>

当进入测试模式时,取消激活提供的依赖并激活另一个

mvn test -P!providedDependency,testDependency

【讨论】:

  • 基于配置文件似乎与 m2e eclipse 插件集成得不好。 Eclipse 的 JUnit 插件也没有集成。有没有办法在 eclipse 中的配置文件之间切换并让 eclipse 根据配置文件中定义的内容切换库?没有这个,我无法调试代码。到目前为止找不到比这更好的解决方案。也许我应该尝试将它分离到不同的模块中,看看是否可行。
  • 您是否尝试过在 Eclipse 中创建一个目标为“test”和配置文件“!providedDependency,testDependency”的“运行配置 --> Maven B uild”。然后您可以调试您的 jUnit 测试。
猜你喜欢
  • 2016-05-28
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2011-12-31
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
相关资源
最近更新 更多