Java >> Java tutorial >  >> Tag >> package

Rette fejlen "Erklæret pakke matcher ikke den forventede pakke".

1. Oversigt

I denne artikel vil vi undersøge "Erklæret pakke matcher ikke den forventede pakke ” fejl i et java-projekt.

Vi forventer normalt at placere vores java-filer i mapper, der matcher pakkestrukturen. Den mest almindelige årsag til fejlen er, når vores IDE støder på et misforhold mellem pakkeerklæringen og den fysiske placering af java-filen.

I denne korte tutorial ser vi på et eksempel på denne fejl, hvordan den dukker op i IDE'er og Maven, og hvordan den løses. Vi vil også se på et par andre tips og tricks.

2. Eksempel på fejl

Lad os forestille os, at vi har følgende klasse i src/main/java/com/baeldung/bookstore mappe:

package com.baeldung;

public class Book {
    // fields and methods
}

Vi forventer, at dette forårsager en fejl i IDE, da pakkenavnet antyder stien src/main/java/com/baeldung .

3. Løsning af problemet

Det er normalt ret ligetil at løse dette problem.

3.1. Korrigering af pakkeerklæring

Lad os først sikre os, at pakkeerklæringen og den relative kildefilsti matcher. Hvis det allerede er tilfældet, kan vi forsøge at lukke og genåbne projektet igen. Nogle gange kan IDE være ude af synkronisering med projektet på disken og skal genimportere filerne, løse afhængigheder og genkompilere.

Ellers kan vi rette pakkedeklarationen i følgende omvendte DNS-format:

package com.baeldung.bookstore;

3.2. Korrigering af kildekodens fysiske placering

Det kan være tilfældet, at pakken er erklæret korrekt, og java-filen blev ved en fejl placeret i den forkerte mappe.

Derefter flytter vi bogen klasse ind i følgende korrekte mappeplacering:

<source-path>/com/baeldung/bookstore

4. Symptomer på problemet

Afhængigt af vores valgte IDE kan fejlmeddelelsen se anderledes ud. På samme måde kan vi se fejlen i maven.

4.1. Fejl i Eclipse

I Eclipse vil vi se en fejl som denne:

4.2. Fejl i IntelliJ

I IntelliJ får vi en lignende fejlmeddelelse:

4.3. Fejl i Maven

På samme måde får vi nedenstående fejl, mens vi kører maven build:

[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

Vi bør dog bemærke bogen klasse vil kompilere fint ved hjælp af den selvstændige javac kommando. Dette skyldes, at java-kompileren ikke kræver, at pakkedeklarationsstien og den relative kildesti matcher .

5. Fejl i afhængig kode

Vi opdager muligvis ikke problemet i selve den berørte klassefil. Det kan dukke op i en klasse med en peer-afhængighed:

Som forventet kunne ovenstående klasse ikke løse bogen  klasse  fordi bogen klasse mislykkedes i at kompilere i den forventede pakke.

6. Yderligere tips og tricks

Selvom det er en nem løsning, når filen er i den forkerte sti, kan vi stadig støde på problemer med en kildefil, der ser ud til at være på det rigtige sted i kildetræet.

6.1. Bekræft byggesti

Vi bliver nødt til at verificere, at byggestien i IDE ikke har nogen fejl. Standard kildestien er nævnt som /src/main/java og /src/test/java . Bygningsstien skal have de korrekte afhængigheder og bibliotek.

6.2. Yderligere kildesti

Nogle gange er det nødvendigt at tilføje en kildemappe for at lade maven kompilere disse klassefiler. Selvom det ikke anbefales at gøre det, da foruddefinerede kildemapper vil være tilstrækkelige det meste af tiden.

Ikke desto mindre kan vi tilføje yderligere kilder, når det er nødvendigt ved hjælp af 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. Konklusion

I denne artikel har vi lært, hvordan et misforhold mellem pakkeerklæringen og den tilsvarende mappe i java-filen forårsager fejl i IDE'er. Vi undersøgte også et par måder at løse dette på.

Som altid er den komplette kildekode til eksemplerne tilgængelig på GitHub.


No
Java tag