• mvn命令指定jdk版本编译&查看class文件、jar包编译时的jdk版本




    一、mvn命令指定jdk版本编译

    1.1 修改mvn.cmd

    其实还可以更改maven的 setting.xml 文件,但是觉得太复杂了,还是修改 mvn.cmd 来得快

    以Windows为例,找到maven安装目录,编辑 binmvn.cmd

    在文件开头加入 set JAVA_HOME= 路径中有空格也无须用引号

    随后命令行运行 mvn -v 即可查看 Java version

    不对的话就重启cmd窗口

    使用maven编译文件时要注意 pom.xml 文件中有没有指定java版本

    如:

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    

    有的话需要修改一下,否则会报错:Fatal error compiling: 无效的目标发行版

    上述配置只能是建议使用某个版本进行编译,编译时校验一下jdk版本是否正确

    毕竟单单这一个配置,程序根本不知道你jdk路径在哪

    想要完全通过 pom.xml 文件配置指定编译时的jdk版本,可以使用 maven-compiler-plugin(不推荐)



    1.2 maven-compiler-plugin

    配置详解如下

    <plugin>                                                                                                                                      
        <!-- 指定maven编译的jdk版本,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 -->                                                                           
        <groupId>org.apache.maven.plugins</groupId>                                                                                               
        <artifactId>maven-compiler-plugin</artifactId>                                                                                            
        <version>3.8.1</version>                                                                                                                    
        <configuration>                                                                                                                           
            <!-- 一般而言,target与source是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中不能使用低版本jdk中不支持的语法),会存在target不同于source的情况 -->                    
            <source>1.8</source> <!-- 源代码使用的JDK版本 -->                                                                                             
            <target>1.8</target> <!-- 需要生成的目标class文件的编译版本 -->                                                                                     
            <encoding>UTF-8</encoding><!-- 字符集编码 -->
            <skipTests>true</skipTests><!-- 跳过测试 -->                                                                             
            <verbose>true</verbose>
            <showWarnings>true</showWarnings>                                                                                                               
            <fork>true</fork><!-- 要使compilerVersion标签生效,还需要将fork设为true,用于明确表示编译版本配置的可用 -->                                                        
            <executable><!-- path-to-javac --></executable><!-- 使用指定的javac命令,例如:<executable>${JAVA_1_4_HOME}/bin/javac</executable> -->           
            <compilerVersion>1.3</compilerVersion><!-- 指定插件将使用的编译器的版本 -->                                                                         
            <meminitial>128m</meminitial><!-- 编译器使用的初始内存 -->                                                                                      
            <maxmem>512m</maxmem><!-- 编译器使用的最大内存 -->                                                                                              
            <compilerArgument>-verbose -bootclasspath ${java.home}lib
    t.jar</compilerArgument><!-- 这个选项用来传递编译器自身不包含但是却支持的参数选项 -->               
        </configuration>                                                                                                                          
    </plugin>
    
    // 原文链接:https://blog.csdn.net/liupeifeng3514/article/details/80236077
    

    简化如下:

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>                                                                                            
          <target>1.8</target>                                                                                   
          <encoding>UTF-8</encoding>
          <executable><!-- path-to-javac --></executable>
        </configuration>
      </plugin>
    </plugins>
    

    executable可以指定javac路径,但是个人觉得这样不好,毕竟分享你项目时,还要让别人改配置



    二、查看class文件、jar包编译时的jdk版本

    class文件:

    You're looking for this on the command line (for a class called MyClass):

    On Unix/Linux:

    javap -verbose MyClass | grep "major"   // or -v
    

    On Windows:

    javap -verbose MyClass | findstr "major"
    

    You want the major version from the results. Here are some example values:

    Java 1.2 uses major version 46
    Java 1.3 uses major version 47
    Java 1.4 uses major version 48
    Java 5 uses major version 49
    Java 6 uses major version 50
    Java 7 uses major version 51
    Java 8 uses major version 52



    jar包:

    查看jar包中的 META-INFMANIFEST.MF,Build-Jdk 属性就是JDK的版本

    如果没有Build-Jdk属性,那就解压个class文件下来看吧




    End (๑•̀ㅂ•́)و✧
    往期精彩文章推荐:

    《自建网站的多种姿势》

    《通过局域网在线共享、访问电脑上的文件》

  • 相关阅读:
    Documentum常见问题1—Tomcat应用内存溢出
    Documentum常见问题3—保存搜索Saved Searches提示用户对文件柜无权限
    Request.QueryString[]和Request[]的区别
    将money转换成大写汉字
    Windows API(一) 什么是Windows API
    C#将数据导出到Excel汇总
    开始—运行—命令
    手动绘制DataTable
    触发器Deleted表和Inserted表
    功能强大的Regsvr32命令
  • 原文地址:https://www.cnblogs.com/yunmuq/p/14721852.html
Copyright © 2020-2023  润新知