Rmic

說明

針對特定類別執行 rmic 編譯器。

注意 rmic 已於 Java 13 中棄用,並於 Java 15 中移除。除非您明確指定可執行檔或 rmic-adapter,否則嘗試在 Java 15 中使用它將會失敗。

Rmic 可以針對單一類別(如 classname 屬性所指定)或多個類別同時執行(基礎以下的所有類別,既不是 _Stub 也不是 _Skel 類別)。如果您要對單一類別執行 rmic,而此類別是巢狀在另一個類別中,您必須以 Outer$$Inner 而不是 Outer.Inner 的形式指定類別名稱。

可以調整正在執行 rmic 的檔案組。這可以使用 includesincludesfileexcludesexcludesfiledefaultexcludes 屬性來完成。使用 includesincludesfile 屬性,您可以使用模式指定要包含的檔案。excludeexcludesfile 屬性用於指定要排除的檔案。這也是使用模式完成的。最後,您可以使用 defaultexcludes 屬性指定是否要使用預設排除。請參閱 基於目錄的任務 部分,了解如何包含/排除檔案以及如何撰寫模式。

此任務形成一個隱含的 檔案組,並支援 <fileset> 的大多數屬性(dir 變成 base),以及巢狀的 <include><exclude><patternset> 元素。

可以使用不同的編譯器。這可以使用 build.rmic 屬性、compiler 屬性或巢狀元素來選擇。以下是選項

miniRMI 專案也包含此任務的編譯器實作,請參閱 miniRMI 的文件以了解如何使用它。

CORBA 支援

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 必須排除的檔案範本的逗號或空格分隔清單。 否;預設為預設排除項,或在 defaultexcludesno 時為無
excludesfile 檔案名稱。此檔案的每一行都被視為排除範本
defaultexcludes 指示是否應使用預設排除項 (yes|no). 否;預設為 yes
verify 在將類別傳遞給 rmic 之前,檢查類別是否實作 Remote 否;預設為 false
iiop 表示應產生可攜式 (RMI/IIOP) stub。
請參閱上方關於 CORBA 支援的注意事項。
iiopopts IIOP 類別產生額外的引數
idl 表示應產生 IDL 輸出檔案。
請參閱上方關於 CORBA 支援的注意事項。
idlopts IDL 檔案產生額外的引數
debug 產生偵錯資訊(傳遞 -grmic 否;預設為 false
includeAntRuntime 是否包含 Ant 執行時期函式庫 否;預設為 yes
includeJavaRuntime 是否包含執行中 JVM 的預設執行時期函式庫 否;預設為 no
extdirs 已安裝擴充功能的位置
compiler 要使用的編譯器實作。(請參閱上方 清單 中有效的編譯器。) 否;預設為 build.rmic 屬性的值(如果已設定),否則預設為目前 JDK 的編譯器
executable forkingxnew 編譯器的情況下,要使用的 rmic 可執行檔的完整路徑。自 Ant 1.8.0 起 否;預設為目前執行 Ant 的 JDK 的 rmic 編譯器
listfiles 表示是否會列出要編譯的原始檔。自 Ant 1.8.0 起 否;預設為 no

注意事項:

以巢狀元素指定參數

classpath 和 extdirs

Rmicclasspathextdirs 屬性為 類別路徑結構,也可以透過巢狀 classpathextdirs 元素設定。

compilerarg

您可以使用巢狀 <compilerarg> 元素為編譯器指定額外的命令列引數。這些元素的指定方式類似於 命令列引數,但有一個額外的屬性,可用於僅在使用特定編譯器實作時啟用引數。

屬性 說明 必要
value 請參閱 命令列引數 以下其中一個
line
file
path
前置 請參閱 命令列引數自 Ant 1.8 起
後置
compiler 僅當所選的編譯器實作與此屬性的值相符時,才傳遞指定的引數。合法值與上述 清單 中的有效編譯器相同。)

compilerclasspath

自 Ant 1.8.0 起

如果已指定自訂類別,則在載入編譯器實作時,會持有用於載入編譯器實作的類別路徑的 類似路徑的結構。在使用內建編譯器時,不會產生任何效果。

實作 RmicAdapter 類型的任何巢狀元素

自 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>

這種情況下,您的編譯器適配器可以支援自己的屬性和巢狀元素。