【问题标题】:Combine many Maven goals within a single one将多个 Maven 目标合并到一个目标中
【发布时间】:2012-10-10 12:50:28
【问题描述】:

到目前为止,我使用命令mvn clean compile hibernate3:hbm2java 来启动我的程序。有没有办法将这三个目标结合在一个目标中,例如mvn runmvn myapp:run?

【问题讨论】:

    标签: java maven


    【解决方案1】:

    与我的其他答案完全不同的另一个解决方案是使用 exec-maven-plugin 和目标 exec:exec

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <executable>mvn</executable>
                    <arguments>
                        <argument>clean</argument>
                        <argument>compile</argument>
                        <argument>hibernate3:hbm2java</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    然后你就这样运行它:

    mvn exec:exec
    

    通过这种方式,您不会更改任何其他插件,也不会绑定到任何阶段。

    【讨论】:

    • 我想要同样的,我真的很想把一个makefile放回原处。但我想..应该有一个maven解决方案..所以你说它确实不存在??作为,exec,如果我从名称中得到它,并且存在 的事实将“exec”!.. 所以管理步骤、依赖项和返回代码真的不容易。. 真的是 maven 的情况吗?我不能链接目标?我的意思是有点控制?
    • 刚刚用谷歌搜索了一下,找到了这个 2005 年的文档:docs.codehaus.org/display/MAVEN/Multiple+Goal+Declaration
    • 正是我正在寻找的解决方案!注意:版本 1.5.0 在 Windows 上有点损坏。请参阅 - github.com/mojohaus/exec-maven-plugin/issues/42 如果你想在那里使用它,请避免使用它。使用旧版本 1.4.0 或更新版本 > 1.5.0 发布时
    • 虽然这行得通,但这完全是围绕 maven 生态系统工作的。插件绑定到一个阶段是有原因的,这只是使用 maven 来执行 maven?正如stackoverflow.com/a/12820066/1208786 中所解释的,有一种更好的方法可以让插件在标准构建期间运行;它应该是公认的答案。
    【解决方案2】:

    根据Hibernate3 Maven Plugin 站点,hbm2java 目标默认绑定到generate-sources 阶段。

    通常您不必清理项目,您可以运行增量构建。

    无论如何,如果您将maven-clean-pluginhibernate3-maven-plugin 添加到您的pom.xml 中,您将在一个命令中完成所有操作。

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>2.5</version>
                <executions>
                    <execution>
                        <id>auto-clean</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>hibernate3-maven-plugin</artifactId>
                <version>2.2</version>
                <executions>
                    <execution>
                        <id>hbm2java</id>
                        <goals>
                            <goal>hbm2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

    如果您希望hibernate3-maven-plugincompile 之后运行,那么只需将目标设置为compile,因为它将始终在默认阶段之后运行。

    因此,只需运行一个命令即可运行所有目标:

    mvn compile
    

    如果您出于任何原因不想清理,只需键入:

    mvn compile -Dclean.skip
    

    【讨论】:

    • 如果你不希望它一直运行hbm2java,那么将那个(可能还有clean)插件放在profile中,即mvn compile -Phbm
    • 我知道我迟到了,但这应该是公认的答案。 mvn exec:exec 解决方案不是我接受的任何 maven 构建的解决方案。
    【解决方案3】:

    您还可以为 Maven 构建定义一个默认目标。 然后你的命令行调用将如下所示

    mvn
    

    定义默认目标

    将以下行添加到您的 pom.xml:

    <build>
        <defaultGoal>clean compile hibernate3:hbm2java</defaultGoal>
    </build>
    

    【讨论】:

    • 也可以将默认目标放入配置文件中,如果您不想修改默认构建,可以使用mvn -Prun 运行程序。
    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2011-05-15
    • 2014-02-28
    • 2016-11-18
    • 1970-01-01
    相关资源
    最近更新 更多