Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven发布插件执行两次测试_Maven_Junit - Fatal编程技术网

Maven发布插件执行两次测试

Maven发布插件执行两次测试,maven,junit,Maven,Junit,当执行release:clean release:prepare release:perform时,测试将执行两次 发布后:准备、阶段运行准备目标、任务清理验证 另一个发布时间:执行、阶段运行、执行目标、任务部署 是否有任何配置选项使测试只在第一个上运行,而不在执行时执行 溴 Yulian Oifa您可以跳过运行surefire插件管理的测试,并使用明确指定的参数-DskipTests: <profile> <id>maven-release</id

当执行release:clean release:prepare release:perform时,测试将执行两次

发布后:准备、阶段运行准备目标、任务清理验证

另一个发布时间:执行、阶段运行、执行目标、任务部署

是否有任何配置选项使测试只在第一个上运行,而不在执行时执行


Yulian Oifa

您可以跳过运行surefire插件管理的测试,并使用明确指定的参数-DskipTests:

<profile>
        <id>maven-release</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <configuration>
                        <autoVersionSubmodules>true</autoVersionSubmodules>                         
                        <arguments>-Dmaven.test.skip</arguments>                        
                    </configuration>
                </plugin>
            </plugins>
        </build>        
    </profile>
大概是这样的:

mvn release:perform -DskipTests 
对于由故障保护插件管理的集成测试,您可以使用类似的标志:-DskipITs

如果您甚至不想编译测试,那么可以对单元测试和集成测试使用-Dmaven.test.skip=true

您可以覆盖goals参数并添加-DskipTests=true


此参数将仅跳过对执行部分的测试。

这是因为在您发出的命令中会运行两个完整版本

release:prepare部分对代码和存储库执行大量检查,并进行完整构建以确保所有测试都通过

释放:执行部分标记回购,然后拉取该标记。它基于该标记和构建到您选择的工艺品商店Nexus/Artifactory/Where的版本执行构建

这些步骤是这样设计的,以确保您不会因为没有构建的代码上的标记而污染您的repo,并且测试是构建的一个组成部分。一旦maven感到满意,您的代码就可以运行了,它就会创建标记并提取它,这样它就可以确定所发布的代码是标记引用的代码,而不是其他代码。构建要发布的标记需要一个完整的构建,包括测试


您可以跳过其中一个或另一个步骤上的测试,或者跳过两个步骤上的测试,但是如果您这样做,您就错过了测试和发布插件的要点。

最终我不得不更改逻辑

我已经执行了mvn清洁安装发布:清洁发布:准备发布:执行-Pmaven发布

并创建一个maven版本。因此,测试仅在安装时执行

玉莲爱发酒店

<profile>
        <id>maven-release</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <configuration>
                        <autoVersionSubmodules>true</autoVersionSubmodules>                         
                        <arguments>-Dmaven.test.skip</arguments>                        
                    </configuration>
                </plugin>
            </plugins>
        </build>        
    </profile>

这将取消在release:prepare和release-perform中的测试,目标是在我几乎没有使用release-plugin的情况下执行测试,但一般来说:您运行两个单独的命令,mvn-release:prepare和mvn-release:perform,对吗?如果是这样,我建议只运行-DskipTests和perform目标:mvn release:prepare,然后是mvn release:performa-DskipTestsNope,我通过jenkins CI将它们作为单个命令运行。所以完整的命令是mvn release:clean release:prepare release:performHi,我知道如果release:prepare和release perform单独执行,它们之间可能会有代码更改。然而,由于这两个测试都在jenkins上以单次执行的方式运行,因此没有理由让测试运行两次,因为它的代码相同,在prepare jenkins上运行测试修改POM并准备标记,而在发布时它将工件推送到nexus存储库。因此,我认为最好禁用发布阶段的测试,以减少作业执行时间。我们的一些项目正在运行测试数小时。这是您的代码,因此您可以使用它执行任何您想要的操作。我不同意你的意见,但这在这里没有意义。不过,我要指出,如果您的测试运行了几个小时,那么您的测试方法就有问题。您应该考虑将它们划分为更好的阶段,并在生命周期的适当阶段运行它们。当我添加-DskipTests=true时,测试仍在执行。完整的maven命令是mvn-s$maven\u SETTINGS-DskipTests=true release:clean release:prepare release:perform-dreleasevision=${releasevision}-DdevelopmentVersion=${developmentVersion},这不是我建议的。我建议更改goals参数,即添加类似-Dgoals=clean verify-DskipTests的内容