web-dev-qa-db-ja.com

Mavenコンパイルエラー:パッケージが存在しません

既存のエンタープライズプロジェクトに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 existCannot find symbol XXXYYYと表示されて失敗します。パッケージxxx.yyyとシンボルXXXYYYは、モジュール2と3の両方の依存関係にリストされているjar内にあります。

両方のモジュールが同じjarに依存しているので、モジュール2にのみ依存関係を追加しようとしましたが、推移的な依存関係のためにモジュール3はそれを表示するはずですが、パッケージを表示できませんでした。したがって、モジュール2と3の両方のpomsに依存関係を追加しようとしても、問題は解決しませんでした。

私はすでにこれらをチェック/試しました:

  • リクエストされたjarは依存関係にリストされています。次のコマンドを実行した後、依存関係のリストに必要な.jarファイルが表示されます。mvn dependency:copy-dependencies
  • 上記で述べたように、推移的な依存関係を介してクラスパスを挿入し、それをpomで直接参照しようとしましたが、両方のソリューションが機能しません
  • リポジトリ全体を削除してすべてをもう一度ダウンロードしようとしましたが、うまくいきませんでした

私のプロジェクトの唯一の特徴は、モジュール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_29Maven 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にいくつかの共有ライブラリ(プロジェクトとランタイムの両方で必要なライブラリ)を保持する必要があります。おそらく、いくつかのライブラリが私のポンで忘れられています。奇妙なことは、コンパイルが存在しないと主張するパッケージが存在するということです。

6
cristianorbs

オプションが足りなくなったので、@ 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はこれらのケースで正常に動作します。

0
cristianorbs