4

コマンドラインから「mvn install」を実行すると、アーティファクトがローカルリポジトリにまだインストールされていない場合にのみ、アーティファクト(jar/war)を自動的にビルドすることをMavenで達成するにはどうすればよいですか?

私はすでにプロファイルを試しましたが、ここでの問題は、「アクティブ化」タスクで、Maven プロパティを介してローカル リポジトリを参照できないことです。別の環境でビルドが壊れてしまうため、ローカル リポジトリをハードコードすることはできません。

また、前の段階でファイルに触れることで回避策を試しました。たとえば、初期化してから、アクティブ化条件としてファイルの存在を確認しましたが、初期化が実行される前にアクティブ化条件が評価されるため、これは機能しません。

この問題を解決するためのヒントやアイデアはありますか?

ありがとう、ピーター

4

2 に答える 2

1

簡単に言えば、それを行う正気の方法はありません。Maven はそのようには機能しません。

あなたができることは、最初にローカルリポジトリからプロジェクトを解決しようとするシェルスクリプトを作成し(を使用)、その最初の部分が失敗した場合にのみdependency:get呼び出すことです。mvn clean installしかし、これに伴う問題は、プロジェクトの正確な groupId、artifactId、および version を呼び出しで使用する必要があることです。これは機能しないためです。

mvn dependency:get -DrepoUrl=${localRepository} -DgroupId=${project.groupId} \
    -DartifactId=${project.artifactId} -Dversion=${project.version} \
    -Dtransitive=false

残念ながら、変数はプロジェクトがまだ利用できないときに展開されます。


したがって、唯一の良い解決策は、プログラムで行うことです。カスタム プラグインを作成するか、GMavenを使用して groovy スクリプトを作成します。リポジトリからプロジェクト アーティファクトの解決を試み、成功した場合は MojoFailureException をスローします。しかし、それはまだハックであり、私はそのままにしておきます。

于 2011-09-07T12:14:23.870 に答える
0

maven-install-pluginにスキップ構成ある場合、これは次のようなプロファイルで可能になるはずです (おそらく、システム プロパティを変更して、m2 リポジトリでホーム ディレクトリを取得する必要があります)。

<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>foo.bar</groupId>
    <artifactId>lorem-ipsum</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <skip.install>false</skip.install>
    </properties>

    <profiles>
        <profile>
            <id>already-installed</id>
            <activation>
                <file>
                    <exists>${env.USERPROFILE}/.m2/repository/foo/bar/${project.artifactId}/${project.version}/${project.artifactId}-${project.version}.${project.packaging}</exists>
                </file>
            </activation>
            <properties>
                <skip.install>true</skip.install>
            </properties>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <skip>${skip.install}</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

残念ながら、maven-install-pluginにはスキップ構成の可能性がありません。これには改善要求MINSTALL-73があります。今後の Maven リリースにパッチを含めるには、このリクエストに賛成票を投じる必要があるかもしれません。

したがって、ショーン・パトリック・フロイドがすでに述べたように、「組み込み」の方法はありません

于 2011-09-07T14:26:56.420 に答える