2013-10-31 78 views
0

我看過的文章看起來很相似,但我還沒有找到任何可以解決問題的文章。Maven Eclipse Java錯誤類型的層次結構...不一致

我編輯在Eclipse朱諾在Windows 7

我已經運行在包含構建錯誤的項目目錄中的命令行maven clean install war:inplace注意:Maven成功構建ProjectB

我很確定這兩個錯誤消息是直接相關的。

錯誤

  1. The hierarchy of the type SomeClassB is inconsistent錯誤的SomeClassB
  2. The type javax.servlet.Servlet cannot be resolved. It is indirectly referenced from required .class filesSomeClassC

的兩個錯誤在類聲明行下面的代碼出現在進口後:

import foo.bar.one.a.base.SomeClassA; 
import foo.bar.two.b.property.PropertyX; 

public abstract class SomeClassB extends SomeClassC{ 

    public SomeClassB() { 
     super(); 
    } 

    @Override 
    protected PropertyX getPropertyX() { 
     return SomeClassA.getPropertyX(this.getPropName()); 
    } 

    @Override 
    protected String getPropName() { 
     return SomeClassA.PROPERTY_NAME; 
    } 

} 

需要注意以下幾點:

  1. SomeClassC在另一個項目中定義。我會稱之爲ProjectC
  2. 上面的代碼是從ProjectBProjectB的pom.xml文件包含對ProjectC的引用。請參見下面的代碼:

的pom.xml

編輯:所有的依賴也會添加

<dependencies> 
    <dependency> 
     <groupId>com.ibm.ws</groupId> 
     <artifactId>j2ee</artifactId> 
     <version>7.0.0.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.ibm.wps</groupId> 
     <artifactId>com.ibm.ws.portletcontainer</artifactId> 
     <version>6.1.0.2</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.ibm.icu</groupId> 
     <artifactId>icu4j</artifactId> 
     <version>3.4.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.ibm.jsf</groupId> 
     <artifactId>jsf</artifactId> 
     <version>3.0.7</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.ibm.jsf</groupId> 
     <artifactId>jsf-impl-messages</artifactId> 
     <version>7.0.0.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.ibm.jsf</groupId> 
     <artifactId>jsf-portletbridge</artifactId> 
     <version>3.1.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.ibm.jsf</groupId> 
     <artifactId>jsf-ibm</artifactId> 
     <version>3.0.11</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
    </dependency> 
    <dependency> 
     <groupId>foo.bar.one.c</groupId> 
     <artifactId>foo1</artifactId> 
     <version>1.2.3</version> 
     <scope>provided</scope> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>foo.bar.one.c</groupId> 
     <artifactId>foo2</artifactId> 
     <version>${foovar2.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>foo.bar.one.c</groupId> 
     <artifactId>PropertyX</artifactId> 
     <version>${property.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>foo.bar.one.c</groupId> 
     <artifactId>ProjectC</artifactId> 
     <version>${varname.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>foo.bar.one.c</groupId> 
     <artifactId>foo3</artifactId> 
     <version>${foovar3.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>foo.bar.one.c</groupId> 
     <artifactId>foo4</artifactId> 
     <version>${foovar4.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 
    <properties> 
     ... 
     <varname.version>5.2.85373</varname.version> 
     ... 
    </properties> 

我已經確保ProjectC和類確實在我的文件系統存在,並且路徑是ProjectB的.classpath文件中的一個條目。

我嘗試過的解決方法是將ProjectC導入到eclipse中,並將其添加到ProjectB的Java構建路徑。我不想這麼做,因爲這是我團隊中不鼓勵的做法。

我該如何解決這個問題?

+0

向我們顯示您的pom.xml – Kalher

+0

我包括(我認爲是)的相關部分...您是否需要更多? – Josh

+0

你的pom中有servlet-api依賴嗎? – Kalher

回答

0

,當你在命令行運行Maven會出現這種情況。簡而言之,Eclipse認爲只有它自己才能更改target/classes/下的文件。如果你從命令行運行Maven,它會改變相同的文件,Eclipse會非常困惑。

你有兩個選擇:

  1. 使用項目 - >清除重新建立的一切。

  2. Configure Eclipse to use a different output folder用於從命令行構建比Maven。

+0

感謝您的意見。但是:1.我已清理(無數次)2.更改輸出文件夾的後果是什麼? – Josh

0

提供這種依賴性

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.5</version> 
    <scope>provided</scope> 
</dependency> 
+0

這沒有奏效。 – Josh

+0

這是一個問題的答案,它本身就是您提供的信息的猜測,所以當然這個問題是另一回事。 – Kalher

相關問題