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>

总结

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

相关文章

  • IntelliJ idea 如何生成动态的JSON字符串(步骤详解)

    IntelliJ idea 如何生成动态的JSON字符串(步骤详解)

    这篇文章主要介绍了IntelliJ idea 如何生成动态的JSON字符串,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 浅谈Java中@Autowired和@Inject注解的区别和使用场景

    浅谈Java中@Autowired和@Inject注解的区别和使用场景

    本文主要介绍了浅谈Java中@Autowired和@Inject注解的区别和使用场景,@Autowired注解在依赖查找方式和注入方式上更加灵活,适用于Spring框架中的依赖注入,而@Inject注解在依赖查找方式上更加严格,适用于Java的依赖注入标准,感兴趣的可以了解一下
    2023-11-11
  • java 多线程实现在线咨询(udp)

    java 多线程实现在线咨询(udp)

    这篇文章主要介绍了java 多线程实现在线咨询(udp)的示例,帮助大家更好的理解和学习Java 网络编程的相关内容,感兴趣的朋友可以了解下
    2020-11-11
  • Java中的ReentrantLock解读

    Java中的ReentrantLock解读

    这篇文章主要介绍了Java中的ReentrantLock解读,ReentantLock是java中重入锁的实现,一次只能有一个线程来持有锁,包含三个内部类,Sync、NonFairSync、FairSync,需要的朋友可以参考下
    2023-09-09
  • Java NIO和IO的区别

    Java NIO和IO的区别

    这篇文章主要介绍了Java NIO和IO的区别,需要的朋友可以参考下
    2014-06-06
  • Spring ApplicationContext上下文核心容器深入探究

    Spring ApplicationContext上下文核心容器深入探究

    ApplicationContext是Spring应用程序中的中央接口,由于继承了多个组件,使得ApplicationContext拥有了许多Spring的核心功能,如获取bean组件,注册监听事件,加载资源文件等
    2023-01-01
  • Shiro中session超时页面跳转的处理方式

    Shiro中session超时页面跳转的处理方式

    这篇文章主要介绍了Shiro中session超时页面跳转的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • MyBatis resultMap id标签的错误使用方式

    MyBatis resultMap id标签的错误使用方式

    这篇文章主要介绍了MyBatis resultMap id标签的错误使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java中volatile关键字的作用

    Java中volatile关键字的作用

    这篇文章主要介绍了Java中volatile关键字的作用,文章基于Java的相关资料展开对volatile关键字作用的详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • mybatis 自定义实现拦截器插件Interceptor示例

    mybatis 自定义实现拦截器插件Interceptor示例

    这篇文章主要介绍了mybatis 自定义实现拦截器插件Interceptor,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论