Basit Java 10 / Java 11 projesi Maven ile derlenemiyor


134

Önemsiz bir Maven projem var:

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>

Projeyi üzerinden oluşturduğumda mvn -X install -DskipTests=truebaşarısız oluyor:

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

Bunu düzeltmenin bir yolu var mı?


Yanıtlar:


165

30Temmuz 2018 itibariyle, yukarıdaki sorunu çözmek için, maven içinde kullanılan java sürümü herhangi bir JDK / 11'e kadar yapılandırılabilir ve herhangi bir açık bağımlılık olmaksızınmaven-compiler-plugin:3.8.0 9,10,11'in bir sürümünü belirtmek için kullanılabilir .

<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>

Not : - Bu sürümde kaynak / hedef için varsayılan değer 1.5'ten 1.6'ya yükseltilmiştir. - sürüm notları.


Düzenle [30.12.2018]

Aslında, maven-compiler-pluginJDK / 12'ye karşı kodu derlerken de aynı sürümünü kullanabilirsiniz .

Maven ile JDK önizleme özelliğinin nasıl derleneceği ve çalıştırılacağı hakkında daha fazla ayrıntı ve örnek yapılandırma .


6
Bu, yalnızca maven Java 11 ile yürütüldüğünde kutudan çıkar. Platform Java sürümünüz örneğin Java 8 ise (ve bu nedenle maven Java 8 ile yürütülüyorsa), bir araç zinciri tanımlamanız gerekir maven.apache.org/guides/mini /guide-using-toolchains.html
Franz Deschler

8
İlişkili mülk maven.compiler.release:<properties><maven.compiler.release>11</maven.compiler.release></properties>
Olivier Grégoire

@ OlivierGrégoire - Yani, bu kodu sizin verdiğiniz kodla değiştirebilir miyiz? <properties> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.source> 1.8 </maven.compiler.source> </properties>
MasterJoe

1
@ MasterJoe2 Evet, Java-11'e yükseltme yaptığınız için bunu yapabilmelisiniz.
Naman

136

GÜNCELLEME

Cevap artık eskimiştir. Bu cevaba bakın .


maven-compiler-pluginhenüz Java 10'u (ve Java 11'i) desteklemeyen ASM'nin eski sürümüne bağlıdır. Ancak, ASM'nin doğru sürümünü açıkça belirtmek mümkündür:

<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>

En son haberleri https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav adresinde bulabilirsiniz.


Kabul edilen yanıtı gönderinizin başında önerilen yanıtla değiştirmeyi düşünür müsünüz?
leopal

24

Maven-compiler-eklentinizi 3.8.0'a yükseltmek gerekli görünüyor, ancak yeterli değil. Hala sorun yaşıyorsanız, komut satırından çalıştırıyorsanız JAVA_HOME ortam değişkeninizin Java 10 (veya 11) olarak ayarlandığından emin olmalısınız. (Aldığınız hata mesajı size bunu söylemez.) Veya bir IDE'den çalıştırıyorsanız, mevcut JDK'nızla maven çalıştıracak şekilde ayarlandığından emin olmanız gerekir.


14

Tam olarak aynı hata olmayabilir, ama bende benzer bir hata vardı.

Maven Java Sürümünü Kontrol Edin

Maven, Java ile de çalıştığından, önce Maven'inizin hangi sürümde çalıştığını kontrol edin:

mvn --version | grep -i java 

Şunu döndürür:

Java sürüm 1.8.0_151, satıcı: Oracle Corporation, çalışma zamanı: C: ​​\ tools \ jdk \ openjdk1.8

Uyumsuz sürüm

Burada yukarıda benim maven ile koşuyor Java Version 1.8.0_151. Bu yüzden, derlemek için maven'i belirtsem bile Java 11:

<properties>
    <java.version>11</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

Bu hatayı mantıksal olarak yazdıracaktır:

