2017-02-08 41 views
2

我將一些現有的項目從ant更改爲maven項目。 目前爲止這麼好。Maven:類型無法解析。它是從所需的.class文件間接引用的。

所有項目都具有相同的groupId。 Theres是一個名爲「ServerBase」和artifactId「server-base」的項目。 在這個項目那裏有一個抽象類「BaseService」,它通過定義了一個記錄:

import org.jboss.logging.Logger; 
[...] 
protected Logger log = Logger.getLogger(this.getClass()); 

那裏有另一個項目名稱爲「服務器」和artifactId的「服務器」。 在這個項目中,有一個類ConfigurationDAOImpl擴展了上面的BaseService-Class。 在ConfigurationDAOImpl中,記錄器日誌用於創建一些輸出。

在「服務器」的我已經聲明POM文件:

<dependency> 
     <groupId>com.tcom.amadeus</groupId> 
     <artifactId>server-base</artifactId> 
     <version>${project.version}</version> 
    </dependency> 

在構建路徑依賴性顯示下MavenDependencies很不錯。我之前從構建路徑中刪除了舊版本/自然版/螞蟻依賴版。 如果我刪除它,我獲得關於曠課等 很多錯誤,但儘管我確實有這種依賴我正在Eclipse中的跟隨着錯誤(標籤下的標記):

The type org.apache.commons.logging.Log cannot be resolved. It is indirectly referenced from required .class files 

Resource: ConfigurationDAPImpl.java 

Path: /Server/src/main/... 

Location: Line 24 

Type: Java Problem 

我試圖消除依賴並再次添加它,但沒有任何運氣。 這兩個項目都參考JAVA 1.8。 這兩個項目都是使用目標構建的,可以多次清理軟件包。 這兩個項目都已由Righclick更新或按F5。我正在使用Eclipse版本:Neon.1a版本(4.6.1) 我正在使用apache-maven-3.3.9 我正在使用m2e插件。

任何進一步的幫助將不勝感激。 在此先感謝。

+0

爭取在命令行:MVN清潔套裝...... – khmarbaise

+0

沒有幫助,但是當我明確地添加服務器的pom文件內這種相關性: org.jboss.logging 的jboss-記錄 錯誤消失。但我並不真的想這樣做,因爲這種依賴性仍然在基於服務器的'pom文件中定義,並且我添加了從服務器到服務器的依賴關係,因此我希望以傳遞方式從服務器基礎獲取所有依賴關係。我錯了嗎? – Kaspatoo

+0

好吧我想我得到它 我在服務器基地pom文件內說的依賴性已得到範圍:提供,當它擦除(這將導致使用默認值)或將其更改爲'編譯'(我認爲是默認),錯誤也消失。 我現在要研究範圍編譯是否可以查看部署(我可能不希望部署jar也是因爲目標應用程序服務器仍然有自己的jar包)。 感謝所有。 – Kaspatoo

回答

1

有兩種方式來 '解決' 這個:

1) 明確添加所需的相關服務器項目中POM-文件:

<dependency> 
    <groupId>org.jboss.logging</groupId> 
    <artifactId>jboss-logging</artifactId> 
</dependency> 

2) 改變的的SCOP所需的從屬服務器基礎項目pom文件從現在'提供'到'編譯'或刪除範圍標籤的所有默認範圍被maven使用(我猜是'編譯')

舊:

<dependency> 
    <groupId>org.jboss.logging</groupId> 
    <artifactId>jboss-logging</artifactId> 
    <scope>provided</scope> 
</dependency> 

新:

<dependency> 
    <groupId>org.jboss.logging</groupId> 
    <artifactId>jboss-logging</artifactId> 
    <scope></scope> 
</dependency> 

或:

<dependency> 
    <groupId>org.jboss.logging</groupId> 
    <artifactId>jboss-logging</artifactId> 
</dependency> 

一些背景來此從文檔:

http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies

提供這很像編譯,但表示您期望JDK或容器在運行時提供依賴關係。例如, 爲Java Enterprise Edition構建Web應用程序時,您將 將Servlet API和相關Java EE API 的依賴性設置爲提供的範圍,因爲Web容器提供了這些類。 此範圍僅在編譯和測試類路徑 上可用,且不可傳遞。

謝謝大家。

0

它看起來像apache日誌記錄庫不是從你的server-base項目傳遞帶來的。檢查在項目server下MavenDependencies你看到commons-logging(Apache日誌記錄)jar。如果沒有,那麼在server-base項目中添加這個作爲你的maven依賴項。

server-base依賴的所有罐子重複上述操作。

+0

我可以在服務器行家依賴看到: 的jboss-測井3.3.0.Final-紅帽-1.jar 共享記錄-1.2.jar 如上此Logger - 對象表示爲具有問題的唯一一個。 如果它不在那裏,我認爲服務器項目也應該在類「BaseService」中顯示一個錯誤。 – Kaspatoo

+0

我以爲你的服務器基地是一個基於螞蟻的項目將在maven依賴中使用範圍系統。 – GauravJ

+0

所有項目都是用maven構建的 – Kaspatoo

相關問題