簡體   English   中英

Maven 編譯錯誤:package 不存在

[英]Maven compilation error: package does not exist

我正在嘗試將 maven 支持添加到現有企業項目中。 這是一個多模塊項目,前 2 個模塊編譯和 package 沒有問題,但我面臨編譯錯誤我嘗試在多個模塊中使用相同的依賴項。 我的結構是:

> + 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 package xxx.yyy 和符號 XXXYYY 位於模塊 2 和 3 的依賴項中列出的 jar 中。

由於兩個模塊都依賴於相同的 jar,因此我嘗試僅添加對模塊 2 的依賴項,並且我相信模塊 3 由於傳遞依賴關系而應該看到它,但它看不到 package。 所以我嘗試將依賴項添加到模塊 2 和 3 pom 中,但問題仍然存在。

我已經檢查/嘗試過這些:

  • 請求的 jar 列在我的依賴項中。 我運行了以下命令,之后我可以在依賴項列表中看到 required.jar 文件: mvn dependency:copy-dependencies
  • 正如我上面所說,我試圖通過傳遞依賴項放入我的類路徑並直接在我的 pom 上引用它,但這兩種解決方案都不起作用
  • 我試圖刪除我的整個存儲庫並再次下載所有內容,但也沒有用

我的項目的唯一特殊性是模塊 3 依賴於模塊 2,並且依賴於模塊 2 也依賴的庫。

下面我將粘貼來自模塊 2 和 3 的 pom。由於公司政策,我更改了一些名稱。

模塊二

<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>-->

    ...

而看不到的package在“SharedArtifact”里面。 當我從 Module2 中刪除依賴項時,它不會給出來自“SharedArtifact”package 的package does not exist錯誤。 但隨后它給出了package does not exist的 package。

由於 Module3 兩者都依賴於它們,因此看起來依賴關系正在以某種方式丟失。

我正在使用Java 1.6.0_29Maven 3.0.5 And I can't upgrade to Java 7, because the project needs Java 6. And can't upgrade Maven, cause upgraded Maven only works with java 7 and higher.

更新 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 日志,但如果某些部分是必要的,我可以更改一些名稱。

更新 2:

今天我剛剛發現如果運行mvn clean install ,它將無法編譯。 但是如果我運行mvn clean ,那么(在 Eclipse 中)我運行Maven Update project ,然后 `mvn install,它編譯!

自從我發現這一點以來,我已經提到了這個問題,並且我相信我的類路徑有問題。 當我使用 Weblogic Portal 應用程序時,我需要在 Eclipse 上保留一些共享庫(項目和運行時都需要的那些)。 可能在我的 pom 上忘記了一些圖書館。 奇怪的是,編譯聲稱不存在的 package 確實存在。

由於我的選項不多,我按照@ user944849的建議並將Maven 更新為版本3.3.9,將JDK 更新為1.8.0_60,但保持源和目標指向1.6的POM編譯器配置。

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>        
  <configuration>
     <source>1.6</source>
     <target>1.6</target>
  </configuration>
</plugin>

之后,模塊3開始編譯,但模塊4和5由於對某些JRockit庫的依賴而中斷。 為了解決這個問題,我最終更新了已棄用的代碼,最終完全編譯了項目。

所以我相信我使用的Maven版本存在問題。 不知何故,當2個項目依賴於同一個lib並且其中一個依賴於另一個時,它似乎迷失了。 我沒有測試過其他版本,但3.3.9適用於這些情況。

我遇到了同樣的問題,我使用全新安裝構建項目並選擇:解決工作區工件並成功構建項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM