为特定类运行 rmic 编译器。
注意 从 Java 13 开始,rmic 已被弃用,从 Java 15 开始被移除。 尝试在 Java 15 中使用它将失败,除非您明确指定可执行文件或 rmic 适配器。
Rmic
可以对单个类(如 classname 属性中指定的那样)或多个类(base 下的所有类,但 _Stub
或 _Skel
类除外)运行。 如果您想对单个类运行 rmic
,并且该类是嵌套在另一个类中的类,则必须以 Outer$$Inner
而不是 Outer.Inner
的形式指定类名。
可以细化要进行 rmic
的文件集。 这可以通过 includes、includesfile、excludes、excludesfile 和 defaultexcludes 属性来完成。 使用 includes 或 includesfile 属性,您可以使用模式指定要包含的文件。 exclude 或 excludesfile 属性用于指定要排除的文件。 这也是通过模式完成的。 最后,使用 defaultexcludes 属性,您可以指定是否要使用默认排除。 请参阅有关 基于目录的任务 的部分,了解如何进行文件包含/排除以及如何编写模式。
此任务形成一个隐式的 FileSet,并支持 <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 任务在使用其中任何一个时将失败,除非您分叉任务并明确指定可执行文件。
属性 | 描述 | 必需 |
---|---|---|
base | 存储编译文件的路径。 同时用作任何非 Fileset 包含等的父目录(此功能保持不变)。 | 参见 注释 |
destdir | 存储编译文件的路径。 | |
classname | 要运行 rmic 的类。 | 否 |
filtering | 指示是否应进行标记过滤 | 否 |
sourcebase | 将 -keepgenerated 标志传递给 rmic 并将生成的源文件移动到给定的 sourcebase 目录。 | 否 |
stubversion | 指定生成的存根代码的 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 | 检查类是否实现了 Remote ,然后再将它们传递给 rmic |
否;默认值为 false |
iiop | 指示应生成可移植(RMI/IIOP)存根。 参见上面关于 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 | ||
prefix | 参见 命令行参数。 自 Ant 1.8 起。 | 否 |
suffix | 否 | |
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>
在这种情况下,您的编译器适配器可以支持它自己的属性和嵌套元素。