1. 概要

この記事では、javaプロジェクトで「宣言されたパッケージが予期されたパッケージと一致しません」というエラーを調査します。

通常、Javaファイルはパッケージ構造と一致するフォルダーに配置することを想定しています。 エラーの最も一般的な原因は、IDEでパッケージ宣言とJavaファイルの物理的な場所の不一致が発生した場合です。

この短いチュートリアルでは、このエラーの例、IDEとMavenでのエラーの表示方法、およびエラーの解決方法について説明します。 また、他のいくつかのヒントとコツについても見ていきます。

2. エラーの例

src / main / java / com / baeldung /bookstoreディレクトリに次のクラスがあると想像してください。

package com.baeldung;

public class Book {
    // fields and methods
}

パッケージ名はパスsrc/ main / java / com / baeldung を意味するため、これによりIDEでエラーが発生することが予想されます。

3. 問題の解決

通常、この問題を解決するのはかなり簡単です。

3.1. パッケージ宣言の修正

まず、パッケージ宣言と相対ソースファイルパスが一致していることを確認しましょう。 すでにそうなっている場合は、プロジェクトを閉じて再度開くことを試みることができます。 IDEがディスク上のプロジェクトと同期しておらず、ファイルを再インポートし、依存関係を解決して、正常に再コンパイルする必要がある場合があります。

それ以外の場合は、次の逆引きDNS形式でパッケージ宣言を修正できます。

package com.baeldung.bookstore;

3.2. ソースコードの物理的な場所を修正する

パッケージが正しく宣言されていて、Javaファイルが誤って間違ったディレクトリに配置された可能性があります。

次に、Bookクラスを次の正しいディレクトリの場所に移動します。

<source-path>/com/baeldung/bookstore

4. 問題の症状

選択したIDEによっては、エラーメッセージの表示が異なる場合があります。 同様に、Mavenでエラーが発生する場合があります。

4.1. Eclipseでのエラー

Eclipseでは、次のようなエラーが表示されます。

 

4.2. IntelliJのエラー

IntelliJ でも、同様のエラーメッセージが表示されます。

4.3. Mavenのエラー

同様に、 Mavenビルドの実行中に、以下のエラーが発生します。

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /Users/saichakr2/baeldung-projects/tutorials/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/Book.java:[3,8] duplicate class: com.baeldung.Book
[ERROR] /Users/saichakr2/baeldung-projects/tutorials/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/LibraryAdmin.java:[7,12] cannot access com.baeldung.bookstore.Book
  bad source file: /Users/saichakr2/baeldung-projects/tutorials/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/Book.java
    file does not contain class com.baeldung.bookstore.Book
    Please remove or make sure it appears in the correct subdirectory of the sourcepath

ただし、 Book クラスは、スタンドアロンのjavacコマンドを使用して正常にコンパイルされることに注意してください。 これは、javaコンパイラがと一致するパッケージ宣言パスと相対ソースパスを必要としないためです。

5. 依存コードのエラー

影響を受けるクラスファイル自体に問題が見つからない場合があります。 ピア依存関係のあるクラスに表示される場合があります。

予想通り、上記のクラスは解決できませんでした 本 クラス なぜなら  クラスは期待されるパッケージでコンパイルできませんでした。

6. 追加のヒントとコツ

ファイルが間違ったパスにある場合は簡単に修正できますが、ソースツリーの正しい場所にあるように見えるソースファイルで問題が発生する可能性があります。

6.1. ビルドパスを確認する

IDEのビルドパスにエラーがないことを確認する必要があります。 デフォルトのソースパスは次のように記載されています / src / main / java / src / test / java 。 ビルドパスには、正しい依存関係とライブラリが必要です。

6.2. 追加のソースパス

場合によっては、mavenがそれらのクラスファイルをコンパイルできるように、ソースフォルダーを追加する必要があります。 ただし、ほとんどの場合、事前定義されたソースフォルダで十分なので、そうすることはお勧めしません。

それでも、 build-helper-maven-plugin:を使用して、必要に応じて追加のソースを追加できます。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>src/main/<another-src></source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

7. 結論

この記事では、パッケージ宣言とjavaファイルの対応するディレクトリとの不一致がIDEでエラーを引き起こす方法を学びました。 また、これを解決するためのいくつかの方法を検討しました。

いつものように、例の完全なソースコードは、GitHubから入手できます。