Eclipseコンパイルエラー:タイプ「クラス名」の階層に一貫性がありません


139

Javaで書かれたいくつかのオープンソースソフトウェアをダウンロードし、Eclipseを使用してコンパイルしようとしました。一部のファイルで「タイプ「クラス名の階層に一貫性がない」というエラーが発生しました。これらのエラーの原因と修正方法を教えてください。

回答:


161

これは、存在しないインターフェースを実装しようとしている、または存在しないクラスを拡張しようとしていることを意味します。

Eclipseを更新してみてください。

機能しない場合は、ビルドパスにないJARへの参照がある可能性があります。プロジェクトのクラスパスを確認し、インターフェースまたはクラスを含むjarがその中にあることを確認してください。


2
同様の無駄に沿って、Spring Tool Suiteでこのエラーを引き起こしていたMaven依存関係がありました。解決策は、問題の依存関係に対してMaven> を実行するDownload Sourceことでした。
MrLore 2013

@lagrantmereへの称賛
Shailesh Pratapwar

2
また、親がコンパイルされていることを確認してください。私の場合、スーパークラスが存在することはわかっていましたが、実際には正しくコンパイルされていませんでした。
ジョセフRajeev Motha 14年

2
欠けている(Eclipseから名前が変更された)インターフェースを実装している抽象クラスを拡張するクラスがありました
Aquarius Power

4
私の場合、クラスパス(jar)でWASだったクラスを拡張していましたが、クラスパスにない別のjarにある3番目のクラスを拡張しました。
JustinKSU、2015

15

あなたが必要とするjarを追加したときに、ITが必要とするjarが含まれていないことが時々起こります。私の場合、tomcat / libにすべてのjarを追加すると、この問題を解決するのに役立ちました。私はウェブアプリに取り組んでいます。


ありがとう、これは私の問題でした。GWTライブラリを含めましたが、JavaサーブレットAPI jar(この場合、Jettyのservlet-api-3.1.jar)がありませんでした。
ジェイミー

13

エラーを確認してください(「マーカー」タブ)。次のエラーも発生しました。

プロジェクトの必要なライブラリのアーカイブを読み取れません...

そしてそれが修正されたとき、「矛盾したエラー」は消えました。

実際にビルドパスにjarを追加しましたが、何らかの理由でエラーで読み取れませんでした

プロジェクトの必要なライブラリのアーカイブを読み取れないか、有効なZIPファイルではありません

代わりに、「外部jar」として追加しました。それは助けとなり、コンパイルの問題はすべてなくなりました!


5

JDKを新しいバージョンにアップグレードした後、この問題が発生しました。プロジェクトプロパティ/ Javaビルドパスでライブラリへの参照を更新する必要がありました。




2

クラスパスにあるライブラリファイルの一部のクラスが、別のjarファイルにある可能性のある存在しないクラスを参照している場合に、このエラーが表示されます。ここでは、クラスパスにあるorg.springframework.beans-3.1.2.RELEASE.jarからクラスを追加せずに拡張したときにこのエラーが発生しました。org.springframework.jdbc.core.support.JdbcDaoSupportorg.springframework.jdbc-3.1.2.RELEASE.jar


2

問題は、不正なjarが含まれていることです。同じ問題があり、その理由は、プロジェクトのビルドパスに誤ったデフォルトのJREライブラリを含めていたためです。別のバージョンのJavaをインストールし、別のバージョンのJavaのJREファイルを含めました。(私はシステムにJRE 1.6をインストールしていて、以前にJavaがインストールされていたため、JREライブラリ1.7をビルドパスに含めていました)ビルドパスに含めたJREライブラリが正しいバージョンかどうかを確認できます。システムにインストールしたJavaバージョン。


2

私はEclipse Junoでこの問題を経験しましたが、根本的な原因は、いくつかのSpring jarが一時的なmaven依存関係に含まれていても、それらが誤ったバージョンに含まれていたことです。

したがって、モジュール化されたフレームワークをスプリングとして使用して、すべてのモジュール(または少なくとも最も重要なもの:コア、Bean、コンテキスト、aop、txなど)が同じバージョンであることを確認する必要があります。

この問題を解決するために、Mavenの依存関係の除外を使用して、一時的な依存関係の誤ったバージョンを回避しました。


2

エラー:タイプ「クラス名」の階層に一貫性のないエラーがあります。

ソリューション:クラスOtherDepJar {}->は「other.dep.jar」内にあり ます。

DepJarクラスは、OtherDepJarを拡張し ます {}-> "dep.jar"内にありますます。

クラスProblematicClassはDepJarを拡張します{}->現在のプロジェクト内にあります。

dep.jarがプロジェクトのクラスパスにあるが、other.dep.jarがプロジェクトのクラスパスにない場合、Eclipseは「タイプの階層は一貫性のないエラーです」と表示します。


1

私にとって、この問題は間違ったインポートが原因でした。実際、v7サポートライブラリを追加した後、インポートを更新する必要があります。

プロジェクトのクラスごとに、次のようにして修正できます

  1. すべての行を削除 import android.[*]各クラス、で
  2. インポートを再編成します。コンテキストメニューから[ ソース/インポートを整理 ]を選択します。または(CTRL + SHIFT + O)を
  3. プロンプトが表示されたら、ライブラリを選択しますandroid.support.[*](ではありませんandroid.[*])。

