使用 native-image 编译 Kotlin / Java 编写的小工具成 Windows 下 .exe 可执行文件

这篇具有很好参考价值的文章主要介绍了使用 native-image 编译 Kotlin / Java 编写的小工具成 Windows 下 .exe 可执行文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

使用 Kotlin 写了个小工具,想要发给不懂编程的朋友用,便想到将其先编译成 .exe 文件,搜了下应该是可以使用 Kotlin-native 或者 GraalVM 的 native-image 来编译。这篇文章里使用 IDEA 将程序打包成 jar 再使用 native-image 将 jar 编译成 .exe 文件。


一、思路

先使用 IDEA 将程序打包成 jar, 再使用 native-image-agent 来检测并收集代码运行时的依赖信息,记录反射和资源使用情况,生成并写入相关配置文件。最后用 native-image 编译时使用相关的配置文件。

二、前提

1. Prerequisites for Using Native Image on Windows

To start using Native Image on Windows, install Visual Studio and Microsoft Visual C++ (MSVC). There are two installation options: * Install the Visual Studio Build Tools with the Windows 10 SDK * Install Visual Studio with the Windows 10 SDK

You can use Visual Studio 2017 version 15.9 or later.

解释:

使用 native-image 需要安装Visual Studio相关的工具。有两个选项:
一、安装Visual Studio Build Tools 和 Windows 10 SDK
这是一个精简版的只包含了编译相关工具链的安装包,不包含完整的IDE。但已足够支持Native Image。
二、完整安装Visual Studio IDE,同时选择包含Windows 10 SDK
这是完整功能的IDE集成开发环境。
原因是Native Image编译器在Windows上需要借助Visual C++编译器和Windows SDK来生成本地代码。这需要相应的工具链支持。
所以简单总结下需要这两个选择中的一个:
1.Visual Studio Build Tools
2.Visual Studio IDE
以及Windows 10 SDK。有了这些工具链和系统开发包的支持,才能让Native Image顺利在Windows上工作。

2. 下载 GraalVM

官网下载地址

3. 系统变量的配置

略…

三、步骤

1. 使用 IDEA 或其他方式将代码打包成 jar

Project Structure (Ctrl + Alt + Shift + S) -> Artifacts -> + -> JAR -> From modules with dependencies… -> main class(选择主类) -> OK -> Apply -> 删除不必要的依赖 -> OK

Build -> Build Artifacts -> Build

2. 使用native-image-agent生成配置文件

以下操作的目录可自己选择,这里展示的是在 jar 所在目录中进行操作
在生成的 jar 所在的目录中创建META-INF/native-image文件夹(可省略;文件夹名也可改,但后面的命令中的路径也需要一并修改)

在jar包所在的目录下运行以下命令:
注意替换 {jar包} 为前面打包生成的 .jar 文件

java -agentlib:native-image-agent=config-output-dir=META-INF/native-image -jar {jar包}

运行尽可能多的分支,然后结束程序,此时会在META-INF/native-image文件夹中生成配置文件

若一次运行不够,可以采用以下命令运行并自动合并配置文件:

java -agentlib:native-image-agent=config-merge-dir=META-INF/native-image -jar {jar包}

3. 使用native-image生成可执行文件

native-image --no-fallback -H:ConfigurationFileDirectories=META-INF/native-image -jar {jar包} {可执行文件名}

貌似GraalVM的native-image默认会生成依赖JDK的可执行文件,这样可执行文件必须在有JDK的环境下才能运行。
所以为了生成在其他没有JDK的机器上能执行的可执行文件,这里使用了 --no-fallback 参数禁用 fallback-image 的生成。

应该有其他编译出不依赖JDK的纯native执行文件的方法,但我没有深入探究。文章来源地址https://www.toymoban.com/news/detail-837235.html

