Javaで書かれたいくつかのオープンソースソフトウェアをダウンロードし、Eclipseを使用してコンパイルしようとしました。一部のファイルで「タイプ「クラス名」の階層に一貫性がない」というエラーが発生しました。これらのエラーの原因と修正方法を教えてください。
Javaで書かれたいくつかのオープンソースソフトウェアをダウンロードし、Eclipseを使用してコンパイルしようとしました。一部のファイルで「タイプ「クラス名」の階層に一貫性がない」というエラーが発生しました。これらのエラーの原因と修正方法を教えてください。
回答:
これは、存在しないインターフェースを実装しようとしている、または存在しないクラスを拡張しようとしていることを意味します。
Eclipseを更新してみてください。
機能しない場合は、ビルドパスにないJARへの参照がある可能性があります。プロジェクトのクラスパスを確認し、インターフェースまたはクラスを含むjarがその中にあることを確認してください。
エラーを確認してください(「マーカー」タブ)。次のエラーも発生しました。
プロジェクトの必要なライブラリのアーカイブを読み取れません...
そしてそれが修正されたとき、「矛盾したエラー」は消えました。
実際にビルドパスにjarを追加しましたが、何らかの理由でエラーで読み取れませんでした
プロジェクトの必要なライブラリのアーカイブを読み取れないか、有効なZIPファイルではありません
代わりに、「外部jar」として追加しました。それは助けとなり、コンパイルの問題はすべてなくなりました!
もう1つのケースがありました。正しいプロジェクトパスを指定し、Eclipseにインポートします。
次に、プロジェクト->クリーン->すべてのプロジェクトをクリーンに移動します。
クラスパスにあるライブラリファイルの一部のクラスが、別のjarファイルにある可能性のある存在しないクラスを参照している場合に、このエラーが表示されます。ここでは、クラスパスにあるorg.springframework.beans-3.1.2.RELEASE.jar
からクラスを追加せずに拡張したときにこのエラーが発生しました。org.springframework.jdbc.core.support.JdbcDaoSupport
org.springframework.jdbc-3.1.2.RELEASE.jar
それは間違いなく、私の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>
拡張クラスに問題がある場合、上記のエラーメッセージが表示されます。
例
class Example extends Example1 {
}
の問題を修正する Example1
私はまったく同じ問題マーカーを持っていて、オーバーライドではなく、実際には最初の実装(「スーパー」実装)であるメソッドから@Overrideアノテーションを削除することで解決しました。
私にとっては、Android APIレベルをGoogle APIの1つに変更することでした
私もこの問題を抱えていました...この例外をスローしていたクラスの階層は、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」を含めた後、すべてが正常に戻った...
Maven
> を実行するDownload Source
ことでした。