1

それは間違いなく、私のmaven pom.xmlになかった依存関係がないためです。

たとえば、私は広葉樹eコマースデモサイトを実装するための統合テストを作成したいと考えていました。

構成ファイルと基本テストクラスを再利用するために、広葉樹コマースの統合テストに広葉樹jarを含めました。そのプロジェクトには、含まれていない他のテスト依存関係があり、「一貫性のない階層」エラーを受け取りました。

Broadleaf / pom.xmlの「テスト依存関係」と、broadleaf / pom.xmlの各依存関係のバージョンを提供する関連プロパティ変数をコピーした後、エラーは解消しました。

プロパティは次のとおりです。

    <geb.version>0.9.3</geb.version>
    <spock.version>0.7-groovy-2.0</spock.version>
    <selenium.version>2.42.2</selenium.version>
    <groovy.version>2.1.8</groovy.version>

依存関係は:

<dependency>
            <groupId>org.broadleafcommerce</groupId>
            <artifactId>integration</artifactId>
            <type>jar</type>
            <classifier>tests</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.broadleafcommerce</groupId>
            <artifactId>broadleaf-framework</artifactId>
            <version>${blc.version}</version><!--$NO-MVN-MAN-VER$ -->
            <classifier>tests</classifier>
        </dependency>
        <dependency>
            <groupId>com.icegreen</groupId>
            <artifactId>greenmail</artifactId>
            <version>1.3</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>2.5.1</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymockclassextension</artifactId>
            <version>2.4</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>5.9</version>
            <type>jar</type>
            <classifier>jdk15</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.gebish</groupId>
            <artifactId>geb-core</artifactId>
            <version>${geb.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.gebish</groupId>
            <artifactId>geb-spock</artifactId>
            <version>${geb.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>${spock.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-support</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-firefox-driver</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
  <!-- Logging -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hsqldb</groupId>
                <artifactId>hsqldb</artifactId>
                <version>2.3.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>

1

拡張クラスに問題がある場合、上記のエラーメッセージが表示されます。

class Example extends Example1 {

}

の問題を修正する Example1


1

私はまったく同じ問題マーカーを持っていて、オーバーライドではなく、実際には最初の実装(「スーパー」実装)であるメソッドから@Overrideアノテーションを削除することで解決しました。


1

私の場合、多くのクラスのインポート参照に余分な単語が含まれていました。すべてのファイルを編集して適切にインポートすることで解決しました。手動で編集を始めました。しかし、パターンを見たとき、eclipseのfind..replaceを使って自動化しました。これでエラーが解決しました。



0

私もこの問題を抱えていました...この例外をスローしていたクラスの階層は、Eclipseによってルートクラスまでさかのぼって追跡できないことがわかりました...私は説明します:

私の場合、私は3つのJavaプロジェクトを持っています:A、B、C ...ここで、AとBはMavenプロジェクトであり、Cは通常のJava Eclipseプロジェクトです...

プロジェクトAには、インターフェース「interfaceA」があります。プロジェクトBには、「interfaceA」を拡張するインターフェース「interfaceB」があります。プロジェクトCには、「interfaceB」を実装する具象クラス「classC」があります。

「プロジェクトC」のビルドパスには「プロジェクトB」が含まれていましたが、「プロジェクトA」は含まれていませんでした(それがエラーの原因でした)...「C」のビルドパスに「プロジェクトA」を含めた後、すべてが正常に戻った...


0

OSGiを使用するプロジェクトでLabelProviderを拡張するクラスがありましたが、そこでエラーが発生しました。解決策は、org.eclipse.jface.viewersのような単一のパッケージをインポートする代わりに、manifest.mfの必要なプラグインにorg.eclipse.jfaceを追加することでした。


0

Eclipseプロジェクトのみをインポートする場合1.プロジェクトのプロパティの下のJavaビルドパス設定に移動します。2. JREシステムライブラリにエラー記号が付いている場合は、ダブルクリックしてライブラリの編集ウィンドウを開きます。3.実行環境をシステムの正しいJavaバージョンに変更するか、ラジオボタンの割り当てをチェックして他の設定を編集します。彼らへ。4.完了をクリックします


0

「Google Plugin for Eclipse」をインストールせずにGWTプロジェクトをEclipseにインポートすると、これが発生します。「Google Plugin for Eclipse」をインストールすると、このエラーは消えます。


0

プロジェクトフォルダを右クリックし、[Javaビルドパス]を選択します。「Java Build Path」の下にライブラリが表示されているはずです。Eclipseは、これらのライブラリのいずれかでエラーを表示します。これらの問題を修正すると、問題の解決に役立ちます。


0

私のクラスが新しいインターフェイスを拡張したブランチからgitマージを行った後、このエラーが発生しました。パッケージエクスプローラーでファイルツリーを更新(F5)するだけで十分でした。Eclipseのフレームで。

Eclipseがすべてを適切に更新しなかったため、クラスがまだ存在しないインターフェースを拡張していたようです。更新後、すべてのエラーが消えました。


0

IBMから入手したEclipse OxygenからIBM JDK 8を使用してEclipse PhotonとOracle JDK 8に切り替える必要がありました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.