到了这里,关于使用 native-image 编译 Kotlin / Java 编写的小工具成 Windows 下 .exe 可执行文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Python编写简单的小程序、成绩计算器

    成绩计算器程序需要两个分数,以百分比表示 - 一个用于项目,一个用于考试。 项目和考试都为最终评估成绩贡献了50%。 程序应从中计算出总体百分比,并使用下表中的数据计算出最终成绩: 例 项目分数 - 78%,考试分数 - 65%。 最终成绩 = 71.5% ((78 + 65)*0.5),最终成绩

    2024年02月11日
    浏览(37)
  • 小插曲 -- 使用Linux编写 判断程序是否在运行的小程序

    首先,在执行“ps -elf |grep xxx”时,如果xxx存在,通常会有两条结果,一个是xxx对应的PID,一个则是grep对应的PID,但是如果 我希望执行命令后,xxx存在就只有xxx对应的PID,不存在就什么都不显示的话 ,可以将指令修改成:“ ps -elf |grep XXX|grep -v grep ”,这样就可以屏蔽显示

    2024年02月07日
    浏览(47)
  • 使用 Kotlin DSL 编写网络爬虫

    本博文将会通过一个网络爬虫的例子,向你介绍 Kotlin 的基本用法和其简洁有力的 DSL。 按照维基百科的说法,DSL(domain-specific language) 是一种专注于某一特定应用领域的计算机语言。和我们常用的通用目的型语言(类如 C,Java,Python 等)相反,DSL 并不承诺可用来解决一切可计

    2024年03月26日
    浏览(50)
  • 使用NVMe的用户库libzbd编写和ZNS设备通讯的小程序

    libzbd是一个用户态库,用于与支持Zoned Namespace(ZNS)技术的SSD进行交互。以下是一个使用libzbd库编写向ZNS SSD写入数据并读取打印的简单程序。 请注意,该示例仅用于演示目的,并且省略了错误处理和其他细节。

    2024年02月16日
    浏览(39)
  • 探索Kotlin K2编译器和Java编译器的功能和能力

    文章首发地址 Kotlin K2编译器是Kotlin语言的编译器,负责将Kotlin源代码转换为Java字节码或者其他目标平台的代码。K2编译器是Kotlin语言的核心组件之一,它的主要功能是将Kotlin代码编译为可在JVM上运行的字节码。 编译过程: Kotlin K2编译器将Kotlin源代码作为输入,并经过词法分

    2024年02月11日
    浏览(46)
  • 【28】Kotlin语法进阶——使用协程编写高效的并发程序

    提示:此文章仅作为本人记录日常学习使用,若有存在错误或者不严谨得地方欢迎指正。 协程是Kotlin语言中很有代表性的一种并发设计模式,用于简化异步执行的代码。 协程和线程有点类似,可以简单地将它理解成一种轻量级的线程 。我们前面学习的线程是属于重量级的,

    2024年02月03日
    浏览(52)
  • kotlin 编写一个简单的天气预报app (七)使用material design

    对之前的天气预报的app进行了优化,原先的天气预报程序逻辑是这样的。 使用text和button组合了一个输入城市,并请求openweathermap对应数据,并显示的功能。 但是搜索城市的时候,可能会有错误,比如大小写,比如拼写之类的,所以打算给他升级一下。 目标: 在搜索的时候需

    2024年04月27日
    浏览(45)
  • kotlin 编写一个简单的天气预报app(六)使用recyclerView显示forecast内容

    要使用RecyclerView显示天气预报的内容 先在grandle里添加recyclerView的引用 创建一个RecyclerView控件:在布局文件中,添加一个RecyclerView控件,用于显示天气预报的列表。 这是一个包含三个TextView的LinearLayout布局,用于显示天气相关的数据。每个TextView都有一个唯一的id,可用于在代

    2024年02月13日
    浏览(86)
  • SpringBoot3.x原生镜像-Native Image实践

    之前曾经写过一篇《SpringBoot3.x 原生镜像-Native Image 尝鲜》,当时 SpringBoot 处于 3.0.0-M5 版本,功能尚未稳定。这次会基于 SpringBoot 当前最新的稳定版本 3.1.2 详细分析 Native Image 的实践过程。系统或者软件版本清单如下: 组件 版本 备注 macOS Ventura 13.4.1(c) ARM 架构 sdkman 5.18.2 JD

    2024年02月12日
    浏览(36)
  • 我把Solon打包成了native image,速度快的惊人

    Solon 一个高效的应用开发框架:更快、更小、更简单。https://solon.noear.org/ 我刚开始对 Solon 感兴趣的原因,就是启动快、包体积小,用了一段时间之后,发现 Solon 使用 GraalVM native iamge 打包有一些问题,我把问题发到 Solon 用户群里,作者告诉我 Solon 的原生编译还 beat 阶段,只

    2023年04月27日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包