java maven exec-maven-plugin没有在mvn clean install上执行

时间:2014-05-15 19:53:16

标签: java maven jenkins exec-maven-plugin

对上一个问题的跟进: Maven run class before test phase: exec-maven-plugin exec:java not executing class

我在jenkins盒子上运行jUnit4测试,用maven构建。我需要在构建的测试阶段之前运行特定的main方法java程序。目的是在测试运行之前恢复测试数据库。

如果我运行了这个exec分配的确切阶段,我的类按预期执行;但是当我运行整个构建时,我的类不会执行:

具体来说,它运行:
mvn -X exec:java generate-test-resources

但不会与:> mvn -X -e install
- 或 -
mvn -X -e clean install

pom.xml:我的pom.xml文件包含:

<pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>            
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3</version>
            <executions>
                <execution>
                    <id>build-test-environment</id>
                    <phase>generate-test-resources</phase>          
                    <goals>
                        <goal>java</goal>           
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>main.java._tools.BuildTestEnvironment</mainClass>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

生命周期默认值: 我还没有看到maven的生命周期。日志将其报告为:

[DEBUG] Lifecycle default -> [
    validate,
    initialize,
    generate-sources,
    process-sources,
    generate-resources,
    process-resources,
    compile,
    process-classes,
    generate-test-sources,
    process-test-sources,
    generate-test-resources,
    process-test-resources,
    test-compile,
    process-test-classes,
    test,
    prepare-package,
    package,
    pre-integration-test,
    integration-test,
    post-integration-test,
    verify,
    install,
    deploy
]

2 个答案:

答案 0 :(得分:6)

<pluginManagement>下定义了你的插件,你实际上是在告诉maven当你调用插件时,你将在整个项目中使用哪个版本的插件。我通常希望<pluginManagement>标签出现在父pom中。

要调用插件,只需输入<plugins/>元素即可。它可能会也可能不会继承自

因此,要使用该插件,您只需要通过添加

来调用插件
<plugins>
        <plugin>            
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3</version>
            <executions>
                <execution>
                    <id>build-test-environment</id>
                    <phase>generate-test-resources</phase>          
                    <goals>
                        <goal>java</goal>           
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>main.java._tools.BuildTestEnvironment</mainClass>
            </configuration>
        </plugin>
    ...AnyOtherPlugin
    <plugins>

没有任何<pluginManagement>标记

答案 1 :(得分:2)

Ashish接受了它:<pluginManagement>正在杀死它。

我认为我需要<pluginManagement>,因为Eclipse和m2e存在问题。原来m2e的人有一个解决方案(一个非常复杂的解决方案)。

请参阅:

How to solve "Plugin execution not covered by lifecycle configuration" for Spring Data Maven Builds

- 和 -

http://wiki.eclipse.org/M2E_plugin_execution_not_covered

祝你好运,如果你遇到这个!