1

似ていると思われる投稿を読んだことがありますが、解決策につながる投稿はまだ見つかりません。

Windows 7 の Eclipse Juno で編集しています。

2 つのビルド エラー 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 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;
    }

}

注意すべき点:

  1. SomeClassC は別のプロジェクトで定義されています。私はそれを呼びますProjectC
  2. 上記のコードは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

私が試した回避策は、ProjectCEclipse にインポートして、それをProjectBの Java ビルド パスに追加することです。私はこれをやりたくない.

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

0

これは、コマンド ラインから Maven を実行したときに発生します。

簡単に言えば、Eclipse は、自分自身だけが の下のファイルを変更すると考えていますtarget/classes/。コマンド ラインから Maven を実行すると、同じファイルが変更され、Eclipse は非常に混乱します。

次の 2 つのオプションがあります。

  1. Project -> Clean を使用して、すべてを再度ビルドします。

  2. コマンド ラインから、ビルドに Maven とは異なる出力フォルダーを使用するように Eclipse を構成します。

于 2013-10-31T16:48:41.653 に答える