maven编译报错 -source 1.5 中不支持 lambda 表达式

在用maven编译项目是由于项目中用了jdk 1.8, 编译是报错  -source 1.5 中不支持 lambda 表达式,Google找到这篇解决方案,记录一下:

 

编译时报如下错误:

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] AAA\.jenkins\workspace\BBB\CCC.java:[73,46] 错误: -source 1.5 中不支持 diamond 运算符
[ERROR]   (请使用 -source 7 或更高版本以启用 diamond 运算符)
[ERROR] AAA\.jenkins\workspace\BBB\DDD.java:[38,33] 错误: -source 1.5 中不支持 lambda 表达式
[ERROR]   (请使用 -source 8 或更高版本以启用 lambda 表达式)

奇怪的是我的 Jenkins 构建机器上只安装了 JDK 8,为什么还会说不支持 diamond 和 lambda 呢?在 Google 大神的指引下,在 Maven Compiler 插件介绍 里面找到了答案:Also note that at present the default source setting is 1.5 and the default target setting is 1.5, independently of the JDK you run Maven with.

原来 Maven Compiler 插件默认会加 -source 1.5 及 -target 1.5 参数来编译(估计是为了兼容一些比较老的 Linux 服务器操作系统,它们通常只有 JDK 5),而我们的代码里使用了 JDK 7/8 的语法。解决办法在这里

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

http://blog.csdn.net/kai161/article/details/50379418

Setting the -source and -target of the Java Compiler

Sometimes when you may need to compile a certain project to a different version than what you are currently using. The javac can accept such command using -source and -target. The Compiler Plugin can also be configured to provide these options during compilation.

For example, if you want to use the Java 8 language features (-source 1.8) and also want the compiled classes to be compatible with JVM 1.8 (-target 1.8), you can either add the two following properties, which are the default property names for the plugin parameters:

<project>
  [...]
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  [...]
</project>

or configure the plugin directly:

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

Note: Merely setting the target option does not guarantee that your code actually runs on a JRE with the specified version. The pitfall is unintended usage of APIs that only exist in later JREs which would make your code fail at runtime with a linkage error. To avoid this issue, you can either configure the compiler's boot classpath to match the target JRE or use the Animal Sniffer Maven Plugin to verify your code doesn't use unintended APIs. In the same way, setting the sourceoption does not guarantee that your code actually compiles on a JDK with the specified version. To compile your code with a specific JDK version, different than the one used to launch Maven, refer to the Compile Using A Different JDK example.

http://maven.apache.org/components/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html

 

时间: 2024-10-26 23:34:05

maven编译报错 -source 1.5 中不支持 lambda 表达式的相关文章

【Maven】解决maven打jar包报错 source 1.3 中不支持注释 (请使用 -sour

问题:maven在进行打包时,报 '请使用-source 5 或者更高版本以启用XX'的信息并导致打包失败. 原因:maven默认的编译插件的java版本较低,导致其不支持例如泛型,注解等用法. 解决方法:在项目的pom.xml文件中加入以下内容用来指定版本,配置如下: 1

解决maven打jar包报错 source 1.3 中不支持

  问题:maven在进行打包时,报 '请使用-source 5 或者更高版本以启用XX'的信息并导致打包失败. 原因:maven默认的编译插件的java版本较低,导致其不支持例如泛型,注解等用法. 解决方法:在项目的pom.xml文件中加入以下内容用来指定版本,配置如下: <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</gro

spring mvc-Spring mvc工程maven编译,报错。

问题描述 Spring mvc工程maven编译,报错. Failed to load class "org.slf4j.impl.StaticLoggerBinder 这是我的Pom.xml文件配置 <!-- log4j --> log4j log4j 1.2.8 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId>

maven 编译 trunk-maven 编译报错的问题

问题描述 maven 编译报错的问题 错误如下: [root@node1-246 emm-trunk01]# mvn clean install [INFO] Scanning for projects... [ERROR] The build could not read 8 projects -> [Help 1] [ERROR] [ERROR] The project com.polysaas.emm:emm-device:0.0.1-SNAPSHOT (/opt/emm-trunk01/

android中应用编译报错

问题描述 android中应用编译报错 一个带下拉列表的应用,在编译的时候报错: The constructor ArrayAdapter(LayoutNext, int, String[]) is undefined 不知道应该怎么解决? 我的实现代码: public class LayoutNext extends Fragment implements OnClickListener,OnItemSelectedListener{ TimePicker timepicker; privat

pom文件中引用org.apache.maven.plugins报错

问题描述 pom文件中引用org.apache.maven.plugins报错 错误:Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (execution: default-testCompile phase: test-compile) 解决方案 maven pom 报错 Failed to execut

指令-VC6.0中dll创建失败,编译报错怎么处理

问题描述 VC6.0中dll创建失败,编译报错怎么处理 VC6.0环境,创建DCOM的服务器. 想要生成一个dll文件,在project setting里面输入了指令 然后就出现了编译错误 这个怎么破?求各位大神解答! 解决方案 -f是参数吧,中间缺少空格. 解决方案二: nmake命令路径是否正确,是否PATH环境变量中.跟参数之间要有空格.

c++的问题-vector中使用类编译报错,求各位c++大神解答

问题描述 vector中使用类编译报错,求各位c++大神解答 std::vectora其中A是自己写的一个类,运行后编译出错提示A类没有复制构造函数或者复制构造函数声明为'explicit'.可是在类中我写了复制构造函数了.求各位c++大神解答 解决方案 类A除了复制构造函数,还要实现operator = 解决方案二: A::A(const A& aa){}确定没有写错?

maven-MyEclipse8.5 中 Maven项目报错

问题描述 MyEclipse8.5 中 Maven项目报错 这可怎么办 解决方案 更新maven失败.你看一下,http://maven.oschina.net你能连接上不.是不是你们公司网络限制了.还有就是这个链接是否正确,是否存在. 解决方案二: 公司网络没有限制,链接正确可访问 解决方案三: 配置有问题, http://jingyan.baidu.com/article/4f7d5712aa9c631a201927ea.htmlmyeclipse下maven的配置安装 解决方案四: 试试: