自包含的应用程序,内置Java

时间:2017-10-21 06:29:15

标签: java java-9 self-contained java-module

我看过一些在线演示文稿,简要提到了Java 9中的自包含应用程序,但我有一个问题需要我解决。

使用新模块系统,您现在只允许包含运行应用程序所需的最少代码量。但是,希望运行应用程序的系统是否仍然需要JRE,或者是否可以包含在程序中的基本模块中?

我怀疑它是后者,因为下载最新版Java的页面(here)仍显示版本8_151。

TL; DR - 使用Java 9,是否可以创建一个可以在没有安装JRE / Java的系统上执行的自包含可执行文件?

3 个答案:

答案 0 :(得分:10)

JLINK

是的,这可能是with jlinkJEP 282),但您的所有代码您的依赖项都需要是模块化JAR(即具有module-info.class的JAR )。它的工作原理如下:

jlink
    --module-path $JAVA_HOME/jmods:mods
    --add-modules your.app
    --launcher launch-app=your.app
    --output your-app-image

详细说明:

  • --module-path列出包含模块的文件夹 - 这需要包含您要使用的JDK($JAVA_HOME/jmods)附带的平台模块和您的应用程序模块(mods)< / LI>
  • --add-modules命名您希望运行时映像包含的模块 - 包含其所有(其)传递依赖项
  • --launcher是可选的,但非常方便;它创建一个特定于操作系统的启动程序(例如Windows上的.bat),其名称(launch-app)启动指定的模块(your.app;在这种情况下,假设主类已定义对于它)
  • --output指定创建运行时映像的位置

答案 1 :(得分:7)

javapackager

或者,您可以使用 javapackager 工具(JEP 343)。

  

Java打包工具提供对多种格式的内置支持   自包含的应用程序包。

     

基本套餐是单一的   硬盘上包含所有应用程序资源的文件夹   JRE。包可以按原样重新分发,也可以构建一个   可安装包(例如,EXE或DMG格式。)

尽管使用javapackager构建这些应用程序存在某些限制,其中包括 -

  • 必须通过将本机参数传递给Ant任务或javapackager -deploy命令来显式请求自包含的应用程序包。

  • 自包含应用程序包必须构建在要运行它的操作系统上。必须提供必备工具才能以特定格式构建包。

  • 只能使用JDK 7 Update 6或更高版本构建自包含的应用程序包。 JDK 9的Java Packager使用JDK 9运行时映像打包应用程序。要将JDK 8或JDK 7 JRE与您的应用程序打包在一起,请使用JDK 8 Java Packager

创建基本自包含应用程序的一种方法是修改deploy ant任务: -

<fx:deploy width="${javafx.run.width}" height="${javafx.run.height}"
           nativeBundles="all"
           outdir="${basedir}/${dist.dir}" outfile="${application.title}">
    <fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
    <fx:resources>
        <fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>
    </fx:resources>
    <fx:info title="${application.title}" vendor="${application.vendor}"/>
</fx:deploy>

可以使用javapackager命令工具构建本机程序包。用于生成自包含应用程序包的Java Packager命令类似于 -

javapackager -deploy -native -outdir OUTPUT_DIR -outfile APPLICATION_NAME 
    -srcdir PACKAGE_SRC_DIR -srcfiles APPLICATION.jar -appclass MAIN_CLASS
    -name "YourApplication" -title "SelfContained"

答案 2 :(得分:0)

这对我有用。 它在应用程序文件夹中包含JRE并创建一个可执行文件。 我将文件java文件放在src文件夹中,并且此命令编译并创建了一个带有可执行文件的dist文件夹。

javapackager -makeall -name WordAnalyzer_app -appclass queue.Gui
pause