2016-08-09 10 views
2

メインプロジェクトと、リポジトリに含まれていない依存関係を持つコモンズプロジェクトがある場合は、using <scope>system</scope>を含める必要があります。オプションのシステム依存関係により、「無効な推移的な依存関係が存在しない場合」が発生します。

システム依存関係は、他のプロジェクトを気にしないように、mavenプロパティ${project.basedir}、I made it <optional>true</optional>を使用して相対URLを使用して定義されているため、この依存関係を正しいパスで再定義する必要があります。

コモンズのpom.xml:メインプロジェクトのPOMで

<dependency> 
    <groupId>thirdparty-group</groupId> 
    <artifactId>artifact</artifactId> 
    <version>1.4.2</version> 
    <scope>system</scope> 
    <systemPath>${project.basedir}/lib/dependency.jar</systemPath> 
    <optional>true</optional> 
</dependency> 

<dependency> 
    <groupId>my-group</groupId> 
    <artifactId>commons</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <scope>compile</scope> 
</dependency> 

<dependency> 
    <groupId>thirdparty-group</groupId> 
    <artifactId>artifact</artifactId> 
    <version>1.4.2</version> 
    <scope>system</scope> 
    <systemPath>${project.basedir}/lib/dependency.jar</systemPath> 
</dependency> 

は明らかコモンズプロジェクトのメインの両方にdependency.jarあります。

コモンズジャーは、問題なく適切にインストールされます。しかし、メインプロジェクトで使用する場合でも、結果は次のとおりです。

[WARNING]私のグループのためのPOM:コモンズ:jarファイル:1.0-SNAPSHOTが無効、推移的依存関係(もしあれば)利用できませんです。 1-SNAPSHOT

[ERROR] thirdparty-groupのための 'dependencies.dependency.systemPath':アーティファクト:jarは絶対パスを指定する必要がありますが、$ { project.basedir} /lib/dependency.jar @

ビルドは続行されますが、推移的なランタイム依存関係は現在、彼のアプリケーション。

メインプロジェクトと関連性がないコモンズからの依存性についてmavenが迷惑を掛けているのはなぜですか(optionalなので、これは推移的依存関係に含まれているのはなぜですか)。 この問題を回避するには?

残念ながら、レポにシステム依存関係を置くことはオプションではありません。

+0

このような問題の最も簡単な解決策は、単にリポジトリマネージャをインストールし、そのような種類のアーティファクトをインストールするだけです。そしてあなたは大丈夫です...システムスコープの依存関係を定義する必要はありません... – khmarbaise

答えて

1

@PascalThivent's excellent answerで行く、私はCommonsプロジェクト内のローカルレポを定義し、その後<optional>true</optional>でをコンパイルにスコープを変更することで問題を回避働きました。

コモンズのpom.xmlで

:他の開発者は、この毎回行う必要はありませんので、私は直接VCSにこれをコミットすることができます

mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \ 
      -Dfile=./lib/dependency.jar \ 
      -DgroupId=thirdparty-group \ 
      -DartifactId=artifact \ 
      -Dversion=0.0.1 \ 
      -Dpackaging=jar \ 
      -DlocalRepositoryPath=.\lib\local-repo 

<dependencies> 
    <dependency> 
     <groupId>thirdparty-group</groupId> 
     <artifactId>artifact</artifactId> 
     <version>0.0.1</version> 
     <scope>compile</scope> 
     <optional>true</optional> 
    </dependency> 
</dependencies> 

<repositories> 
    <repository> 
     <id>local-repo</id> 
     <url>file://${basedir}/lib/local-repo</url> 
    </repository> 
</repositories> 

ライブラリをインストールするにはチェックアウト時に。

メインプロジェクトのpom.xmlでは何も変わりません。依然として独自のシステム依存関係を使用することもできますし、このアプローチを使用することもできます。どちらの方法もそこに出てくるWARファイルのために働きます...

関連する問題