【问题标题】:Maven package/install without test (skip tests)未经测试的 Maven 打包/安装(跳过测试)
【发布时间】:2011-11-19 08:07:18
【问题描述】:

我正在尝试打包我的项目。但是,它会自动运行之前执行打包的测试。测试在数据库中插入一些内容。这不是我想要的,我需要避免在打包应用程序时运行测试。有人知道如何在没有测试的情况下运行包吗?

【问题讨论】:

  • 一个单元测试应该包括以下 4 个阶段:初始化、测试、验证和拆卸。也许你应该调整你的测试并添加一个相应的数据库拆卸/清理,或者你应该使用一个单独的数据库实例,而不是与你的 jar 文件打包,来运行你的测试。
  • 您的测试似乎“繁重”,因此您不想执行它们。但这是一个不好的做法。也许像 DBUnit 这样的一些框架可以帮助你?或者您可以在测试结束时恢复数据库更改?

标签: java maven


【解决方案1】:

使用 maven 运行

mvn package -Dmaven.test.skip

【讨论】:

  • 感谢您的即时回复,我正在从 Eclipse 运行,我在其中添加命令 -Dmaven.test.skip=true?
  • 我从未从 Eclipse 启动 mvn,但在配置 maven 目标和配置文件的运行配置窗口中,有一个“跳过测试”复选框。也许这会成功。
  • 根据documentation 将跳过编译以及执行。您可以使用 -DskipTests 跳过执行。 This post 还给出了一些关于您可以将每个标志与哪些版本一起使用的警告
  • 非常感谢,我以前使用-DskipTests 来做,但它不再起作用了,知道为什么吗?
  • 请注意,Maven Surefire PluginMaven Failsafe Plugin 文档建议设置 skipTests 优于设置 maven.test.skip
【解决方案2】:

只需提供下面提到的命令,它将忽略执行测试用例(但会编译测试代码):

mvn package -DskipTests

【讨论】:

  • 对我来说这行不通。我不得不改用公认的解决方案
  • -DskipTests 在我使用 mvn clean install -DskipTests 时对我不起作用
  • 它部分没问题,因为它不会执行测试但它会编译测试类.....
  • 对于追随者,-DskipTests-Dmaven.test.skip.exec=true stackoverflow.com/a/21933970/32453 相同,是的,它编译测试而不运行它们(而 -Dmaven.test.skip=true 不编译它们)
【解决方案3】:

以下两个命令最有用

mvn clean package -Dmaven.test.skip=true 
mvn clean package -DskipTests

谢谢

