构建和配置文件标签中的maven antrun插件

时间:2013-10-16 14:09:40

标签: java deployment maven-3

我们在将服务器部署到服务器时遇到问题。不同环境中的部署(dev,int,acc等)之间存在差异。对于我们部署到1个weblogic服务器的每个环境。在某些情况下,还需要在第二台服务器上进行部署。

因此我们尝试在这样的构建标记中使用antrun插件(因为它需要在每个环境的部署中运行:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <configuration>
                <tasks>
                    ... Here is our deployment task ...
                </tasks>
            </configuration>
            <executions>
                <execution><id>deploy_default</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后针对特定环境的事情,我们使用配置文件(更改文件中的值,部署到第二台服务器等)。所以我们在这里再做一些像这样的蚂蚁:

<profile>
        <id>intg</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <configuration>
                        <tasks>
                            ... Change value in files ...
                        </tasks>
                    </configuration>
                    <executions>
                        <execution>
                            <id>0_resource</id>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

我们看到的问题是,例如,如果您执行mvn clean install -Pintg,它还将在构建中执行antrun插件。它不应该这样做,因为那个目标是部署阶段。

一些研究告诉我们,你不能在build标签中有两个单独的antrun插件!这对于构建中的一个和配置文件标记中的一个是相同的吗?我知道我们可以使用maven replacer插件,所以在这种情况下,它们不会是profile标签中的antrun插件,但如果配置文件标签中的ant需要发生其他东西,那么这不是解决方案。

额外的评论?也许可以在默认配置文件中定义antrun插件,但是有时候某种方式可以说该配置文件总是需要执行,即使有其他配置文件请求吗?所以如果你愿意的话--Pintg - &gt;然后它会做-Pdefault,intg(因为如果你需要在任何地方输入默认值,那将是一团糟)

备注2:我知道你可以为一个配置文件将activeByDefault设置为true,但我认为如果你没有指定-P,我只能使用默认配置文件执行?

1 个答案:

答案 0 :(得分:1)

配置是在插件级别,而不是执行级别。因此,通过将配置放在执行标记内,它只会针对特定阶段和目标执行!

所以它应该是这样的:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
            <execution>
                <configuration>
                    <tasks>
                        ... Here is our deployment task ...
                    </tasks>
                </configuration>
                <id>deploy_default</id>
                <phase>deploy</phase>
                <goals>
                    <goal>run</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>