Maven编译Fatal error compiling:无效的目标发行版:11问题及解决

 更新时间:2024年12月27日 09:56:29   作者:困知勉行1985  
在Java11中编译Springboot工程时遇到问题,解决方法是在pom.xml文件中指定Maven的Java编译器版本,可以使用MavenJava编译器属性或插件,在Java9及以后的版本中,也要使用插件并设置release属性

Maven编译Fatal error compiling:无效的目标发行版:11

安装了Java11后,用其编译多个Springboot工程,老是失败,后来发现所有工程指定了java版本为java8,于是乎卸载了java11,安装了java8,再去编译。

其中某个工程在之前用java11编译的时候没有任何问题, 但是换成java8后出现了以下错误:

具体信息:

F:\Digital marketing\workspace-scrm\workspace-scrm\wit-gateway-app>mvn clean install package -Dmaven.test.skip=true
[INFO] Scanning for projects...
Downloading from nexus: http://......:8051/repository/maven-public/net/trueland/tcloud/scrm/common-dependencies/3.1-SNAPSHOT/maven-metadata.xml
Downloaded from nexus: http://......:8051/repository/maven-public/net/trueland/tcloud/scrm/common-dependencies/3.1-SNAPSHOT/maven-metadata.xml (621 B at 3.8 kB/s)
[INFO]
[INFO] --------------< net.trueland.tcloud.scrm:tcloud-gateway >---------------
[INFO] Building tcloud-gateway 3.1.0
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from nexus: http://......:8051/repository/maven-public/net/trueland/commons/1.1-SNAPSHOT/maven-metadata.xml
Downloaded from nexus: http://......:8051/repository/maven-public/net/trueland/commons/1.1-SNAPSHOT/maven-metadata.xml (983 B at 16 kB/s)
Downloading from nexus: http://......:8051/repository/maven-public/net/trueland/tcloud/scrm/common-base/3.1-SNAPSHOT/maven-metadata.xml
Downloaded from nexus: http://......:8051/repository/maven-public/net/trueland/tcloud/scrm/common-base/3.1-SNAPSHOT/maven-metadata.xml (996 B at 15 kB/s)
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ tcloud-gateway ---
[INFO] Deleting F:\Digital marketing\wit-gateway-app\target
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ tcloud-gateway ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 0 resource
[INFO] Copying 6 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ tcloud-gateway ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 14 source files to F:\Digital marketing\workspace-scrm\wit-gateway-app\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.305 s
[INFO] Finished at: 2022-01-12T08:43:21+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project tcloud-gateway: Fatal error compiling: 无效的目标发行版: 11 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

从网上查了查资料,需要指定Maven的java编译器版本:

1.在Java 8和更早版本中指定Maven的Java编译器

在Java 8 和更早版本开始,可以通过两种方式在Maven POM文件中设置Java编译器版本:

  • 通过Maven Java编译器属性。
  • 通过Maven Java编译器插件。

下面将具体说明这两种在Maven中设置Java编译器版本的方法。

Maven Java编译器属性

最简单的方法是通过Maven Java编译器属性。

在我们工程的pom.xml文件中进行设置,这些属性必须包含在POM文件的properties元素中。

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

下面是一个具体的例子:

<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.bruce</groupId>
    <artifactId>wit-example</artifactId>
    <version>0.1.0</version>
    <packaging>jar</packaging>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

Maven Java编译器插件

第二种方式是通过插件:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.6.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>

下面是一个具体的例子:

<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.bruce</groupId>
    <artifactId>wit-example</artifactId>
    <version>0.1.0</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.在Java 9及以后的版本中指定Maven的Java编译器

在Java 9和更高版本中,也要使用插件,但是要用release属性来代替source和target属性。

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

Note:Maven Java编译器插件的版本已从3.6.1更改为3.8.0

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 教你一步到位部署运行MyBatis3源码(保姆级)

    教你一步到位部署运行MyBatis3源码(保姆级)

    一个框架的运行流程从最简单的一个helloworld来看其源码就能了解到框架的原理是什么,这篇文章主要给大家介绍了关于如何一步到位部署运行MyBatis3源码的相关资料,需要的朋友可以参考下
    2022-06-06
  • Java线程通信中关于生产者与消费者案例分析

    Java线程通信中关于生产者与消费者案例分析

    这篇文章主要介绍了Java线程通信中关于生产者与消费者案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Springboot实现前后端分离excel下载

    Springboot实现前后端分离excel下载

    这篇文章主要介绍了Springboot实现前后端分离excel下载,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Mybatis原始执行方式Executor代码实例

    Mybatis原始执行方式Executor代码实例

    这篇文章主要介绍了Mybatis原始执行方式Executor代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • JAVA 开发之用静态方法返回类名的实例详解

    JAVA 开发之用静态方法返回类名的实例详解

    这篇文章主要介绍了JAVA 开发之用静态方法返回类名的实例详解的相关资料,这里主要说明使用异常来得到类名,希望能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • Java中的关键字synchronized 详解

    Java中的关键字synchronized 详解

    这篇文章主要介绍了Java中的关键字synchronized,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 详解Java 微服务架构

    详解Java 微服务架构

    这篇文章主要介绍了Java 微服务架构的相关资料,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-02-02
  • Java使用jxl包写Excel文件适合列宽实现

    Java使用jxl包写Excel文件适合列宽实现

    用jxl.jar包,读写过Excel文件。也没有注意最适合列宽的问题,但是jxl.jar没有提供最适合列宽的功能,上次用到写了一下,可以基本实现最适合列宽。
    2013-11-11
  • JavaSE-面向对象(方法重写)

    JavaSE-面向对象(方法重写)

    子类在调用父类的私有方法中不能直接调用,但是可以通过get方法进行调用,修改属性的值可以通过set方法进行修改。而子类想要修改父类中的方法可以使用方法重写进行操作。
    2021-08-08
  • Java拆装箱深度剖析

    Java拆装箱深度剖析

    这篇文章主要为大家深度剖析了Java拆箱装箱的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12

最新评论