maven-surefire-plugin忽略pom.xml中的插件顺序 [英] maven-surefire-plugin ignores plugins order in pom.xml

查看:130
本文介绍了maven-surefire-plugin忽略pom.xml中的插件顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有多模块Maven项目.该项目包含自行编写的Maven插件和该插件的测试项目. 我想在maven-surefire-plugin之前在test阶段运行我的插件 我在pom.xml

I have multimodule maven project. This project contains self written maven plugin and test project for this plugin. I want to run my plugin in test phase before maven-surefire-plugin I put maven-surefire-plugin after my plugin in pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>com.my.group</groupId>
            <artifactId>validator-maven-plugin</artifactId>
            <version>${project.version}</version>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>validate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
</build>

但是maven-surefire-plugin仍然优先运行.

But maven-surefire-plugin still runs first.

[INFO] ------------------------------------------------------------------------
[INFO] Building PC_TEST_PROJECT 0.23-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ PC_TEST_PROJECT ---
[INFO] Deleting C:\validator\PC_TEST_PROJECT\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ PC_TEST_PROJECT ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\validator\PC_TEST_PROJECT\src\main\java
[INFO] skip non existing resourceDirectory C:\validator\PC_TEST_PROJECT\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ PC_TEST_PROJECT ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ PC_TEST_PROJECT ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ PC_TEST_PROJECT ---
[INFO] Compiling 1 source file to C:\validator\PC_TEST_PROJECT\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ PC_TEST_PROJECT ---
[INFO] Surefire report directory: C:\validator\PC_TEST_PROJECT\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.my.group.validator.MainTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.657 sec - in com.my.group.validator.MainTest

Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] >>> validator-maven-plugin:0.23-SNAPSHOT:validate (default) > test @ PC_TEST_PROJECT >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ PC_TEST_PROJECT ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\validator\PC_TEST_PROJECT\src\main\java
[INFO] skip non existing resourceDirectory C:\validator\PC_TEST_PROJECT\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ PC_TEST_PROJECT ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ PC_TEST_PROJECT ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ PC_TEST_PROJECT ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ PC_TEST_PROJECT ---
[INFO] Skipping execution of surefire because it has already been run for this configuration
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default) @ PC_TEST_PROJECT ---
[INFO] Skipping execution of surefire because it has already been run for this configuration
[INFO]
[INFO] <<< validator-maven-plugin:0.23-SNAPSHOT:validate (default) < test @ PC_TEST_PROJECT <<<
[INFO]
[INFO] --- validator-maven-plugin:0.23-SNAPSHOT:validate (default) @ PC_TEST_PROJECT ---
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default) @ PC_TEST_PROJECT ---
[INFO] Skipping execution of surefire because it has already been run for this configuration
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] validator-parent ................................... SUCCESS [  0.175 s]
[INFO] validator .......................................... SUCCESS [  6.038 s]
[INFO] validator-maven-plugin ............................. SUCCESS [  2.012 s]
[INFO] PC_TEST_PROJECT .................................... SUCCESS [  2.762 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.298 s
[INFO] Finished at: 2015-07-05T00:46:59+03:00
[INFO] Final Memory: 21M/51M
[INFO] ------------------------------------------------------------------------

maven-surefire-plugin是预期行为吗? 如何更改插件执行顺序?

Is it expected behavior for maven-surefire-plugin? How to change order of plugins execution?

推荐答案

尝试以下方法:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>ch.stefanheimberg.stackoverflow</groupId>
    <artifactId>stackoverflow-31225404</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>run-before-surfire</id>
                        <phase>test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo message=" !!!! THIS SHOULD RUN BEFORE SUREFIRE !!!! " />
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-test</id>
                        <phase>none</phase>
                    </execution>

                    <execution>
                        <id>run-after-antrun</id>
                        <phase>test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

和控制台输出:

cd /Users/stefanheimberg/git/stackoverflow-31225404; JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home "/Applications/NetBeans/NetBeans 8.0.2.app/Contents/Resources/NetBeans/java/maven/bin/mvn" clean install
Scanning for projects...

Some problems were encountered while building the effective model for ch.stefanheimberg.stackoverflow:stackoverflow-31225404:jar:1.0-SNAPSHOT
'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 31, column 21

It is highly recommended to fix these problems because they threaten the stability of your build.

For this reason, future Maven versions might no longer support building such malformed projects.


------------------------------------------------------------------------
Building stackoverflow-31225404 1.0-SNAPSHOT
------------------------------------------------------------------------

--- maven-clean-plugin:2.4.1:clean (default-clean) @ stackoverflow-31225404 ---
Deleting /Users/stefanheimberg/git/stackoverflow-31225404/target

--- maven-resources-plugin:2.5:resources (default-resources) @ stackoverflow-31225404 ---
[debug] execute contextualize
Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory /Users/stefanheimberg/git/stackoverflow-31225404/src/main/resources

--- maven-compiler-plugin:2.3.2:compile (default-compile) @ stackoverflow-31225404 ---
No sources to compile

--- maven-resources-plugin:2.5:testResources (default-testResources) @ stackoverflow-31225404 ---
[debug] execute contextualize
Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory /Users/stefanheimberg/git/stackoverflow-31225404/src/test/resources

--- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ stackoverflow-31225404 ---
No sources to compile

--- maven-antrun-plugin:1.3:run (run-before-surfire) @ stackoverflow-31225404 ---
Executing tasks
     [echo]  !!!! THIS SHOULD RUN BEFORE SUREFIRE !!!! 
Executed tasks

--- maven-surefire-plugin:2.10:test (run-after-antrun) @ stackoverflow-31225404 ---
No tests to run.
Surefire report directory: /Users/stefanheimberg/git/stackoverflow-31225404/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0


--- maven-jar-plugin:2.3.2:jar (default-jar) @ stackoverflow-31225404 ---
JAR will be empty - no content was marked for inclusion!
Building jar: /Users/stefanheimberg/git/stackoverflow-31225404/target/stackoverflow-31225404-1.0-SNAPSHOT.jar

--- maven-install-plugin:2.3.1:install (default-install) @ stackoverflow-31225404 ---
Installing /Users/stefanheimberg/git/stackoverflow-31225404/target/stackoverflow-31225404-1.0-SNAPSHOT.jar to /Users/stefanheimberg/.m2/repository/ch/stefanheimberg/stackoverflow/stackoverflow-31225404/1.0-SNAPSHOT/stackoverflow-31225404-1.0-SNAPSHOT.jar
Installing /Users/stefanheimberg/git/stackoverflow-31225404/pom.xml to /Users/stefanheimberg/.m2/repository/ch/stefanheimberg/stackoverflow/stackoverflow-31225404/1.0-SNAPSHOT/stackoverflow-31225404-1.0-SNAPSHOT.pom
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 1.888s
Finished at: Tue Jul 07 00:41:57 CEST 2015
Final Memory: 8M/155M
------------------------------------------------------------------------

这里的窍门是,首先将您的插件(以我的antrun身份)绑定到测试阶段,然后再取消绑定"default-test"阶段.之后,您可以将Maven-surfire再次绑定到测试阶段.

the trick here is, to first bind your plugin (in my antrun) to the test phase, and after this, unbind the "default-test" phase. after this you can bind the maven-surfire to the test phase again.

这篇关于maven-surefire-plugin忽略pom.xml中的插件顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