11

部署 webapp 时,我需要更新 UI 资源中的一些变量,解压缩一些资产并连接一些文件,目前这是通过 ant 任务实现的。我正在尝试使用类似这样的东西在 Maven 构建过程中运行此任务...

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>deploy-ui</id>
            <phase>prepare-package</phase>
            <inherited>false</inherited>
            <configuration>
                <target>
                    <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" />
                    <ant antfile="build.xml" target="static-assets" />
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

以上失败,因为文件尚未复制到目标目录。如果我将阶段设置为“打包”,则 ant 任务运行良好并且所有文件都已创建/修改,但这无济于事,因为在运行 ant 目标之前已经构建了 .war。

基本上,我需要在准备包阶段结束时运行我的 ant 目标。

看过生命周期参考后,我无法锻炼如何将更精细的目标暴露给 antrun 插件。

有任何想法吗?

4

2 回答 2

18

由于我的评论没有得到任何答复,我猜你想继续使用maven-antrun-plugin.

根据我的学习和经验,如果两个插件要在同一阶段执行,那么它们将按照它们在pom.xml.

为此,您必须maven-war-plugin<plugins/>列表中添加maven-antrun-plugin.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>deploy-ui</id>
            <phase>package</phase>
            <inherited>false</inherited>
            <configuration>
                <target>
                    <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" />
                    <ant antfile="build.xml" target="static-assets" />
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <executions>
        <execution>
            <!-- First step is to disable the default-war build step. -->
            <id>default-war</id>
            <phase>none</phase>
        </execution>
        <execution>
            <!-- Second step is to create an exploded war. Done in prepare-package -->
            <id>war-exploded</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>exploded</goal>
            </goals>
        </execution>
        <execution>
            <!-- Last step is to make sure that the war is built in the package phase -->
            <id>custom-war</id>
            <phase>package</phase>
            <goals>
                <goal>war</goal>
            </goals>
        </execution>
    </executions>
</plugin>

添加了更多执行,以便default-war首先禁用战争,然后爆炸战争,最后打包战争。

于 2012-10-01T11:24:35.443 回答
1

正如您所观察到的,这是生命周期无法提供所需粒度的地方。我之前为某人回答了类似的问题。这不是您问题的确切答案,但该技术可能适用。

于 2012-10-02T13:51:32.087 回答