Zhe*_*lov 111 java maven java-10 module-info java-11
我有一个简单的Maven项目:
src
??? main
??? java
??? module-info.java
pom.xml
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
当我通过构建项目时mvn -X install -DskipTests=true
,它失败了:
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
Run Code Online (Sandbox Code Playgroud)
有没有办法来解决这个问题?
Zhe*_*lov 129
答案现在已经过时了.看到这个答案.
maven-compiler-plugin
取决于尚不支持Java 10(和Java 11)的旧版ASM.但是,可以明确指定正确的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>
Run Code Online (Sandbox Code Playgroud)
您可以在https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav找到最新信息.
Nam*_*man 129
或者,从2018年7月30日解决上述问题,可以将maven中使用的java版本配置为任何高达JDK/11的版本,并使用它maven-compiler-plugin:3.8.0
来指定9,10,11的版本,而没有任何显式依赖.
<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>
Run Code Online (Sandbox Code Playgroud)
注意: - 此版本的源/目标的默认值已从1.5提升到1.6.-发行说明.
编辑[30.12.2018]
实际上,您可以maven-compiler-plugin
在针对JDK/12编译代码的同时使用相同版本.已经分享了有关如何使用Maven编译JDK12预览功能的更多详细信息和示例配置.
Yan*_*ski 23
指定 maven.compiler.source 和目标版本。
1) Maven 版本,支持您使用的 jdk。就我而言,JDK 11 和 maven 3.6.0。
2) pom.xml
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以完全指定 maven 编译器插件。请参阅以前的答案。在我的例子中它更短:)
<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>
Run Code Online (Sandbox Code Playgroud)
3) 重建项目以避免在您的 IDE 中出现编译错误。
4)如果还是不行。在 Intellij Idea 中,我更喜欢使用终端而不是使用操作系统的终端。然后在 Idea 中转到文件 -> 设置 -> 构建工具 -> maven。我使用从 apache 下载的 maven(默认情况下,Idea 使用捆绑的 maven)。然后重新启动 Idea 并mvn clean install
再次运行。还要确保你有正确的Path、MAVEN_HOME、JAVA_HOME环境变量。
我也看到了这个单线,但它不起作用。
<maven.compiler.release>11</maven.compiler.release>
Run Code Online (Sandbox Code Playgroud)
我制作了一些快速入门项目,我在其他项目中重复使用了这些项目,请随时检查:
Mig*_*noz 21
将你的maven-compiler-plugin提升到3.8.0似乎是必要的,但还不够.如果您仍然遇到问题,那么如果从命令行运行,还应确保将JAVA_HOME环境变量设置为Java 10(或11).(您收到的错误消息不会告诉您.)或者,如果您是从IDE运行,则需要确保将其设置为使用当前的JDK运行maven.
可能不是完全相同的错误,但我有一个类似的错误。
检查Maven Java版本
由于Maven也可以使用Java运行,因此请首先检查您的Maven运行在哪个版本上:
mvn --version | grep -i java
Run Code Online (Sandbox Code Playgroud)
它返回:
Java版本1.8.0_151,供应商:Oracle Corporation,运行时:C:\ tools \ jdk \ openjdk1.8
不兼容的版本
在上面,我的行家正在使用Java Version 1.8.0_151
。因此,即使我指定要使用的maven进行编译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>
Run Code Online (Sandbox Code Playgroud)
它将在逻辑上打印出此错误:
[错误]无法在项目efa-example-commons-task上执行目标org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile(默认编译):致命错误编译:无效的目标版本:11 -> [帮助1]
如何将特定的Java版本设置为Maven
合理的做法是为Maven设置更高的Java版本(例如Java版本11代替1.8)。
Maven使用环境变量JAVA_HOME
来查找要运行的Java版本。因此,将此变量更改为要编译的JDK(例如,OpenJDK 11)。
完整性检查
然后再次运行mvn --version
以确保已完成配置:
mvn --version | grep -i java
Run Code Online (Sandbox Code Playgroud)
产量
Java版本:11.0.2,供应商:Oracle Corporation,运行时:C:\ tools \ jdk \ openjdk11
编译使用Java 11规范编写的代码会更好,更正确。
如果您使用的是 Spring Boot,请在 pom.xml 中添加这些标签。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
Run Code Online (Sandbox Code Playgroud)
和
<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>
Run Code Online (Sandbox Code Playgroud)
您也可以在<maven.compiler.release>
标签中将 java 版本更改为 11 或 13。
只需在 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>
Run Code Online (Sandbox Code Playgroud)
您也可以将 11 更改为 10、13 来更改 java 版本。我正在使用最新的 java 13。这个对我有用。
归档时间: |
|
查看次数: |
79644 次 |
最近记录: |