mvn命令指定jdk版本編譯&查看class文件、jar包編譯時的jdk版本




一、mvn命令指定jdk版本編譯

1.1 修改mvn.cmd

其實還可以更改maven的 setting.xml 文件,但是覺得太復雜了,還是修改 mvn.cmd 來得快

以Windows為例,找到maven安裝目錄,編輯 bin\mvn.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\rt.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-INF\MANIFEST.MF,Build-Jdk 屬性就是JDK的版本

如果沒有Build-Jdk屬性,那就解壓個class文件下來看吧




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

《自建網站的多種姿勢》

《通過局域網在線共享、訪問電腦上的文件》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM