clj.native-image

授权协议 MIT License
开发语言 JavaScript
所属分类 应用工具、 终端/远程登录
软件类型 开源软件
地区 不详
投 递 者 柴嘉年
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

clj.native-image

Build GraalVM native images using Clojure Deps and CLI tools.

This should be useful for creating lightweight, native CLI executables using Clojure and deps.edn.See clj.native-cli for a starter project template.

This project depends on tools.deps.alpha and should be considered alpha itself.

Prerequisites

  • Clojure CLI tools

  • GraalVM

    NOTE: As of GraalVM 19.0.0, native-image is no longer included by default:

    Native Image was extracted from the base GraalVM distribution. Currently it is available as an early adopter plugin. To install it, run: gu install native-image. After this additional step, the native-image executable will be in the bin directory, as for the previous releases.

    ➜ $GRAALVM_HOME/bin/gu install native-image
    Downloading: Component catalog from www.graalvm.org
    Processing component archive: Native Image
    Downloading: Component native-image: Native Image  from github.com
    Installing new component: Native Image licence files (org.graalvm.native-image, version 19.0.0)
    

Usage

Assuming a project structure like this:

.
├── deps.edn
└── src
    └── core.clj

In your deps.edn specify an alias with a dependency on clj.native-image:

{:aliases {:native-image
           {:main-opts ["-m" "clj.native-image" "core"
                        "--initialize-at-build-time"
                        ;; optional native image name override
                        "-H:Name=core"]
            :jvm-opts ["-Dclojure.compiler.direct-linking=true"]
            :extra-deps
            {clj.native-image/clj.native-image
             {:git/url "https://github.com/taylorwood/clj.native-image.git"
              :sha "7708e7fd4572459c81f6a6b8e44c96f41cdd92d4"}}}}}

Where core.clj is a class with -main entrypoint, for example:

(ns core
  (:gen-class))
(defn -main [& args]
  (println "Hello, World!"))

From your project directory, invoke clojure with the native-image alias, specifying the main namespace(core in example above):

➜ clojure -A:native-image
Loading core
Compiling core
Building native image 'core' with classpath 'classes:src:etc.'

   classlist:   1,944.26 ms
   8<----------------------
     [total]:  38,970.37 ms

Note: Either GRAALVM_HOME environment variable must be set, or GraalVM's native-image path must be passed as an argument,and any additional argumentswill be passed to native-image e.g.:

➜ clojure -A:native-image --verbose

You can now execute the native image:

➜ ./core
Hello, World!

See this Gist for another example.

Example Projects

There are example deps.edn projects in the lein-native-image repo:

  • jdnsmith - CLI JSON-to-EDN transformer
  • http-api - simple HTTP API server
  • clojurl - cURL-like tool using clojure.spec, HTTPS, hiccup

Caveats

The --no-server flag is passed to native-image by default, to avoid creating orphaned build servers.

Also see caveats section of lein-native-image.

References

GraalVM Native Image AOT Compilation

This project was inspired by depstar.

Contributing

You'll need Clojure CLI tooling and GraalVM installed to test locally.Just change the source of the clj.native-image dependency to a :local/root instead of :git/url.

Issues, PRs, and suggestions are welcome!

License

Copyright © 2018 Taylor Wood.

Distributed under the MIT License.

 相关资料
  • 问题内容: 我可能尝试过,没有用。 该文件是: 是软件包的名称。 当我位于包含build.xml的项目中时,我启动了ant 这是我测试过的代码: 我制定了一份遗嘱,有或没有,有或没有 希望有人能帮助我。 谢谢 问题答案: 如果您具有以下包装布局 那么以下应该工作 使用时,您需要传递资源的完整合格名称,即包括程序包名称。 当使用时,路径-如果不是以- 开头,则是相对于试图加载资源的类所在的包的路径,

  • 问题内容: 我想以 编程方式 删除ImageButton中的灰色背景。我尝试了多种删除方法,例如- 但是在实现它们时,我在触摸时不会在ImageButton上产生涟漪效果。(触摸时不突出显示)。 有什么方法可以消除背景但保留波纹效果或高光。 问题答案: 如果这个方法比我认为的有效,那么应该可以解决您的问题: http://codingdict.com/questions/141119

  • 问题内容: 我一周前开始使用Java,现在我想在窗口中插入一个图像。无论我尝试什么,我都会在Eclipse中继续使用它: javax.imageio.IIOException:无法读取输入文件! } 我认为代码很容易解释。我试图解决这个问题 我想做的是一个桌面程序,我的源代码存储如下:training / src / graphics / Window training / src / src /

  • 问题内容: 我正在使用Swing创建UI,我想在中显示图像。我使用的代码如下: 如果我使用图像,则效果很好,但涉及到(仅其中一些)图像,则图像变红(与Paint.NET中看到的图像不同)。我使用的图像是这样的:img.jpg 因此,我尝试(作为替代方法): 有谁知道为什么会这样吗?它是不受支持的特殊格式吗? 我在这个论坛上读到,大多数人建议使用ImageIO(例如在这里)。为什么? 非常感谢 问题

  • 问题内容: 我有一个位图文件,可以使用经过测试的每个图像查看器进行查看和编辑。 也就是说,我无法将其读入Java应用程序。如果我在MS Paint中编辑BMP,保存,撤消更改并保存(),则我具有相同的图像,但文件大小不同。不同的文件大小与我无关…什么是我的应用程序可以读取重新保存的文件。 谁能启发我为什么一个图像可以与我的代码一起使用,而另一个图像却不能呢? 图像文件: test3.bmp tes

  • 问题内容: 首先,我想解释一下导致这个问题的情况/要求: 在我们的Web应用程序中,由于IE 8及更低版本无法显示它们,因此我们不支持CMYK图像(JPEG)。因此,我们需要检测何时有人要上传此类图像并拒绝它。 不幸的是,Java的ImageIO无法读取这些图像,或者使我无法获得检测到的色彩空间。通过调试,似乎在内部获得了颜色空间代码11(这意味着),但是我无法安全地访问该信息。 当向阅读器查询图