【讨论】:

    【解决方案4】:

    进行 maven 构建和跳过测试的简写符号是:

    mvn clean install -DskipTests

    【讨论】:

      【解决方案5】:

      你只需要提供

      -Dmaven.test.skip
      

      您不再需要附加=true

      【讨论】:

        【解决方案6】:

        在 Inllij IDEA 中还有一个选项可以跳过测试目标。

        【讨论】:

          【解决方案7】:

          对于没有感染maven测试的maven包:

          <properties>
              <maven.test.failure.ignore>true</maven.test.failure.ignore>
          </properties>
          

          【讨论】:

          • 谢谢,我今天正好需要这个。
          【解决方案8】:

          您可以将-DskipTests-Dmaven.test.skip=true 添加到任何mvn 命令以跳过测试。在您的情况下,它将如下所示:

          mvn package -DskipTests
          

          mvn package -Dmaven.test.skip=true
          

          【讨论】:

            【解决方案9】:

            只需mvn clean install -DskipTests

            【讨论】:

              【解决方案10】:

              在 Intellij 中,转到查看 -> 工具窗口 -> 选择 Maven 项目。 在 Lifecyle 下拉菜单中,右键单击 package -> 选择 Create 'your-project [package]'...

              在命令行字段中输入此值:package -Dmaven.test.skip=true -f pom.xml。单击应用,运行配置下拉菜单应与您创建的自定义 maven 命令一起出现。

              【讨论】:

              • 为什么这被否决了?每次我想构建我的项目但跳过测试时我都会使用它
              【解决方案11】:

              最好和最简单的方法,在 IntelliJ Idea 的“Maven Project”窗口中,只是不要点击测试按钮。我希望,我帮助了你。祝你有美好的一天:)

              【讨论】:

              • 如果你点击包,它会运行测试,这是 OP 试图避免的
              【解决方案12】:
              mvn package -Dmaven.test.skip=true
              

              【讨论】:

                【解决方案13】:

                mvn clean install -Dmaven.test.skip=true

                为我工作,因为 -Dskip 不再工作了。

                【讨论】:

                  【解决方案14】:

                  如果您在 Windows Powershell 中尝试此操作,您将收到此错误:

                  [ERROR] Unknown lifecycle phase ".test.skip=true". You must specify a valid lifecycle phase or a goal in the format...
                  

                  原因是,在 Powershell 中,“-”具有特殊含义,导致 maven 出现问题。

                  解决方案是在它前面加上一个反引号 (`),就像这样..

                  mvn `-Dmaven.test.skip=true install 
                  

                  参考:http://kuniganotas.wordpress.com/2011/08/12/invalid-task-test-skiptrue-you-must-specify-a-valid-lifecycle-phase/

                  【讨论】:

                  • 我遇到了同样的问题,这为我解决了。谢谢。
                  • 非常感谢!这个问题困扰很久了。
                  • 我在 intellij 终端中遇到了这个问题,看起来终端指向的是 powershell 而不是 cmd。但这个解决方案救了我
                  【解决方案15】:
                  <properties>
                      <maven.test.skip>true</maven.test.skip>
                  </properties>
                  

                  也是在pom文件中添加的一种方式

                  【讨论】:

                    【解决方案16】:

                    在这里回答一个古老且已被接受的问题。如果你想避免一直传递命令行参数,你可以在你的 pom.xml 中添加这个:

                      <properties>
                        <skipTests>true</skipTests>
                      </properties>
                    

                    【讨论】:

                      【解决方案17】:

                      请注意,-Dmaven.test.skip 会阻止 Maven 构建 test-jar 工件。

                      如果您想跳过测试但按照正常构建使用创建工件:

                      -Dmaven.test.skip.exec
                      

                      【讨论】:

                      • 这是我正在寻找的答案,工作正常。谢谢。
                      • 我到底要怎么记住这一点?为什么不创建一个简单易记的别名,例如“skipTests”?
                      【解决方案18】:

                      您可以将 maven.test.skip 标志作为 JVM 参数传递,以在运行包阶段(以及默认生命周期中的前一个阶段)时跳过正在运行的测试:

                      mvn package -Dmaven.test.skip=true
                      

                      您也可以将skipTests 标志单独传递给 mvn 可执行文件。如果你想在你的 POM 中包含这些信息,你可以创建一个新的配置文件,你可以在其中配置 maven-surefire-pluginskip tests

                      【讨论】:

                        【解决方案19】:

                        显然,你做错了。测试是预包装的重要组成部分。你不应该忽略或跳过它,而应该以正确的方式去做。尝试更改它插入数据的数据库(如 test_db)。设置它可能需要一段时间。并且为了确保这个数据库可以永远使用,您应该在测试结束时删除所有数据。 JUnit4 有注释,让你很容易。对正确的方法使用@Before、@After @Test 注释。你需要花一些时间在上面,但这是值得的!

                        【讨论】:

                        • 我认为这个问题以及在不运行测试的情况下打包的愿望是完全有效的。我不认为 OP“显然是以错误的方式做事”。不同的人和项目有不同的需求,这些通常不符合 Maven 圣经或不同人(比如你自己)关于软件开发应该如何工作的信念。如果没有居高临下的态度,我认为您的回答会更受欢迎。
                        【解决方案20】:

                        如果您不想设置命令行参数,可以将此插件配置添加到您的 pom:

                        <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-surefire-plugin</artifactId>
                          <configuration>
                            <skipTests>true</skipTests>
                          </configuration>
                        </plugin>
                        

                        【讨论】:

                        【解决方案21】:

                        测试应始终[1] 在打包之前运行。如果您需要关闭测试,那么您做错了什么。换句话说,你试图解决错误的问题。弄清楚你的问题到底是什么,然后问这个问题。听起来好像和数据库有关。

                        [1] 当您需要快速生成工件以供本地开发使用时,您可能会跳过测试,但通常,创建工件应始终遵循成功的测试运行。

                        【讨论】:

                        • 我有一个类似的问题:我的应用程序包含 websocket。当我运行 mvn clean install 时,我最终进入了无休止的测试系列。在我强制关闭它之前,这个过程已经持续了 3 个小时,打印的消息只是关于 Websocket。你能看看我的问题,看看我做错了什么吗? stackoverflow.com/questions/54614739/…
                        • 规则总是有例外。如果你不这么认为,那你就错了。
                        猜你喜欢
                        • 2014-09-03
                        • 2021-04-30
                        • 1970-01-01
                        • 2012-02-13
                        • 2017-04-27
                        • 2013-07-07
                        • 1970-01-01
                        • 2011-02-05
                        • 2013-04-30
                        相关资源
                        最近更新 更多