前言
IKVM.NET是基于.NET CLR的Java虚拟机。
基于.NET的Java虚拟机意味着我们可以让Java程序跑在.NET上,通过虚拟机这个中介让Java程序与.NET应用程序一起运作。
昨晚发现作者新开了一个仓库https://github.com/ikvmnet/ikvm-maven。像 maven 一样,自动拉取仓库。
尽管才36个Stars数。
iKvm介绍
用于 .NET 的 Java 虚拟机和字节码到 IL 转换器。
源代码结构如下:
它可用于快速、轻松地:
- 在 .NET Framework 或 .NET Core 上执行已编译的 Java 代码(字节码)
- 将字节码转换为 .NET 程序集以直接访问 .NET 项目中的 API
这些任务无需将源代码移植到 .NET 即可完成。
IKVM主要包含以下组成:
- 在 .NET 中实现的 Java 虚拟机 (JVM)
- Java 类库的 .NET 实现
- 将 Java 字节码(JAR 文件)转换为 .NET IL(DLL 或 EXE 文件)的工具。
- 支持 Java 和 .NET 互操作性的工具
- 完整的 JRE/JDK 8 运行时。
IKVM.Maven.Sdk介绍
IKVM.Maven.Sdk 是一组 MSBuild 扩展,用于在 .NET SDK 项目中引用 Maven 工件。
源代码结构如下:
要使用它,请从 NuGet 安装 IKVM.Maven.Sdk 包,并将 <MavenReference /> 元素添加到您的 SDK 样式项目中。
通过项目元数据支持各种 Maven 选项。
最简单的用例如下:
<ItemGroup> <MavenReference Include="hanlp"> <groupId>com.hankcs</groupId> <artifactId>hanlp</artifactId> <version>portable-1.8.4</version> </MavenReference></ItemGroup>
未指定的依赖项
Java 开发人员在 Maven 中未指定依赖项的情况相当常见。例如,如果它们的库在运行时经常用作另一个聚合包或另一个库的依赖项,那么它们可以合理地确定它们所依赖的类将存在。此外,如果它们不存在,但从未命中需要依赖类的特定代码路径,则用户不会遇到任何问题。
然而,由于 IKVM 静态编译程序集,我们需要能够正确跟踪我们可能构建的每个程序集之间的依赖关系。如果库 A 依赖于库 B 中缺少的类,我们就无法完全构建它。因此,IKVM.Maven.Sdk 要求完全指定 Maven 依赖项。
完整demo
1、新建项目HanlpDemo 控制台程序
2、添加nuget依赖
dotnet add package IKVM
dotnet add package IKVM.Maven.Sdk
3、在HanlpDemo.csproj项目文件中添加
<ItemGroup>
<MavenReference Include="hanlp">
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.8.4</version>
</MavenReference>
</ItemGroup>
保存后vs会自动下载 iKvm 需要的依赖,并且会自动从 maven 上把 jar 包下载下来并转译成 .Net 平台的 dll。
如果没有自动执行,则手动运行
dotnet restore
dotnet build
4、开始编码
这里以 HanLP 的分词为例,直接segment() ,采用获取 默认的标准分词器,即维特比(Viterbi)分词器。
下面这个例子,"意思"这个词有多种意义,实际上处理中文比英文难得多。
using com.hankcs.hanlp;
string strDemo = "他说:“她这个人真有意思。”她说:“他这个人怪有意思的。”于是人 们以为他们有了意思,并让他向她意思意思。他火了:“我根本没有那个意思!”她也生气了:“你们这么说是什么意思?”事后有人说:“真有意思 。”也有人说:“真没意思”。";
Console.WriteLine(HanLP.segment(strDemo));
Console.ReadKey();
本文暂时没有评论,来添加一个吧(●'◡'●)