2016-12-12 4 views
0

コンパイラがJREのものではなく依存するライブラリからクラスを取得しているため、コンパイルエラーが発生します。 クラスは両方のライブラリで定義されていますが、優先順位を確立する方法はわかりません。EclipseでMavenプロジェクトをコンパイルするときに、JREと依存関係の間で順序を変更します

私はEclipseで行うことができます:プロパティ - > Javaビルドパス - >オーダーとエクスポートを順番に並べ替えます。しかし、MavenのEclipseプラグインがプロジェクトを再度ビルドすると、この注文は失われます。

干渉のサブ依存関係を除外すると、問題は解決しますが、将来は実行エラーが発生しないかどうかはわかりません。

JREと依存関係間の順序を修正する方法はありますか(Maven Iを推測してください)?

EDIT クラスjavax.xml.XMLConstantsは、両方のJDKのライブラリにし、(私は必要jasperreportsの依存性である)stax-apiライブラリで定義されています。 Eclipseのコンパイラは、stax-apiで宣言されたものの、実際にはJDKに存在するものの、javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URIが存在しないことを確認しています。 コンパイラが最初にJDKでそのクラスを探すことを望みます。

+0

ノートを参照してください。 。 –

+0

これは解決策の問題ではないかもしれませんが、ライブラリを更新します。 –

+0

はい。使用しているJavaバージョンではライブラリが古すぎます。 "java。"名前空間はJVM自体のために予約されています。 –

答えて

0

mavenでは、ユーザ<exclusion>というタグを使用して特定の推移的依存関係を除外できます。このように:

<dependency> 
    <groupId>sample.ProjectB</groupId> 
    <artifactId>Project-B</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <exclusions> 
     <exclusion> 
      <groupId>sample.ProjectD</groupId> <!-- Exclude Project-D from Project-B --> 
      <artifactId>Project-D</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

コンパイラは右のクラスのように見えても、あなたはまだあなたの実行時クラスパスが正しいことを確認する必要がありますか、それはXMLConstantsのコピーを必要とするときJasperReportsのが壊れることhttps://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

+0

私が言ったように、私はこの可能性を知っていますが、私はそれを正しく考えていません(私は依存関係が完全に無視できるとは確信していません)。 –

+0

Shade Plugin(https://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html)で1つのクラスだけを除外することはおそらく可能ですが、私の観点からは良い方法ではありません。 私の経験から、あなたの問題は、異なるバージョンの 'CLASSPATH'に1つの依存関係があることです。それは正しいのです( 'mvn dependency:tree'で確認できます)? – dmitrievanthony

+0

私はそれを明確にするために質問を編集しました。 –

関連する問題