7

antプロジェクトをmavenに変換したばかりですが、mavenは実際にはデプロイメントを処理しないため、ビルドにいくつかのantrunを導入します。ただし、実行しようとすると、プラグインはタスクをスキップします。たとえば、mvn clean antrun:runを実行すると、次のメッセージが表示されます。antターゲットが定義されていません-スキップされました。同じことが、リポジトリにアップロードするのではなく、実際のデプロイを実行するためにデプロイフェーズをオーバーライドしようとしている第2フェーズでも発生します。

以下に私のpom.xml(type:pom)の抜粋を見つけてください:

            <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <id>clean</id>
                    <configuration>
                        <task>
                            <echo>Cleaning deployed website</echo>
                        </task>
                        <tasks>
                            <delete dir="${deployRoot}/mydir/${env}"/>
                        </tasks>
                    </configuration>
                    <phase>clean</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
                <execution>
                    <id>deployment</id>
                    <configuration>
                        <task>
                            <echo>Deploying website</echo>
                        </task>
                        <tasks>
                            <echo>Copying website artifact to deployment </echo>
                            <mkdir dir="${deployRoot}/mydir/${env}" />
                            <unzip
                                src="${project.basedir}/target/${env}.${project.version}.zip"
                                dest="${deployRoot}/mydir/${env}" />
                            <chmod perm="ugo+rx">
                                <fileset dir="${deployRoot}/mydir/${env}/web-exploded/bin">
                                    <include name="**/*.sh" />
                                    <include name="**/*.bat" />
                                </fileset>
                            </chmod>
                        </tasks>
                    </configuration>
                    <phase>deploy</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
4

1 に答える 1

11

ではpom.xml、次の2種類の実行を定義します。

  • 1つはcleanフェーズにリンクされています
  • 1つはdeployフェーズにリンクされています。ちなみに、Mavenの場合、(Web-)アプリケーションをサーバーにデプロイするのでdeployなく、アーティファクトをリモートリポジトリにデプロイすることを意味することに注意してください。詳細については、プラグイン情報をお読みください。deploy

したがって、コマンドmvn deployを実行すると、Mavenライフサイクルがdeployフェーズに達すると、プラグインの実行が実行されます(の2番目の実行pom.xml)。

ただし、あなたの場合、コマンドはmvn antrun:runであるため、デフォルトのMavenライフサイクルを実行していませ(問題には関係ないため、ここでは目標を検討していません)。これをMavenで変換して、ゴールrunを使用してantrunプラグインを実行できます。これに伴う問題は、Antプラグインを直接呼び出すための構成(Antタスクを含む)を定義していないことです。clean

したがって、2つの解決策:

  • install2番目の実行をフェーズにバインドしてから、のmvn clean install代わりに実行しmvn antrun:runます。この場合、Mavenのライフサイクル全体(つまり、コンパイル、テスト、パッケージ化)を実行することに注意してください。
  • 実行に関係のないこのプラグインの構成を作成します。XMLの観点では、定義<configuration>の子となる2番目のブロックを追加(または移動)するだけです。<plugin>

2番目のソリューションを選択すると、次のpom.xmlようなソリューションになります。

       <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.6</version>
        <!-- For cleaning -->
        <executions>
            <execution>
                <id>clean</id>
                <configuration>
                    <task>
                        <echo>Cleaning deployed website</echo>
                    </task>
                    <tasks>
                        <delete dir="${deployRoot}/mydir/${env}"/>
                    </tasks>
                </configuration>
                <phase>clean</phase>
                <goals>
                    <goal>run</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <tasks>
                <echo>Copying website artifact to deployment </echo>
                ...
            </tasks>
        </configuration>
    </plugin>
于 2010-10-20T12:55:46.287 に答える