1. 程式人生 > >Java| 命令編譯Java程式以及執行class檔案(javac)

Java| 命令編譯Java程式以及執行class檔案(javac)

本文主要說明了以下內容:

1.如何編譯一個無包結構的java檔案,以及執行該檔案?
2.如何編譯一個有包結構的java檔案,以及如何執行該檔案?
3.如何批量編譯java檔案,以及如何執行生成的檔案?

首先我們先看下javac命令的常用操作選項:

常用引數:
-encoding <編碼>
有時候當我們的java檔案不是預設的GBK編碼的時候是需要在編譯Class的時候指定編碼格式的:
javac -encoding utf-8 ./TestClassPath.java 預設生成的class檔案是存放在了當前路徑下.
-d <目錄>


通常我們可以指定一個目錄來存已經編譯好的Class檔案,指定了該引數,則在生成class檔案的時候會根據java檔案的包結構自動生成對應的資料夾.

如何編譯一個無包結構的java檔案,以及執行該檔案?

public class NoPackageClass {
    public static void main(String[] args) {
        System.out.println("This is no package class!");
    }
}

首先我們進入NoPackageClass.java所在的資料夾
編譯:javac -encoding UTF-8 ./NoPackageClass.java



我們會在執行命令的當前路徑下生成編譯後的class檔案NoPackageClass.class

執行: java NoPackageClass (注意這裡只需要類名,不需要檔案字尾,否則會報錯)

結果:This is no package class!

如何編譯一個有包結構的java檔案,以及如何執行該檔案?

package com.yveshe;

public class PackageClass {
    public static void main(String[] args) {
        System.out.println("This is package class!"
); } }

這裡我嘗試不在PackageClass.java所在的資料夾執行編譯,生成的class檔案是在執行javac命令時的工作路徑中,也及時temp目錄.

編譯:C:\Users\User\Desktop\temp>javac -encoding UTF-8 D:\workspace\Jasper-workspace\cmd\src\com\yveshe\PackageClass.java
雖然這是一個有包的java檔案,但是執行編譯的時候並不會根據包結構生成相應的資料夾.這裡我們需要指定一個存放生成class檔案的目錄,制定了目錄會自動根據包結構生成相應的資料夾

編譯:C:\Users\User\Desktop\temp>javac -encoding UTF-8 -d ./ D:\workspace\Jasper-workspace\cmd\src\com\yveshe\PackageClass.java
這時候在temp的當前目錄中建立了com/yveshe這樣的目錄結構,PackageClass也就存放在yveshe目錄下.
這裡寫圖片描述

執行:java com.yveshe.PackageClass
在當前目錄下執行java,也就是頂層包(資料夾com所在的目錄) 執行class檔案的格式為java 包名.類名

結果:This is package class!

如何批量編譯java檔案,以及如何執行生成的檔案?

編譯:javac -encoding utf-8 -d ./ D:\workspace\Jasper-workspace\cmd\src\com\yveshe\*.java
上面的編譯命令只能將指定資料夾下的java檔案進行編譯,如果資料夾下無任何java檔案,則會報錯,它不會遞迴查詢java檔案.

具體執行方式與2中執行方式一致.

如何使用javac編譯一整個完整的java專案?

Javac命令支援選項

在使用javac命令的時候由於可以選擇的專案太多,可以使用哦javac -help命令來檢視所有支援的選項,結果如下:

javac -help
用法: javac <options> <source files>
其中, 可能的選項包括:
  -g                         生成所有除錯資訊
  -g:none                    不生成任何除錯資訊
  -g:{lines,vars,source}     只生成某些除錯資訊
  -nowarn                    不生成任何警告
  -verbose                   輸出有關編譯器正在執行的操作的訊息
  -deprecation               輸出使用已過時的 API 的源位置
  -classpath <路徑>            指定查詢使用者類檔案和註釋處理程式的位置
  -cp <路徑>                   指定查詢使用者類檔案和註釋處理程式的位置
  -sourcepath <路徑>           指定查詢輸入原始檔的位置
  -bootclasspath <路徑>        覆蓋引導類檔案的位置
  -extdirs <目錄>              覆蓋所安裝擴充套件的位置
  -endorseddirs <目錄>         覆蓋簽名的標準路徑的位置
  -proc:{none,only}          控制是否執行註釋處理和/或編譯。
  -processor <class1>[,<class2>,<class3>...] 要執行的註釋處理程式的名稱; 繞過預設的搜尋程序
  -processorpath <路徑>        指定查詢註釋處理程式的位置
  -parameters                生成元資料以用於方法引數的反射
  -d <目錄>                    指定放置生成的類檔案的位置
  -s <目錄>                    指定放置生成的原始檔的位置
  -h <目錄>                    指定放置生成的本機標標頭檔案的位置
  -implicit:{none,class}     指定是否為隱式引用檔案生成類檔案
  -encoding <編碼>             指定原始檔使用的字元編碼
  -source <發行版>              提供與指定發行版的源相容性
  -target <發行版>              生成特定 VM 版本的類檔案
  -profile <配置檔案>            請確保使用的 API 在指定的配置檔案中可用
  -version                   版本資訊
  -help                      輸出標準選項的提要
  -A關鍵字[=值]                  傳遞給註釋處理程式的選項
  -X                         輸出非標準選項的提要
  -J<標記>                     直接將 <標記> 傳遞給執行時系統
  -Werror                    出現警告時終止編譯
  @<檔名>                     從檔案讀取選項和檔名