我試圖將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 exist
和Cannot 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_29和Maven 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上保留一些共享庫(項目和運行時需要的庫)。可能有些圖書館正在被遺忘。奇怪的是,編譯聲稱不存在的軟件包存在。
您可以用'X'開關打印調試輸出(包含錯誤) – Adonis
由於某些公司不允許我公開的名稱,我無法粘貼整個輸出。我正在編輯與給出的錯誤的問題。當我使用-XI運行時,請在類路徑中看到我需要的jar,Java和Maven版本是正常的,並且從編譯錯誤 – cristianorbs
FWIW開始如預期的那樣,應該可以升級Java和Maven以供構建和使用舊Java運行時。您只需確保Java源代碼和目標在您的POM中配置爲1.6,您可以通過配置單個插件(Compiler,Surefire等)或使用工具鏈手動執行此操作。如果您擔心新的Java漏洞,使用動物嗅探器插件和/或maven-enforcer來破壞構建,如果使用更新的類。 – user944849