Rmic

描述

为特定类运行 rmic 编译器。

注意 从 Java 13 开始,rmic 已被弃用,从 Java 15 开始被移除。 尝试在 Java 15 中使用它将失败,除非您明确指定可执行文件或 rmic 适配器。

Rmic 可以对单个类(如 classname 属性中指定的那样)或多个类(base 下的所有类,但 _Stub_Skel 类除外)运行。 如果您想对单个类运行 rmic,并且该类是嵌套在另一个类中的类,则必须以 Outer$$Inner 而不是 Outer.Inner 的形式指定类名。

可以细化要进行 rmic 的文件集。 这可以通过 includesincludesfileexcludesexcludesfiledefaultexcludes 属性来完成。 使用 includesincludesfile 属性,您可以使用模式指定要包含的文件。 excludeexcludesfile 属性用于指定要排除的文件。 这也是通过模式完成的。 最后,使用 defaultexcludes 属性,您可以指定是否要使用默认排除。 请参阅有关 基于目录的任务 的部分,了解如何进行文件包含/排除以及如何编写模式。

此任务形成一个隐式的 FileSet,并支持 <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 任务在使用其中任何一个时将失败,除非您分叉任务并明确指定可执行文件。

参数

属性 描述 必需
base 存储编译文件的路径。 同时用作任何非 Fileset 包含等的父目录(此功能保持不变)。 参见 注释
destdir 存储编译文件的路径。
classname 要运行 rmic 的类。
filtering 指示是否应进行标记过滤
sourcebase -keepgenerated 标志传递给 rmic 并将生成的源文件移动到给定的 sourcebase 目录。
stubversion 指定生成的存根代码的 JDK 版本。 指定 1.1 以将 -v1.1 选项传递给 rmic1.2 用于 -v1.2compat 用于 -vcompat
自 Ant 1.7 起,如果您未指定版本,并且未请求 .iiop.idl 文件,则选择 compat
否;默认值为 compat
classpath 编译期间要使用的类路径
classpathref 编译期间要使用的类路径,以 引用 的形式给出,该引用指向在其他地方定义的路径
includes 必须包含的文件模式的逗号或空格分隔列表。 否;默认值为全部(**
includesfile 文件名称。 此文件的每一行都被视为一个包含模式
excludes 必须排除的文件模式的逗号或空格分隔列表。 否;默认值为默认排除,如果 defaultexcludesno,则为无
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 在使用 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
prefix 参见 命令行参数自 Ant 1.8 起
suffix
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>

在这种情况下,您的编译器适配器可以支持它自己的属性和嵌套元素。