【问题标题】:Maven: Excluding tests from buildMaven:从构建中排除测试
【发布时间】:2013-01-20 23:34:57
【问题描述】:

我在项目的 src/test/java 文件夹中有一些类用作测试。当我使用标准的 Maven 编译插件运行 Maven 时。这些项目被编译成 .class 文件,并包含在打包编译代码的 jar 中。

在运行 maven 和构建我的版本之前,我已经为自己创建了这些测试以在 eclipse 中运行。它们只是健全性测试,不应包含在构建中。我宁愿不把它们放在一个单独的项目中,因为对我来说,它们在这里很有意义。如何告诉 maven 我不希望它编译/包含该目录中的文件?

我相信 maven 编译器插件生成的 jar 如下:

<plugin>
 <artifactId>maven-compiler-plugin</artifactId>
 <configuration>
  <source>1.6</source>
  <target>1.6</target>
 </configuration>
</plugin>

【问题讨论】:

  • Maven 默认会从您的可部署中排除已编译的测试。请包含您的构建文件的相关部分,以便我们查看您的特定案例的情况。
  • 我不得不把它放进去。这没什么特别的,因为我说过它使用了默认的 maven 编译插件。在这种情况下,除了包含 .class 文件的 jar 之外,没有“可部署”。我不希望测试被编译,但它们是,并且没有被排除在外。
  • 好吧,测试将总是被编译,但就像我说的,默认情况下它们被排除在外。当您将 -DskipTests=true 包含为命令行选项时会发生什么?
  • 您确定测试包含在打包的 jar 文件中吗?如果您遵守 maven 约定(听起来像是通过将测试类放在 src/test/java 中),那么除非您执行特定的操作来包含它们,否则它们将不会被包含在内。
  • @Perception 否,可以使用 -Dmaven.test.skip=true 忽略测试(因此跳过编译)(参见 maven.apache.org/surefire/maven-surefire-plugin/examples/…

标签: java maven build jar compilation


【解决方案1】:

在 maven 中构建时,junit @Ignore 的注释将忽略该类。

编辑:

你可以配置maven-surefire-plugin.

<project>
<build>
<project>
<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.4.2</version>
    <configuration>
      <excludes>
        <exclude>**/TestCircle.java</exclude>
        <exclude>**/TestSquare.java</exclude>
      </excludes>
    </configuration>
  </plugin>
</plugins>

【讨论】:

  • Maven 会识别这个注解吗?我没有使用 junit 插件,因为我的测试不是 junit 测试。可以这么说,它们只是我“手动”编写的测试。
  • 对不起。查看链接。
【解决方案2】:

我从您的comment on this answer 了解到,“测试”不是单元测试,而只是您希望从最终工件中排除的普通类?因此,您最好的选择是使用带有maven-jar-plugin&lt;exclude&gt; 标签,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <excludes>
            <exclude>**/yoursortoftestpackage/YourSortOfTestClass*</exclude>
        </excludes>
    </configuration>
</plugin>

希望有帮助!

干杯,

【讨论】:

  • 我应该先包含这个插件吗?我现在相信 maven-compiler-plugin 正在生成我的 jar。
  • 你可能有&lt;packaging&gt;jar&lt;/packaging&gt;(或者如果没有,默认是jar反正),所以插件将被隐式包含。尽管如此,明确锁定版本并没有什么坏处(意思是:一定要把它包含在你的&lt;pluginManagement&gt;部分中)。
  • *s 在这里服务的目的是什么?
  • ** 通配符将匹配任何包路径(例如org/brian/something/),而单个* 以“通常”的通配符方式工作。
【解决方案3】:

把你的自定义测试文件放在一个文件夹src/localtest/java 我想,maven 不会知道它在那里。

【讨论】:

  • 这可能行得通,但我想维护我的目录结构
【解决方案4】:

使用-Dmaven.test.skip 选项将跳过测试的编译和执行。 (使用-DskipTests只是跳过测试执行,测试仍然编译)

The reference link

mvn clean install -Dmaven.test.skip

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2014-10-05
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多