Mam trywialny projekt Mavena:
src
└── main
└── java
└── module-info.java
pom.xml
pom.xml:
<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>10</release>
</configuration>
</plugin>
</plugins>
</build>
Kiedy buduję projekt za pomocą mvn -X install -DskipTests=true
, kończy się niepowodzeniem:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project example: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 20 more
Caused by: java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.codehaus.plexus.languages.java.jpms.AsmModuleInfoParser.parse(AsmModuleInfoParser.java:80)
at org.codehaus.plexus.languages.java.jpms.AsmModuleInfoParser.getModuleDescriptor(AsmModuleInfoParser.java:54)
at org.codehaus.plexus.languages.java.jpms.LocationManager.resolvePaths(LocationManager.java:83)
at org.apache.maven.plugin.compiler.TestCompilerMojo.preparePaths(TestCompilerMojo.java:281)
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:762)
at org.apache.maven.plugin.compiler.TestCompilerMojo.execute(TestCompilerMojo.java:176)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
... 21 more
Czy jest sposób, aby to naprawić?
maven-compiler-plugin:3.8.0
aby naprawić powyższy błąd .Odpowiedzi:
Od 30 lipca 2018 r., Aby rozwiązać powyższy problem, można skonfigurować wersję java używaną w maven do dowolnej wersji do JDK / 11 i użyć
maven-compiler-plugin:3.8.0
do określenia wersji 9,10,11 bez żadnych wyraźnych zależności .<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <release>11</release> <!--or <release>10</release>--> </configuration> </plugin>
Uwaga : - W tej wersji domyślna wartość źródła / celu została podniesiona z 1,5 do 1,6. - informacje o wersji.
Edytuj [30.12.2018]
W rzeczywistości możesz skorzystać z tej samej wersji programu
maven-compiler-plugin
podczas kompilowania kodu z JDK / 12.Więcej szczegółów i przykładowa konfiguracja w sposobie kompilowania i wykonywania funkcji podglądu JDK za pomocą Maven .
źródło
maven.compiler.release
:<properties><maven.compiler.release>11</maven.compiler.release></properties>
AKTUALIZACJA
Odpowiedź jest już nieaktualna. Zobacz tę odpowiedź .
maven-compiler-plugin
zależy od starej wersji ASM, która jeszcze nie obsługuje Java 10 (i Java 11). Istnieje jednak możliwość jednoznacznego określenia właściwej wersji ASM:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <release>10</release> </configuration> <dependencies> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>6.2</version> <!-- Use newer version of ASM --> </dependency> </dependencies> </plugin>
Najnowsze można znaleźć na https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav
źródło
Zwiększenie wtyczki maven-compiler-plugin do 3.8.0 wydaje się być konieczne, ale niewystarczające. Jeśli nadal masz problemy, upewnij się, że zmienna środowiskowa JAVA_HOME jest ustawiona na Java 10 (lub 11), jeśli korzystasz z wiersza poleceń. (Komunikat o błędzie, który otrzymasz, nie powie Ci tego.) Lub jeśli korzystasz z IDE, musisz upewnić się, że jest ustawiony na uruchamianie maven z Twoim aktualnym JDK.
źródło
Może to nie jest dokładnie ten sam błąd, ale miałem podobny.
Sprawdź wersję Maven Java
Ponieważ Maven działa również z Javą, sprawdź najpierw, na której wersji działa Twój Maven:
mvn --version | grep -i java
Zwraca:
Niezgodna wersja
Tutaj nad moim biegiem biegnie
Java Version 1.8.0_151
. Więc nawet jeśli określę maven do kompilacji zJava 11
:<properties> <java.version>11</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> </properties>
Logicznie wydrukuje ten błąd:
Jak ustawić określoną wersję Java na Maven
Logiczną rzeczą jest ustawienie wyższej wersji Java na Maven (np. Java w wersji 11 zamiast 1.8).
Maven korzysta ze zmiennej środowiskowej,
JAVA_HOME
aby znaleźć wersję Java do uruchomienia. Więc zmień tę zmienną na JDK, dla którego chcesz kompilować (np. OpenJDK 11).Kontrola poczytalności
Następnie uruchom ponownie,
mvn --version
aby upewnić się, że konfiguracja została wykonana:mvn --version | grep -i java
plony
Co jest znacznie lepsze i poprawne w kompilacji kodu napisanego zgodnie ze specyfikacjami Java 11.
źródło
Określ wersje źródłowe i docelowe maven.compiler.source.
1) Wersja Mavena obsługująca używany jdk. W moim przypadku JDK 11 i maven 3.6.0.
2) pom.xml
<properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties>
Alternatywnie możesz w pełni określić wtyczkę kompilatora maven. Zobacz poprzednie odpowiedzi. W moim przykładzie jest krótszy :)
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <release>11</release> </configuration> </plugin> </plugins> </build>
3) przebuduj projekt, aby uniknąć błędów kompilacji w IDE.
4) Jeśli nadal nie działa. W Intellij Idea wolę używać terminala zamiast używać terminala z systemu operacyjnego. Następnie w Idea przejdź do pliku -> ustawienia -> narzędzia do budowania -> maven. Współpracuję z mavenem pobranym z apache (domyślnie Idea używa dołączonego mavena). Następnie uruchom ponownie Idea i uruchom
mvn clean install
ponownie. Upewnij się również, że masz poprawną ścieżkę , MAVEN_HOME , JAVA_HOME zmienne środowiskowe .Widziałem też ten jednoliniowiec, ale nie działa.
<maven.compiler.release>11</maven.compiler.release>
Zrobiłem kilka szybkich projektów, które wykorzystuję ponownie w innych moich projektach, zapraszam do sprawdzenia:
źródło
Jeśli używasz rozruchu sprężynowego, dodaj te tagi w pom.xml.
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
i
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> `<maven.compiler.release>`10</maven.compiler.release> </properties>
Możesz zmienić wersję java na 11 lub 13, a także w
<maven.compiler.release>
tagu.Po prostu dodaj poniższe tagi w pom.xml
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.release>11</maven.compiler.release> </properties>
Możesz zmienić 11 na 10, 13, a także zmienić wersję java. Używam najnowszej wersji Java 13. Mi to pasuje.
źródło
W porządku, więc dla mnie nic nie działało.
Używałem butów sprężynowych z hibernacją. Wersja Spring Boot to ~ 2.0.1 i po kompilacji otrzymywałbym ten błąd i wyjątek zerowego wskaźnika. Problem dotyczył hibernacji, która wymagała zmiany wersji. Ale potem miałem kilka innych problemów, które wyglądały na to, że procesor adnotacji nie został rozpoznany, więc zdecydowałem się po prostu przesunąć sprężynę z wersji 2.0.1 na 2.1.7 i wszystko działało zgodnie z oczekiwaniami.
Nadal musisz dodać powyższą wtyczkę.
Mam nadzieję, że to pomoże!
źródło