ChatGPT解决这个技术问题 Extra ChatGPT

未经测试的 Maven 打包/安装(跳过测试)

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

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

B
BullyWiiPlaza

运行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
A
Aaron Nagao

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

mvn package -DskipTests

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

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

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

您不能再使用此配置从命令行运行测试。
@EmmanuelBourg 这可以通过以下示例中的说明来解决maven.apache.org/plugins/maven-surefire-plugin/examples/…
C
Chris Beach

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

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

-Dmaven.test.skip.exec

这是我正在寻找的答案,工作得很好。谢谢。
我怎么会记得那件事?为什么不做一个简单明了且容易记住的别名,比如“skipTests”?
R
Rosdi Kasim

如果您在 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。但这个解决方案救了我
v
vimal krishna
<properties>
    <maven.test.skip>true</maven.test.skip>
</properties>

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


D
Dushmantha

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

https://i.stack.imgur.com/512iH.png


s
svarog

您只需提供

-Dmaven.test.skip

您不再需要附加 =true


m
manash

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

mvn package -Dmaven.test.skip=true

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


a
anubhava

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

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

S
Sahil Chhabra

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

mvn package -DskipTests

或者

mvn package -Dmaven.test.skip=true

R
Ravinda Lakshan

只是mvn clean install -DskipTests


S
Sourabh Bhavsar

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

mvn clean install -DskipTests


P
Prasenjit Mahato

以下两个命令最有用

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

谢谢


R
Ryan Stewart

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

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


我有一个类似的问题:我的应用程序包含 websocket。当我运行 mvn clean install 时,我最终进入了无休止的测试系列。在我强制关闭它之前,这个过程已经持续了 3 个小时,打印的消息只是关于 Websocket。你能看看我的问题,看看我做错了什么吗? stackoverflow.com/questions/54614739/…
规则总是有例外。如果你不这么认为,那你就错了。
i
igonejack

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

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

谢谢,我今天正是需要这个。
P
Patrick Tolentino

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

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


为什么这被否决了?每次我想构建我的项目但跳过测试时我都会使用它
佚名

那些不想跳过测试用例的人。就在主测试类的上方注释掉或删除注释:

//@SpringBootTest

那么当Maven构建一个应用程序时,它仍然会在这个类内部运行测试,但不会运行SpringBoot应用程序,因此不会测试与DB的连接,构建会成功。


O
Ozyman

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


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

mvn clean install -Dmaven.test.skip=true

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


m
mcvkr
mvn package -Dmaven.test.skip=true

V
Vladimir

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


如果您单击包,它会运行测试,这是 OP 试图避免的