【问题标题】:Maven: skip test but still fails on surefireMaven:跳过测试但仍然失败
【发布时间】:2012-03-03 16:36:41
【问题描述】:

我不知道这是一个问题还是一个建议。但我会问它作为一个问题,因为可能是我做错了什么。

我的问题是我想在 maven 构建中跳过测试,在 eclipse 插件中,我在运行 maven 时检查了配置中的 Skip Test 选项。它仍然在 Test surefire 插件上失败,因为它无法下载 2.4.3 版本(即使我以前的 maven 项目使用 2.7.2 并且它已经存在于我的仓库中)所以我尝试跳过测试,它仍然失败的。

我将我的 POM 配置为使用我已经拥有的 surefire 2.7.3 插件,它只是说跳过测试。现在,我的困惑是,当它已经要跳过测试部分时,为什么还要费心去下载并确认用于surefire的插件是否存在。我说的就跳过它..

好吧,这是 maven 的正常行为,当您跳过某些内容时,插件仍然会被下载,就好像您要使用它一样。还是我做错了让它下载。

可能是因为当我使用 m2eclipse 在 eclipse 中导入我的 maven 项目时,我无法编辑 Effective POM .在制作 maven 项目时,我以前在 NetBeans 中没有看到过这种情况。

为了工作,我在我的构建配置文件中添加了一个不必要的肯定插件条目,并跳过了那里的测试,并添加了我已经在我的仓库中拥有的版本。我这样做只是为了让我的项目也可以在 eclipse 下构建。否则我的项目可以在 NetBeans 和简单的命令行中运行,没有任何问题。

任何cmets!!

我认为maven应该能够先看到SKIP部分,然后再进入插件的使用。

赛德..

【问题讨论】:

  • 你能发布你收到的错误信息吗?并且 pom(摘录)会有所帮助。
  • 错误只是说明它无法下载surefire插件2.4.3并要求我手动下载并手动添加它。所以我使用了 2.7.2(抱歉不是 2.7.3)。现在它正在工作,因为我在我的 POM 中添加了它。 eclipse 插件在 Pom.xml 中有一个名为 Effective POM 的新部分,它的插件管理部分中有这个 2.4.3 插件版本。我通过在我的实际 POM 中添加 2.7.2 来超越它。 (有效的 POM 是一个不可编辑的 POM,我认为 eclipse 实际上与我的一起使用。)
  • 有效的pom是maven的超级pom和你项目的当前pom混合。更准确地说,你的 pom 继承了 super pom 的东西。您也可以通过 mvn help:effective-pom ... 在命令行上输出它

标签: maven surefire


【解决方案1】:

根据您提到的内容,您不了解使用插件和配置插件之间的区别。在这种情况下,您正在使用插件(它在您的构建区域中,或者您已经通过 super-pom 发现)。此外,尽管maven-surefire-plugin in version 2.7.3 不存在,您仍试图跳过测试。

配置参数skip不会执行测试也不会编译它们。如果您不想在有限的时间内忽略测试,您可以使用“skipTest”参数,与跳过相反,它将继续编译测试。

我建议使用您项目的 pluginManagement 部分或您的父 pom 来定义 maven-surefire-plugin 的版本(同时存在于 2.12 版中)...

下面的 sn-p 将 pluginManagement 部分添加到一个控制将使用哪个版本的 maven-surefire 插件的 pom。

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.11</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
    ..
  </build>

将其插入项目 pom 后,输出的有效 pom 应该为您提供版本...否则您可能需要先更新项目配置。

【讨论】:

  • 我有来自 maven 的 2.7.2 构建并自行下载它自己的 repo。查看您的链接 evev 2.7.2 是旧版本。当我将项目添加到 Eclipse 并使用 Maven 插件用于 Eclipse 时,它​​为自己创建了一个有效的 POM,列出了该插件的旧版本。我猜想使用 2.4.3 很难连接到 eclipse 插件中进行配置。我看到 Effective POM 中的很多插件实际上都非常旧。我无法控制 Effective POM,所以我无法更改其中的任何内容。
  • eclipse插件与此无关,因为它基于maven(超级pom;如前所述)。
【解决方案2】:

编译和运行测试是 maven 的默认 lifecycle 的一部分。由于maven使用surefire进行运行测试,所以需要下载surefire。 skipTests 不是 maven 配置,而是一个万无一失的插件配置。插件判断maven需要skip tests

至于 2.4.3 的 surefire 插件,它是 valid version,但可以与 2.0.6 版本的 maven 一起使用。很可能您使用的是较新的 maven,但由于某种原因,您的系统上有旧 maven 版本的 super pom

【讨论】:

    【解决方案3】:

    skipTest 不会告诉 maven 跳过测试生命周期,它会告诉 surefire 插件不要运行它们。该插件仍然是生命周期的一部分(当它被调用时它什么也不做)。因此你的错误。

    如果您根本不想使用surefire,则需要定义自己的打包(因为surefire 是标准jar 打包生命周期的一部分)——这比选择适合您的surefire 版本要多得多(在您的部分中添加一个右侧的部分)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-27
      • 2016-05-17
      • 2015-03-20
      • 1970-01-01
      • 2014-09-03
      • 2021-04-30
      • 1970-01-01
      • 2021-07-29
      相关资源
      最近更新 更多