既存のエンタープライズプロジェクトにMavenサポートを追加しようとしています。これはマルチモジュールプロジェクトであり、最初の2つのモジュールは問題なくコンパイルおよびパッケージ化されますが、コンパイルエラーに直面しています。複数のモジュールで同じ依存関係を使用しようとしています。私の構造は:
> + parent
> - pom.xml
> - module-1
> - pom.xml
> - module-2 (Depends on module-1)
> - pom.xml
> - module-3
> - pom.xml (Depends on both modules 1 and 2)
私はEclipseでプロジェクトを開いていますが、エラーは表示されません。親からmvn clean install
を実行すると、モジュール1と2の両方が正常にインストールされますが、モジュール3でpackage xxx.yyy does not exist
とCannot find symbol XXXYYY
と表示されて失敗します。パッケージxxx.yyyとシンボルXXXYYYは、モジュール2と3の両方の依存関係にリストされているjar内にあります。
両方のモジュールが同じjarに依存しているので、モジュール2にのみ依存関係を追加しようとしましたが、推移的な依存関係のためにモジュール3はそれを表示するはずですが、パッケージを表示できませんでした。したがって、モジュール2と3の両方のpomsに依存関係を追加しようとしても、問題は解決しませんでした。
私はすでにこれらをチェック/試しました:
mvn dependency:copy-dependencies
私のプロジェクトの唯一の特徴は、モジュール3がモジュール2に依存し、モジュール2も依存するlibに依存していることです。
以下では、モジュール2と3の両方からpomを貼り付けています。会社の方針により、一部の名前を変更しました。
モジュール2
<project xmlns="http://maven.Apache.org/POM/4.0.0" ... >
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Module2</artifactId>
<dependencies>
<dependency>
<groupId>com.company</groupId>
<artifactId>Module1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.company</groupId>
<artifactId>SharedArtifact</artifactId>
<version>1.1</version>
</dependency>
...
モジュール3
<project xmlns="http://maven.Apache.org/POM/4.0.0" ... >
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Module3</artifactId>
<dependencies>
<dependency>
<groupId>com.company</groupId>
<artifactId>Module2</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--<dependency>
<groupId>com.company</groupId>
<artifactId>SharedArtifact</artifactId>
<version>1.1</version>
</dependency>-->
...
そして見えないパッケージは「SharedArtifact」の中にあります。 Module2から依存関係を削除すると、「SharedArtifact」パッケージからpackage does not exist
エラーが発生しません。しかし、それはModule2 jarからpackage does not exist
を提供します。
Module3は両方に依存しているため、どういうわけか依存関係が失われているようです。
Java 1.6.0_29とMaven 3.0.5を使用しています。プロジェクトがJavaを必要とするため、Java 7にアップグレードできません。また、Mavenをアップグレードできません。アップグレードされたMavenはJava 7でのみ機能します。以上。
更新1:
コンパイル時に表示されるエラーは次のとおりです。
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] \Users\usuario\Documents\workspaces\myworkspace\qa\Module3\src\com\company\sharedartifact\package\SomeClass.Java:[8,55]
package com.company.sharedartifact.package does not exist
[ERROR] \Users\usuario\Documents\workspaces\myworkspace\qa\Module3\src\com\company\sharedartifact\package\SomeClass.Java:[9,55]
package com.company.sharedartifact.package does not exist
[ERROR] \Users\usuario\Documents\workspaces\myworkspace\qa\Module3\src\com\company\sharedartifact\package\SomeClass.Java:[17,85]
cannot find symbol
symbol : class SomeOtherClass
会社のポリシーにより、-Xログ全体を貼り付けることはできませんが、一部が必要な場合は、一部の名前を変更できます。
Update 2:
今日、私はmvn clean install
を実行するとコンパイルに失敗することを理解しました。しかし、mvn clean
を実行すると、(Eclipseでは)Maven Update project
を実行してから、 `mvn installを実行すると、コンパイルされます!
私はこれを見つけたので、すでに この質問 を参照しており、クラスパスに問題があると思います。 Weblogic Portalアプリケーションを使用しているので、Eclipseにいくつかの共有ライブラリ(プロジェクトとランタイムの両方で必要なライブラリ)を保持する必要があります。おそらく、いくつかのライブラリが私のポンで忘れられています。奇妙なことは、コンパイルが存在しないと主張するパッケージが存在するということです。
オプションが足りなくなったので、@ user944849とpdated Mavenの提案に従ってバージョン3.3.9に、JDKを1.8.0_60に変更しましたが、ソースとターゲットをPOMは1.6を指しています。
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
その後、モジュール3はコンパイルを開始しましたが、一部のJRockitライブラリへの依存関係が原因でモジュール4および5が壊れました。それを修正するために、私は非推奨のコードを更新し、プロジェクトは最終的に完全にコンパイルされました。
私が使用していたMavenバージョンに問題があったと思います。どういうわけか、2つのプロジェクトが同じlibに依存し、そのうちの1つが他のライブラリに依存していると、道に迷うようです。私は他のバージョンをテストしていませんが、3.3.9はこれらのケースで正常に動作します。