2011-09-07 18 views
2

Mavenでコマンドラインから "mvn install"を実行すると、そのアーティファクトがある場合にのみ自動的にアーティファクトをビルドすることを決定できますまだローカルリポジトリにインストールされていませんか?Maven 2:ローカルリポジトリにまだインストールされていない場合にのみビルドアーティファクト

私はすでにプロファイルを試していますが、ここでの問題は "アクティベーション"タスクでMavenプロパティを使用してローカルリポジトリを参照できないということです。私は別の環境で私のビルドを壊すので、ローカルリポジトリをハードコードすることはできません。

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

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

おかげで、 ピーター

答えて

0

短い答えは:Mavenのは、そのように動作していない、ということ行うにはまともな方法はありません。

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

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

はあいにくの変数は、プロジェクトがある時に展開されますまだ利用できません。


したがって、唯一の良い解決策は、プログラムで行うことです。カスタムプラグインを作成するか、GMavenを使用してGroovyスクリプトを作成します。 resolve the project artifact from the repositoryを試して、成功すればMojoFailureExceptionをスローしてください。しかし、それはまだハッキーだと私はそれを残すだけです。

0

スキップの設定を持っているでしょう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>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リリースに含まれるパッチを入手するために、この要求をupvoteするべきでしょう。

したがって、Sean Patrick Floydが既に言及したように、には、という "組み込みの"方法はありません。

+0

上記の改善要求が実装されるのと同時に、 – iuzuz

+0

最新のmavenのドキュメントから:Maven 2.0.9以降、のタグを挿入することができました。サポートされる変数は$ {user.home}のようなシステムプロパティと$ {env.HOME}のような環境変数です。 POM自体で定義されたプロパティと値は、ここでの補間には使用できません。上の例のアクティベータは$ {project.build.directory}を使用することはできませんが、パスターゲットをハードコーディングする必要があります。 – Cemo

+0

codehausのシャットダウン後、これはリンクです:[MINSTALL-73](https://issues.apache.org/jira/browse/MINSTALL-73) – tkokasih

関連する問題