[ROZWIĄZANY] Maven: Source option 5 is no longer supported. Use 6 or later.

[ROZWIĄZANY] Maven: Source option 5 is no longer supported. Use 6 or later.

Ogólnie mówiąc, przyczyną tytułowych problemów jest brak kompatybilności pomiędzy użytą wersją JDK a ustawieniem kompatybilności kodu źródłowego i wynikowego. Wspomniane problemy występuje często w parze z jak poniżej:

Compilation failure: Compilation failure: 
[ERROR] Source option 5 is no longer supported. Use 6 or later.
[ERROR] Target option 1.5 is no longer supported. Use 1.6 or later.
[ERROR] -> [Help 1]

Poniższe tabelki zawierają zestawianie wpieranych wartości source/target compatibility w zależności od wersji JDK oraz domyślne ustawienie source/target w zależności od wersji plugina maven-compiler-plugin.

JDK Versionsource compatibility versiontarget compatibility
before JDK95+6+
JDK9+1.6+1.6+
Source and target versions supportted by JDK

Default version of maven-compiler-pluginDefault version of source compatiblityDefault version of target compatiblity
before 3.8.051.5
3.8.0+61.6
Default values of source/target set by maven-compiler-plugin

Kolorem czerwonym oraz żółto-czerwonym zaznaczyłem najczęstszą przyczynę tytułowego problemu. Mam tu na myśli użycie nowej wersji JDK(np. JDK9), która nie wspiera już Javy 1.5 oraz starej wersji maven-compiler-plugin, który domyślnie ustawia source/target compatibility właśnie na Javę 5.

Skoro znamy już przyczynę problemu, to możemy przejść do omówienia rozwiązań, bo różnią się nieco w zależności od okoliczności.

Sytuacja 1: Nowy projekt z użyciem JDK 9+

To najczęstsza sytuacja, w której możemy otrzymać tytułowe błędy. Prawdopodobnie wynikać ona będzie z tego, że domyślnie stworzony projekty nie ustawia source/target compatibility, a w dodatku korzysta ze starszej wersji maven-compiler-plugin(starszej niż 3.8.0).

Rozwiązanie 1: Użyj nowszej wersji maven-compiler-plugin

Możemy wykorzystać fakt, że maven-compiler-plugin począwszy 3.8.0 ustawia domyślnie source/target na Javę 6 i po prostu jawnie wskazać nowszą wersję pluginu. W tym celu edytuj plik pom.xml dodając lub aktualizując poniższą sekcję.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bettercoding.hex</groupId>
    <artifactId>HexagonalArchitectureExample</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>CreditWorkflow</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
            </plugin>
        </plugins>
    </build>

</project>

Jeśli Twoja aplikacja nie musi być kompatybilna z tak starą wersja Javy jak 1.6, to od razu możesz ustawić tę wartość np. na 11, aby móc korzysta ze wszystkich dobrodziejstw Javy 11.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bettercoding.hex</groupId>
    <artifactId>HexagonalArchitectureExample</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>CreditWorkflow</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Sytuacja 2: Pełna kontrola nad wersją maven-compiler-plugin oraz source i target compatibility

Jeśli chcesz korzystać z konkretnej wersji maven-compiler-plugin lub po prostu chcesz mieć pełną kontrolę nad zgodnością source oraz target compatibility , możesz wykorzystać poniższe rozwiązanie.

Rozwiązanie 2. Ustaw odpowiednie właściwości maven

W takiej sytuacji możesz do pom.xml dodać poniższą sekcję, która ustawi wartość source/target compatibility na pożądaną wartość- w tym przypadku zgodność z Javą 11.

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bettercoding.hex</groupId>
    <artifactId>HexagonalArchitectureExample</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>CreditWorkflow</module>
    </modules>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

</project>
Na zakończenie mam jeszcze jedną prośbę.

Jeśli pomogłem Ci rozwiązać problem, to udostępnij proszę ten post. Dzięki temu będę miał okazję trafić do szerszej grupy odbiorców. Dziękuję

0 0 vote
Article Rating
Subscribe
Notify of
guest
0 komentarzy
Inline Feedbacks
View all comments