本文摘译自:IKVM.NET Home Page
程序可以从ikvm-0.38.0.2(32位)和ikvm-0.38.0.2(64位)下载。
IKVM.NET 二进行代码编译器(ikvmc.exe)
ikvmc是将Java二进行代码转换成.NET动态链接器(.dll)和可执行文件(.exe)的工具。
· 语法
· 参数
· 几点说明
· 示例
语法(译者注:这个工具是在windows命令提示窗中使用的)
ikvmc [ options ] classOrJarfile [ classOrJarfile ... ] |
参数
见下。
类文件(.class)或包文件(.jar)
Java类或包文件的名字可以含有通配符(如*.class)。
参数
参数 | 说明 |
-out:输出文件 | 指定输出文件的文件名。文件名应含有扩展名.dll(参数-target设为library时)或.exe(参数-target设为exe或winexe时)。一般地,缺省状态下ikvmc会根据输入文件名和-target参数来确定输出文件名。但是,如果在输入文件名中使用了通配符,那么就必须使用这个选项来指定输出文件名。 |
-assembly:程序集名称 | 指定生成的程序集名称。一般地,缺省状态下,程序集名就是输出文件名。 |
-target:目标类型 | 指定生成目标.exe或.dll文件的类型,可以指定如下值:
在Linux平台上,exe与winexe两个参数是没有区别的。 |
-keyfile:主文件名。 | 主文件名用于指定结果程序集。 |
-version:M.m.b.r | 指定程序集版本。 |
-main:类名 | 指定含有main函数的类的名称。缺省情况下,如果-target参数设置为exe或winexe,ikvmc会搜寻合法的main函数,在找到的情况下会给用户提示。 |
-reference:指定类库位置 | 如果Java代码使用了.NET的编程接口(API),那么使用这个选项指定这些动态链接库(dll)。如果引用了不止一个类库文件,那么此选项可以多次使用。可以使用通配符(例如:c:/libs/*.dll)。 |
- recurse:filespec | 处理当前文件夹下所有可与filespec匹配的文件。例如:- recurse: *.class |
-nojni | 对于非Java函数(native methods)不要生成用于非Java代码的Java接口(JNI)。 |
-resource:路径名 | 指定Java资源的引用路径名。 |
-exclude:文件名 | 要排除的类名列表。 |
-debug | 将调试信息输出。注意:只有当.class文件含有调试信息(即使用javac-g参数编译)时才有用。 |
-srcpath:路径 | 指定源代码的位置。与-debug同时使用。程序会将包中类的搜索路径指定为此路径,并从中搜索类的源代码。 |
-Xtrace:名称 | 显示所有该指定名称的跟踪点。 |
-Xmethodtrace:函数名 | 指定的生成的函数名,将函数跟踪器(method trace)生成到此函数中。 |
ikvmc利用Java类文件和包文件生成.NET程序集。它将输入文件中的Java二进行代码转化成.NET公共中间语言(CIL)。并利用它来生成:
- .NET可执行文件(-target:exe or –target:winexe)
- .NET类库(-target:library)
- .NET模块(-target:module)
Java程序一般由一系列的包文件组成。ikvmc可以将多个包文件(和类文件)转化成一个单独的.NET可执行程序或类库文件。例如,一个程序包含main.jar、lib1.jar和lib2.jar可以转化成一个单独的main.exe文件。
处理多个包文件时,如果有多个相同的类或源文件,ikvmc会使用第一个读入的版本,而忽略以后读到的。这时会产生警告信息。因此,包文件的顺序至关重要。
注意:
为了得到最佳结果,使用ikvmc转换Java程序时,请按照Java程序中类路径的顺序在,把要转换包的列表键入ikvmc的命令行。
示例
ikvmc myProg.jar
程序会自动在myprog.jar中查找main函数。如果找到了main函数,那么生成一个.exe文件;否则,生成一个.dll文件。
ikvmc -out:myapp.exe -main:org.anywhere.Main -recurse:bin/*.class lib/mylib.jar
处理bin文件夹中所有的.class文件以及lib文件夹中的mylib.jar文件。生成一个名为myapp.exe的可执行文件,并把org.anywhere.Main作为main函数。