1

「常にアクティブな」Mavenプロファイルでプラグインを1回実行し、条件付きで実行されるプロファイルで再度実行しようとしています。条件付きプロファイルが実行されると、「常時オン」プロファイルのプラグインは実行されません。ただし、「常にアクティブ」なプロファイルだけで 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 に次のような 2 つのプラグイン構成ができます。

<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 に答える