似ていると思われる投稿を読んだことがありますが、解決策につながる投稿はまだ見つかりません。
Windows 7 の Eclipse Juno で編集しています。
2 つのビルド エラー 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
以下のコードでは、インポート後のクラス宣言行に 2 つのエラーが表示されます。
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
. do の pom.xml ファイルには、 への参照が含まれてProjectB
い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>
クラスが実際にファイルシステムに存在し、そのパスが.classpathProjectC
ファイルのエントリであることを確認しましたProjectB
。
私が試した回避策は、ProjectC
Eclipse にインポートして、それをProjectB
の Java ビルド パスに追加することです。私はこれをやりたくない.
この問題を解決するにはどうすればよいですか?