1

私のアプリケーションはサードパーティの耳に依存しています(それはそれを分解し、その中のいくつかのアイテムを追加/変更し、そしてそれを新しい耳に再構築します)。サードパーティの耳は、サードパーティのビルドスクリプトを使用してビルドする必要があります。

私はこれを設定するための「maven-y」の方法を学ぼうとしています。サードパーティの耳をリポジトリにインストールする必要があると思います。

サードパーティのearをビルドしてインストール/デプロイするサードパーティのear用のpom.xmlを作成したいと思います。サードパーティのビルドスクリプトを(maven-antrun-plugin経由で)正常に呼び出し、デフォルトのmavenearプロジェクトとまったく同じ場所にearを作成するpom.xmlを作成しました。

私の問題は、アーカイブが見つからないためにmavenのインストールプラグインが失敗することです(maven-antrun-pluginが行わない、パッケージ化を行うプラグインがアーティファクトオブジェクトに属性を設定することを期待します)。

mvn package正常に動作し、耳を生成します。

実行時の正確なエラーメッセージmvn installは次のようになります。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.3.1:install (default-install) on project third_party_ear: The
packaging for this project did not assign a file to the build artifact -> [Help 1]

これについてもっと良い方法はありますか?

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.thirdparty</groupId>
    <artifactId>third_party_ear</artifactId>
    <version>9.0</version>
    <packaging>ear</packaging>

    <name>third_party_ear</name>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>default-ear</id>
                        <phase>none</phase>
                    </execution>
                    <execution>
                        <id>default-generate-application-xml</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <target>
                                <subant target="build-ear" antfile="build.xml" buildpath="${project.basedir}"/>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
4

1 に答える 1

2

指定する<packaging>ear</packaging>と、そのパッケージに指定されたライフサイクル全体を呼び出すようにMavenに指示します。

あなたの場合、あなたがしたいのはpom.xml、EARライフサイクルを呼び出さずにサードパーティのビルドスクリプトにシェルアウトするラッパーを作成し、生成されたアーティファクトをMavenのリアクターにアタッチすることです...

このようなものが機能するはずです

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.thirdparty</groupId>
    <artifactId>third_party_ear</artifactId>
    <version>9.0</version>
    <packaging>pom</packaging>

    <name>third_party_ear</name>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <target>
                                <subant target="build-ear" antfile="build.xml" buildpath="${project.basedir}"/>
                                <attachartifact file="${project.build.directory}/${project.build.finalName}.ear" type="ear"/>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

pomのパッケージが異なるため、若干の不具合が発生する可能性があります...ただし、これはクラスパス関連のアーティファクトではないため、影響はありません。

ANTattachartifactタスクはどこからでもアーティファクトを添付できるため、ファイルを「正しい」場所に配置するためにANTと戦う必要はありません...ただし、その規則に従う方が適切です。project.build.finalNameを使用せず、ファイル名をハードコードすることをお勧めします。

于 2012-10-30T19:13:37.643 に答える