2017-04-04 1087 views
4

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

> + 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文件:mvn dependency:copy-dependencies
  • 正如我上面所說的,我嘗試通過傳遞依賴項放入我的類路徑並直接引用它POM和兩種解決方案沒有奏效
  • 我試圖刪除我的整個倉庫,並再次下載的一切,也沒有工作

我的項目的唯一特殊性在於,模塊3取決於模塊2和依賴在模塊2也依賴的庫上。

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

模塊-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 7,因爲該項目需要Java 6.並且無法升級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日誌,但如果一些部分是必要的,我可以改變一些名字。

更新2:

今天我只是想通了,如果運行mvn clean install,它無法編譯。但是如果我運行mvn clean,那麼(在Eclipse中)我運行Maven Update project,然後`mvn install,它會編譯!

由於我發現這個,我已經提到this question,我相信我的類路徑有問題。在我使用Weblogic Portal應用程序時,我需要在Eclipse上保留一些共享庫(項目和運行時需要的庫)。可能有些圖書館正在被遺忘。奇怪的是,編譯聲稱不存在的軟件包存在。

+0

您可以用'X'開關打印調試輸出(包含錯誤) – Adonis

+0

由於某些公司不允許我公開的名稱,我無法粘貼整個輸出。我正在編輯與給出的錯誤的問題。當我使用-XI運行時,請在類路徑中看到我需要的jar,Java和Maven版本是正常的,並且從編譯錯誤 – cristianorbs

+1

FWIW開始如預期的那樣,應該可以升級Java和Maven以供構建和使用舊Java運行時。您只需確保Java源代碼和目標在您的POM中配置爲1.6,您可以通過配置單個插件(Compiler,Surefire等)或使用工具鏈手動執行此操作。如果您擔心新的Java漏洞,使用動物嗅探器插件和/或maven-enforcer來破壞構建,如果使用更新的類。 – user944849

回答

0

因爲我是跑出來的選擇,我遵循的是由@ user944849建議和更新 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開始編譯,但模塊4和5打破由於對一些JRockit的庫的依賴關係。爲了解決這個問題,我最終更新了棄用的代碼並最終完全編譯了項目。

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

相關問題