Saya punya proyek Maven yang sepele:
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>
Ketika saya membangun proyek melalui mvn -X install -DskipTests=true
, gagal:
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
Apakah ada cara untuk memperbaikinya?
maven-compiler-plugin:3.8.0
untuk memperbaiki kesalahan di atas .Jawaban:
Pada 30Jul, 2018 untuk memperbaiki masalah di atas, orang dapat mengkonfigurasi versi java yang digunakan dalam maven hingga JDK / 11 dan memanfaatkan
maven-compiler-plugin:3.8.0
untuk menentukan rilis baik 9,10,11 tanpa ketergantungan eksplisit .Catatan : - Nilai default untuk sumber / target telah diangkat dari 1,5 ke 1,6 dengan versi ini. - catatan rilis.
Edit [30.12.2018]
Bahkan, Anda dapat menggunakan versi yang sama
maven-compiler-plugin
saat mengkompilasi kode terhadap JDK / 12 juga.Lebih detail dan konfigurasi sampel dalam cara Mengkompilasi dan menjalankan fitur pratinjau JDK dengan Maven .
sumber
maven.compiler.release
:<properties><maven.compiler.release>11</maven.compiler.release></properties>
MEMPERBARUI
Jawabannya sekarang sudah usang. Lihat jawaban ini .
maven-compiler-plugin
tergantung pada versi ASM lama yang belum mendukung Java 10 (dan Java 11). Namun, dimungkinkan untuk secara eksplisit menentukan versi ASM yang tepat:Anda dapat menemukan yang terbaru di https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav
sumber
Meningkatkan maven-compiler-plugin ke 3.8.0 tampaknya diperlukan tetapi tidak cukup. Jika Anda masih mengalami masalah, Anda juga harus memastikan variabel lingkungan JAVA_HOME Anda diatur ke Java 10 (atau 11) jika Anda menjalankan dari baris perintah. (Pesan kesalahan yang Anda dapatkan tidak akan memberi tahu Anda tentang hal ini.) Atau jika Anda menjalankan dari IDE, Anda perlu memastikannya diatur untuk menjalankan pakar dengan JDK Anda saat ini.
sumber
Mungkin tidak persis kesalahan yang sama, tetapi saya memiliki kesalahan serupa.
Periksa Versi Java Maven
Karena Maven juga runnig dengan Java, periksa dulu versi Maven Anda yang sedang berjalan:
Ia mengembalikan:
Versi tidak kompatibel
Di sini di atas saya berjalan pakar
Java Version 1.8.0_151
. Jadi, bahkan jika saya menentukan pakar untuk dikompilasi denganJava 11
:Secara logis akan mencetak kesalahan ini:
Cara mengatur versi java tertentu ke Maven
Hal yang logis untuk dilakukan adalah mengatur Versi Java yang lebih tinggi ke Maven (mis. Versi Java 11 sebagai gantinya 1.8).
Maven memanfaatkan variabel lingkungan
JAVA_HOME
untuk menemukan Versi Java untuk dijalankan. Jadi ubah variabel ini ke JDK yang ingin Anda kompilasi (mis. OpenJDK 11).Cek kewarasan
Kemudian jalankan lagi
mvn --version
untuk memastikan konfigurasi telah diurus:hasil panen
Yang jauh lebih baik dan benar untuk mengkompilasi kode yang ditulis dengan spesifikasi Java 11.
sumber
Tentukan versi maven.compiler.source dan target.
1) Versi Maven yang mendukung jdk yang Anda gunakan. Dalam kasus saya JDK 11 dan pakar 3.6.0.
2) pom.xml
Sebagai alternatif, Anda dapat sepenuhnya menentukan plugin compiler maven. Lihat jawaban sebelumnya. Ini lebih pendek dalam contoh saya :)
3) membangun kembali proyek untuk menghindari kompilasi kesalahan dalam IDE Anda.
4) Jika masih tidak berhasil. Dalam Intellij Idea saya lebih suka menggunakan terminal daripada menggunakan terminal dari OS. Kemudian dalam Ide pergi ke file -> pengaturan -> alat membangun -> pakar. Saya bekerja dengan pakar yang saya unduh dari apache (secara default Ide menggunakan bundel pakar). Mulai ulang Ide lalu jalankan
mvn clean install
lagi. Pastikan juga Anda memiliki variabel lingkungan Path , MAVEN_HOME , JAVA_HOME yang benar .Saya juga melihat ini satu-liner, tetapi tidak berhasil.
Saya membuat beberapa proyek starter cepat, yang saya gunakan kembali di proyek saya yang lain, silakan cek:
sumber
Jika Anda menggunakan spring boot maka tambahkan tag ini di pom.xml.
dan
Anda dapat mengubah versi java menjadi 11 atau 13 juga dalam
<maven.compiler.release>
tag.Cukup tambahkan tag di bawah ini di pom.xml
Anda dapat mengubah 11 menjadi 10, 13 juga untuk mengubah versi java. Saya menggunakan java 13 yang terbaru. Ini bekerja untuk saya.
sumber
Baiklah, bagi saya tidak ada yang berhasil.
Saya menggunakan spring boot dengan hibernate. Versi spring boot ~ 2.0.1 dan saya akan terus mendapatkan error dan null pointer exception saat dikompilasi. Masalahnya adalah dengan hibernate yang membutuhkan versi bump. Tapi setelah itu saya punya beberapa masalah lain yang sepertinya prosesor anotasi tidak dikenali jadi saya memutuskan untuk hanya menabrak pegas dari 2.0.1 ke 2.1.7-rilis dan semuanya bekerja seperti yang diharapkan.
Anda masih perlu menambahkan plugin tangguh di atas
Semoga membantu!
sumber