V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cofcool
V2EX  ›  分享创造

基于 GraalVM 开发个人工具箱

  •  
  •   cofcool ·
    cofcool · 278 天前 · 1481 次点击
    这是一个创建于 278 天前的主题,其中的信息可能已经有所发展或是发生改变。

    2022 年底受疫情影响,有了一些空闲时间,思维便开始发散起来,在想要做个什么好了。正好需要把 Trello 里的内容导入到 Logseq ,突然想到为什么不利用最新的 Java 技术来开发,这样既可以了解最新的 Java 特性,也可以实现导入目的。于是 MyToolbox 就呱呱坠地了。

    建立项目后,先开始思索项目整体架构应该是什么样的:

    1. 命令行程序
    2. 添加新功能要方便
    3. 保持精简小巧,避免依赖过多
    4. 统一处理参数解析、日志打印等和命令实现无关的操作
    5. 跨平台

    这样大致可以确定程序流程和架构了。

    因此需要实现的功能包括:

    1. 程序入口函数
    2. 参数解析器
    3. 日志管理
    4. 定义命令接口
    5. 实现命令接口
    6. 打包为可执行文件

    重点来看看打包环节,看 GraalVM 如何大显身手,可执行文件如何摆脱对 Java 的依赖的。

    GraalVM 提供了 org.graalvm.buildtools:native-maven-plugin 插件构建原生可执行文件。构建流程:

    1. 分析编译后的代码
    2. 获取反射、资源文件、JNI 等信息
    3. 根据配置信息构建原生可执行文件

    运行 java -agentlib:native-image-agent=config-merge-dir=./src/main/resources/META-INF/native-image/config -jar ./target/my-toolbox-fat.jar 生成配置信息,mvn package 即可生产原生可执行文件。

    🎉🎉🎉,就这样我们的工具箱就完成了。

    运行示例:

    $ ~ mytool
    ERROR: Please check tool name
    About: CofCool@ToolBox v1.0.7
    Example: --tool=demo --path=tmp
    Help: --help={COMMAND}, like: --help=rename
    Tools:
        rename: rename file conveniently
        trelloLogseqImporter: read trello backup json file and convert to logseq md file
        shell: run shell command
        dirWebServer: start a simple web directory server
        gitCommits2Log: generate changelog file from git commit log
        kindle: read kindle clipboard file and convert to md file
        json2POJO: convert json structure to POJO class
        link2Tool: convert link file to md
        converts: some simple utilities about string, like base64 encode
    
    mineralsalt
        1
    mineralsalt  
       278 天前
    为什么不用 javafx 做, 也可以 native 编译
    cofcool
        2
    cofcool  
    OP
       278 天前
    命令行更方便一点,更主要的是 GUI 开发比较麻烦、困难,希望大家参与开发帮助它做的更好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   879 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:06 · PVG 05:06 · LAX 14:06 · JFK 17:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.