[HATA] org.apache.maven.plugins hedefi yürütülemedi: maven-compiler-plugin: 3.8.0: efa-example-commons-task projesinde derleme (varsayılan derleme): Derleme önemli hatası: geçersiz hedef sürüm: 11 -> [Yardım 1]

Belirli java sürümünü Maven olarak ayarlama

Yapılacak mantıksal şey, daha yüksek bir Java Sürümünü Maven'e ayarlamaktır (örneğin, 1.8 yerine Java sürümü 11).

Maven JAVA_HOME, çalıştırılacak Java Sürümünü bulmak için ortam değişkenini kullanır. Bu yüzden bu değişkeni derlemek istediğiniz JDK ile değiştirin (örneğin OpenJDK 11).

Aklı kontrol

mvn --versionYapılandırmanın halledildiğinden emin olmak için tekrar çalıştırın :

mvn --version | grep -i java

verim

Java sürümü: 11.0.2, satıcı: Oracle Corporation, çalışma zamanı: C: ​​\ tools \ jdk \ openjdk11

Java 11 özellikleriyle yazılan kodu derlemek çok daha iyi ve doğrudur.


1
Bu benim için çalıştı, ayrıca maven-assembly-eklenti sürüm 3.2.0 kullanıldığında
Gérard Binkhorst

13

Maven.compiler.source ve hedef sürümleri belirtin.

1) Kullandığınız jdk'yi destekleyen Maven sürümü. Benim durumumda JDK 11 ve maven 3.6.0.

2) pom.xml

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

Alternatif olarak, maven derleyici eklentisini tam olarak belirtebilirsiniz. Önceki cevaplara bakın. Örneğimde daha kısa :)

<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) IDE'nizdeki derleme hatalarını önlemek için projeyi yeniden oluşturun.

4) Hala çalışmıyorsa. Intellij Idea'da işletim sisteminden terminal kullanmak yerine terminal kullanmayı tercih ediyorum. Sonra Fikir'de dosya -> ayarlar -> oluşturma araçları -> maven'e gidin. Apache'den indirdiğim maven ile çalışıyorum (Idea varsayılan olarak paketlenmiş maven kullanır). Idea'yı yeniden başlatın ve mvn clean installtekrar çalıştırın . Ayrıca doğru Yol , MAVEN_HOME , JAVA_HOME ortam değişkenlerine sahip olduğunuzdan emin olun .

Bu tek astarı da gördüm ama işe yaramıyor.

<maven.compiler.release>11</maven.compiler.release>

Diğer projelerimde tekrar kullandığım bazı hızlı başlangıç ​​projeleri yaptım, kontrol etmekten çekinmeyin:


2

Spring boot kullanıyorsanız, bu etiketleri pom.xml dosyasına ekleyin.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

ve

<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>

Java sürümünü <maven.compiler.release>etiketinde 11 veya 13 olarak değiştirebilirsiniz .

Pom.xml'de aşağıdaki etiketleri eklemeniz yeterlidir

<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>

Java sürümünü değiştirmek için 11'den 10'a, 13'e de değiştirebilirsiniz. En son java 13 kullanıyorum. Benim için çalışıyor.


0

Pekala, benim için hiçbir şey işe yaramadı.
Bahar çizme kullanıyordum ileKış uykusu . Yay önyükleme sürümü ~ 2.0.1 idi ve derleme sırasında bu hatayı ve boş işaretçi istisnasını almaya devam edecektim. Sorun, sürüm artışına ihtiyaç duyan hazırda bekletmeyle ilgiliydi. Ancak bundan sonra, açıklama işlemcisi tanınmamış gibi görünen başka sorunlar yaşadım, bu yüzden sadece baharı 2.0.1'den 2.1.7'ye çıkarmaya karar verdim ve her şey beklendiği gibi çalıştı.

Yine de yukarıdaki eklentiyi eklemeniz gerekiyor.
Umarım yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.