如何在没有附加执行的情况下调用maven-antrun-plugin目标到maven阶段?

时间:2012-05-11 12:52:05

标签: maven maven-antrun-plugin

我为我的项目使用maven-antrun-plugin作为init配置文件。但我需要初始化配置文件一次,当我第一次启动我的开发环境,而不是每次我启动jetty:运行。

例如,如果我将阶段附加到进程资源,每次启动jetty时,我的配置文件都会被重置。

所以我配置了这样的antrun:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
        <goals>
            <goal>run</goal>
        </goals>
        <configuration>
            <target name="init_config_files">
                <!-- init files -->
            </target>
        </configuration>
        </execution>
    </executions>
</plugin>

如果我启动mvn antrun:run,它只会给我这个错误:“[INFO]没有定义蚂蚁目标 - SKIPPED”。如果我指定目标,那就是同样的事情:“mvn antrun:run -Dtarget = init_config_files”。

4 个答案:

答案 0 :(得分:7)

试试这个:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <id>default-cli</id>
                    <configuration>
                        <target>
                            <property name="compile_classpath" refid="maven.compile.classpath" />
                            <echo message="compile classpath: ${compile_classpath}" />
                        </target>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

并运行:

 mvn antrun:run

答案 1 :(得分:4)

我遇到了同样的问题并最终弄明白:如果你只想运行一次ant任务,你可以像这样设置插件:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <configuration>
        <target name="init_config_files">
            <!-- init files -->
        </target>
    </configuration>
</plugin>

并使用mvn antrun:run执行它。这样,蚂蚁的东西就不会受到任何阶段的束缚。

答案 2 :(得分:4)

到目前为止我找到的最佳解决方案:

        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <id>go-live</id>
                    <configuration>
                        <target>
                            <!-- go live! -->
                            <exec executable="${basedir}/deploy2server.sh" failonerror="true" dir="${basedir}">
                                <arg value="deploy" />
                                <arg value="${deploy.to.server}" />
                                <arg value="${jetty.port.live}" />
                            </exec>
                        </target>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

并运行:

 mvn antrun:run@go-live

此解决方案避免目标被意外运行,即。它只是通过键入“mvn antrun:run”来运行,并且它也不会在常规maven运行期间运行。在我的jenkins实例中使用了这个qa自动部署之后,所有模块包括针对最终分发包的集成已经成功执行。

答案 3 :(得分:1)

如果您需要在特殊条件下运行构建的某些部分(例如,一次),您可以将这些部分放入Maven profile,然后调用Maven指定配置文件名称,例如: mvn -p init_config_files package