1

我正在尝试在“始终处于活动状态”的 Maven 配置文件中运行一次插件,然后在有条件执行的配置文件中再次运行。当条件配置文件运行时,“永远在线”配置文件中的插件不会执行。但是,当仅使用“始终活动”配置文件执行 maven 时,插件运行得很好。

这是我的 pom.xml 的示例

<profile>
        <id>default</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <property>
                <name>!doNoEverSetThisPropertyThisProfileShouldAlwaysBeActive</name>
            </property>
        </activation>
        <build>
            <plugins>                    
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>antCopyResources</id>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                    ...
                </plugin>
            </plugins>
         </build>
</profile>

<profile>
        <id>prod</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>prodTokenReplace</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                    ...
                </plugin>
            </plugins>
        </build>
</profile>

例如,如果我像这样调用 maven:

mvn clean compile

默认配置文件中的 antrun 插件运行良好。

但是,如果我像这样调用 Maven:

mvn -P prod clean compile

只有 prod 中的 antrun 插件运行。

mvn -P prod help:active-profiles

Active Profiles for Project 'projectname':

The following profiles are active:

 - default (source: pom)
 - prod (source: pom)
4

2 回答 2

1

我知道这是一个迟到的答案,但它可能对其他人有所帮助。

我有一个类似的情况,我通过将执行的公共(activeByDefault)部分放在配置文件部分和主构建部分之外来解决。

这样,构建将始终运行主构建的 antrun,并且根据条件,相关配置文件中的 antrun。

根据您的初始示例:

<build>
      <plugins>                    
           <plugin>
               <artifactId>maven-antrun-plugin</artifactId>
               <executions>
                   <execution>
                       <id>antCopyResources</id>
                       <phase>process-resources</phase>
                       <goals>
                           <goal>run</goal>
                       </goals>
                  </execution>
              </executions>
              ...
         </plugin>
     </plugins>
</build>

<profiles>
   <profile>
        <id>prod</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>prodTokenReplace</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                    ...
                </plugin>
            </plugins>
        </build>
   </profile>
<profiles>

我希望这有帮助。

于 2013-01-29T11:58:39.557 回答
0

您可以保留默认值,并将 ant-run 插件配置从默认值复制到 prod 中,这样您最终会在 prod 中得到两个插件配置,例如:

<profile>
    <id>prod</id>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>antCopyResources</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
                ...
            </plugin>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>prodTokenReplace</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
                ...
            </plugin>
        </plugins>
    </build>
</profile>
于 2012-09-10T21:57:00.207 回答