专业的编程技术博客社区

网站首页 > 博客文章 正文

介绍一个Java程序跑在.NET上的最简单方法

baijin 2024-09-06 14:43:22 博客文章 6 ℃ 0 评论

前言

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();

5、打印结果

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表