maven打包如何指定jdk的版本

 更新时间:2023年04月08日 13:45:35   作者:我不想名字重复  
这篇文章主要介绍了maven打包如何指定jdk的版本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

maven打包指定jdk的版本

问题

今天遇到个问题,项目中新写了一个接口,其中用到了lambda表达式,本地跑是没问题的,但提交到gitLab上,自动打包部署时却报错了(这是其他同事配置的)

报错信息如下:

在这里插入图片描述

可以看出大概意思就是,1.5的jdk不支持lambda表达式(lambda表达式确实是1.8的新特性),后来查看了下,本地idea中习惯的把项目中jdk的环境和语言环境都设置的1.8版本,虽然打包时引的也是jdk8的包,但maven估计默认还是用的1.5的去打包的(估计是当时这个项目建立时使用的1.5的jdk),所以需要在手动设置下maven打包的jdk版本

这是同事自动化部署写的配置,只是引了jdk1.8的包

在这里插入图片描述

百度了一下,还是需要在pom中加配置

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

maven打包不同jdk版本的包

对于MAVEN项目,我们存在将一个工程同样的代码部署到不同的环境上去的场景,且这些环境的jdk版本可能会不同,那么如何一份代码打不同的jdk版本的包呢?

基于maven我们就可以很方便的做到这点。

1. 在项目的pom文件中加入如下配置(主要配置)

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>    
    </build>
    <profiles>
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>     <!--默认激活该profile-->
            </activation>
            <properties>
                <java.version>1.8</java.version>            <默认用1.8版本>
            </properties>
        </profile>
        <profile>
            <id>jdk17</id>
            <properties>
                <java.version>1.7</java.version>            <该配置用1.7版本>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-jar-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <classifier>jdk17</classifier>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

2. 用mvn命令构建项目

mvn -P jdk17 clean 
mvn -P jdk17 install  #安装的时候会出现2个包,1.8版本的与1.7版本的都生成了,如:blog-1.0.2.jar、blog-1.0.2-jdk17.jar

如果需要发布项目到服务器

mvn -P jdk17 -P <depoly配置ID> depoly

3. 项目中引用

<!-- 引用1.8编译版本 -->
<dependency>
  <groupId>org.test</groupId>
  <artifactId>blog</artifactId>
  <version>0.1</version>
</dependency>
 
<!-- 引用1.7编译版本 -->
<dependency>
  <groupId>org.test</groupId>
  <artifactId>blog</artifactId>
  <version>0.1</version>
  <classifier>jdk17</classifier>
</dependency>

总结

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

相关文章

  • Mybatis 中的sql批量修改方法实现

    Mybatis 中的sql批量修改方法实现

    在项目中遇到需要批量更新的功能,原本想的是在Java中用循环访问数据库去更新,但是心里总觉得这样做会不会太频繁了,太耗费资源了,效率也很低,查了下mybatis的批量操作,原来确实有<foreach>标签可以做到,下面通过本文给大家介绍下
    2017-01-01
  • SpringSecurity授权机制的实现(AccessDecisionManager与投票决策)

    SpringSecurity授权机制的实现(AccessDecisionManager与投票决策)

    本文主要介绍了SpringSecurity授权机制的实现,其核心是AccessDecisionManager和投票系统,下面就来介绍一下,感兴趣的可以了解一下
    2025-04-04
  • mybatis使用pagehelper插件过程详解

    mybatis使用pagehelper插件过程详解

    这篇文章主要介绍了mybatis使用pagehelper插件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 使用Java提取字符串里的xml标签

    使用Java提取字符串里的xml标签

    在Java中,我们经常需要处理XML数据,有时候,我们需要从一个包含XML标签的字符串中提取出这些标签,本文将介绍如何使用Java代码来获取字符串中的XML标签,需要的可以参考下
    2024-12-12
  • Java实现AWT四大事件的详细过程

    Java实现AWT四大事件的详细过程

    AWT的事件处理是一种委派式事件处理方式:普通组件(事件源)将整个事件处理委托给特定的对象(事件监听器);当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件
    2022-04-04
  • java中如何反射获取一个类

    java中如何反射获取一个类

    大家说说对java反射的理解,使用反射如何获取一个类,下面小编给大家整理一些资料,关于java中如何反射获取一个类,有需要的朋友可以参考下
    2015-08-08
  • 详解Java中synchronized关键字的死锁和内存占用问题

    详解Java中synchronized关键字的死锁和内存占用问题

    Java的synchronized关键字用来进行线程同步操作,然而这在使用中经常会遇到一些问题,这里我们就来详解Java中synchronized关键字的死锁和内存占用问题:
    2016-06-06
  • servlet实现文件上传与下载功能

    servlet实现文件上传与下载功能

    这篇文章主要为大家详细介绍了servlet实现文件上传与下载功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Java中Struts2的值栈ValueStack详解

    Java中Struts2的值栈ValueStack详解

    这篇文章主要介绍了Java中Struts2的值栈ValueStack详解,值栈(ValueStack)就是 OGNL 表达式存取数据的地方,在一个值栈中,封装了一次请求所需要的所有数据,需要的朋友可以参考下
    2023-08-08
  • Java List 用法详解及实例分析

    Java List 用法详解及实例分析

    这篇文章主要介绍了Java List 用法详解及实例分析的相关资料,需要的朋友可以参考下
    2017-07-07

最新评论