針對特定類別執行 rmic 編譯器。
注意 rmic 已於 Java 13 中棄用,並於 Java 15 中移除。除非您明確指定可執行檔或 rmic-adapter,否則嘗試在 Java 15 中使用它將會失敗。
Rmic
可以針對單一類別(如 classname 屬性所指定)或多個類別同時執行(基礎以下的所有類別,既不是 _Stub
也不是 _Skel
類別)。如果您要對單一類別執行 rmic
,而此類別是巢狀在另一個類別中,您必須以 Outer$$Inner
而不是 Outer.Inner
的形式指定類別名稱。
可以調整正在執行 rmic
的檔案組。這可以使用 includes、includesfile、excludes、excludesfile 和 defaultexcludes 屬性來完成。使用 includes 或 includesfile 屬性,您可以使用模式指定要包含的檔案。exclude 或 excludesfile 屬性用於指定要排除的檔案。這也是使用模式完成的。最後,您可以使用 defaultexcludes 屬性指定是否要使用預設排除。請參閱 基於目錄的任務 部分,了解如何包含/排除檔案以及如何撰寫模式。
此任務形成一個隱含的 檔案組,並支援 <fileset>
的大多數屬性(dir 變成 base),以及巢狀的 <include>
、<exclude>
和 <patternset>
元素。
可以使用不同的編譯器。這可以使用 build.rmic
屬性、compiler 屬性或巢狀元素來選擇。以下是選項
default—平台的預設編譯器(
kaffe、
sun或
forking)。
sun—JDK 9 之前的標準編譯器
kaffe—Kaffe 的標準編譯器
weblogic
forking—(自 Apache Ant 1.7 起)
sun編譯器分岔到一個獨立的程序中。自 Ant 1.9.8 起,這是 JDK 9+ 上執行的預設值。
xnew—(自 Ant 1.7 起)
sun編譯器分岔到一個獨立的程序中,並使用 -Xnew 選項。這是使用 -Xnew 最可靠的方式。
build.rmic
的值,如果沒有,則選擇平台的預設值。如果 build.rmic
設定為此值,您將取得預設值。miniRMI 專案也包含此任務的編譯器實作,請參閱 miniRMI 的文件以了解如何使用它。
Java 11 移除 Java EE 和 CORBA 套件,而 rmic 不再支援 -iiop 或 -idl 選項。從 Ant 1.10.3 開始,在執行 Java 11+ 時,如果使用 rmic 任務,且未 fork 任務並明確指定可執行檔,任務將會失敗。
屬性 | 說明 | 必要 |
---|---|---|
base | 儲存已編譯檔案的位置。同時作為任何非 Fileset 包含項目的父目錄等。(此功能保持不變。) | 請參閱 註解 |
destdir | 儲存已編譯檔案的位置。 | |
classname | 要執行 rmic 的類別。 | 否 |
filtering | 指示是否應進行代碼過濾 | 否 |
sourcebase | 將 -keepgenerated 旗標傳遞給 rmic,並將產生的原始檔移至指定的 sourcebase 目錄。 | 否 |
stubversion | 指定產生之 stub 程式碼的 JDK 版本。指定 1.1以將 -v1.1 選項傳遞給 rmic,指定 1.2以傳遞 -v1.2,指定 compat以傳遞 -vcompat。 自 Ant 1.7 起,如果您未指定版本,且未要求 .iiop 或 .idl 檔案,則會選取 compat。 |
否;預設為 compat |
classpath | 編譯期間使用的類別路徑 | 否 |
classpathref | 編譯期間使用的類別路徑,以 參考 形式提供,指向其他地方定義的路徑 | 否 |
includes | 必須包含的檔案範本的逗號或空格分隔清單。 | 否;預設為全部 (**) |
includesfile | 檔案名稱。此檔案的每一行都被視為包含範本 | 否 |
excludes | 必須排除的檔案範本的逗號或空格分隔清單。 | 否;預設為預設排除項,或在 defaultexcludes 為 no時為無 |
excludesfile | 檔案名稱。此檔案的每一行都被視為排除範本 | 否 |
defaultexcludes | 指示是否應使用預設排除項 (yes|no). |
否;預設為 yes |
verify | 在將類別傳遞給 rmic 之前,檢查類別是否實作 Remote |
否;預設為 false |
iiop | 表示應產生可攜式 (RMI/IIOP) stub。 請參閱上方關於 CORBA 支援的注意事項。 |
否 |
iiopopts | IIOP 類別產生額外的引數 | 否 |
idl | 表示應產生 IDL 輸出檔案。 請參閱上方關於 CORBA 支援的注意事項。 |
否 |
idlopts | IDL 檔案產生額外的引數 | 否 |
debug | 產生偵錯資訊(傳遞 -g 至 rmic) | 否;預設為 false |
includeAntRuntime | 是否包含 Ant 執行時期函式庫 | 否;預設為 yes |
includeJavaRuntime | 是否包含執行中 JVM 的預設執行時期函式庫 | 否;預設為 no |
extdirs | 已安裝擴充功能的位置 | 否 |
compiler | 要使用的編譯器實作。(請參閱上方 清單 中有效的編譯器。) | 否;預設為 build.rmic 屬性的值(如果已設定),否則預設為目前 JDK 的編譯器 |
executable | 在 forking或 xnew編譯器的情況下,要使用的 rmic 可執行檔的完整路徑。自 Ant 1.8.0 起。 |
否;預設為目前執行 Ant 的 JDK 的 rmic 編譯器 |
listfiles | 表示是否會列出要編譯的原始檔。自 Ant 1.8.0 起。 | 否;預設為 no |
注意事項:
Rmic
的 classpath 和 extdirs 屬性為 類別路徑結構,也可以透過巢狀 classpath
和 extdirs
元素設定。
您可以使用巢狀 <compilerarg>
元素為編譯器指定額外的命令列引數。這些元素的指定方式類似於 命令列引數,但有一個額外的屬性,可用於僅在使用特定編譯器實作時啟用引數。
屬性 | 說明 | 必要 |
---|---|---|
value | 請參閱 命令列引數。 | 以下其中一個 |
line | ||
file | ||
path | ||
前置 | 請參閱 命令列引數。自 Ant 1.8 起。 | 否 |
後置 | 否 | |
compiler | 僅當所選的編譯器實作與此屬性的值相符時,才傳遞指定的引數。合法值與上述 清單 中的有效編譯器相同。) | 否 |
自 Ant 1.8.0 起
如果已指定自訂類別,則在載入編譯器實作時,會持有用於載入編譯器實作的類別路徑的 類似路徑的結構。在使用內建編譯器時,不會產生任何效果。
自 Ant 1.8.0 起
如果已定義的類型實作 RmicAdapter
介面,則可以將該類型的巢狀元素用作 compiler 屬性的替代方案。
針對類別 com.xyz.FooBar
執行 rmic 編譯器。編譯後的檔案將儲存在目錄 ${build}/classes 中。
<rmic classname="com.xyz.FooBar" base="${build}/classes"/>
針對 ${build}/classes 下方所有類別名稱開頭為 Remote
的 .class 檔案執行 rmic 編譯器。編譯後的檔案將儲存在目錄 ${build}/classes 中。
<rmic base="${build}/classes" includes="**/Remote*.class"/>
如果您想使用自訂 RmicAdapter org.example.MyAdapter
,您可以使用 compiler 屬性
<rmic classname="com.xyz.FooBar" base="${build}/classes" compiler="org.example.MyAdapter"/>
或定義類型並將其巢狀到任務中,就像在
<componentdef classname="org.example.MyAdapter" name="myadapter"/> <rmic classname="com.xyz.FooBar" base="${build}/classes"> <myadapter/> </rmic>
這種情況下,您的編譯器適配器可以支援自己的屬性和巢狀元素。