我看過的文章看起來很相似,但我還沒有找到任何可以解決問題的文章。Maven Eclipse Java錯誤類型的層次結構...不一致
我編輯在Eclipse朱諾在Windows 7
我已經運行在包含構建錯誤的項目目錄中的命令行maven clean install war:inplace
。 注意:Maven成功構建ProjectB
。
我很確定這兩個錯誤消息是直接相關的。
錯誤
The hierarchy of the type SomeClassB is inconsistent
錯誤的SomeClassB
和The type javax.servlet.Servlet cannot be resolved. It is indirectly referenced from required .class files
上SomeClassC
的兩個錯誤在類聲明行下面的代碼出現在進口後:
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;
}
}
需要注意以下幾點:
- SomeClassC在另一個項目中定義。我會稱之爲
ProjectC
- 上面的代碼是從
ProjectB
。ProjectB
的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構建路徑。我不想這麼做,因爲這是我團隊中不鼓勵的做法。
我該如何解決這個問題?
向我們顯示您的pom.xml – Kalher
我包括(我認爲是)的相關部分...您是否需要更多? – Josh
你的pom中有servlet-api依賴嗎? – Kalher