Maven 执行插件两次,一次在 "always active" 配置文件中,另一次在有条件运行的配置文件中?



我试图在"始终活动"的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)

我知道这是一个迟来的答案,但它可能会帮助其他人。

我有一个类似的案例,我通过将执行的公共(activeByDefault)部分放在profiles部分之外和build主部分中来解决。

这样,构建将始终运行主构建的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>

我希望这能有所帮助。

您可以保持默认值不变,并将ant运行的插件配置从默认值复制到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>

相关内容

  • 没有找到相关文章

最新更新