http://tieba.baidu.com/p/2858195695
↑这篇的再版
重新描述一下这个工具,javafxpackager 在大概是 Java 8 发行的时候改名为 javapackager 包含在 jdk 里,可以用于常规 Java 独立应用程序的打包(包括打包 jre 和附带一个启动器)
如果你正确配置了 jdk,在命令行里使用 javapackager 命令就能看到帮助

演示一下最基本的使用,重新用回之前的例子
public class Test{
public static void main(String[] args){
javax.swing.JOptionPane.showMessageDialog(null, "hello j8");
}
}
保存为Test.java
然后用以下命令编译
mkdir classes
javac *.java -d classes
确认一下程序是可以运行的

之后跟之前一样用 javapackager -createjar 命令生成 jar,不过现在版本的这个命令生成的 jar 似乎没什么特别的
用以下命令打包 jar
javapackager -createjar -appclass Test -srcdir classes -outdir archive -outfile Test.jar
参数说明
-appclass Test
指定应用程序主类,就是 psvm 所在的类
-srcdir classes
指定源目录,这里指定的是我们刚才编译的时候存放 class 文件的目录
-outdir archive
指定输出目录,名字随你喜好
-outfile Test.jar
指定输出文件名,名字随你喜好
这个命令会生成一个能自启动的 jar 文件(即manifest里带了主类信息),确认一下程序还是可以运行的

最后就是重头戏,用javapackager -deploy 打包出可以独立运行的 exe (在windows平台上)
用以下命令打包独立程序
javapackager -deploy -appclass Test -native image -srcdir archive -outdir deploy -outfile Test -Bruntime=$JAVA_HOME/jre
参数说明
-appclass Test
还是指定应用程序主类
-srcdir archive
指定源目录,这里指定的是我们刚才打包存放 jar 文件的目录
-outdir deploy
指定输出目录,名字随你喜好
-outfile Test
指定输出文件名,名字随你喜好
-native image
指定输出的本地程序类型,image 的话只生成一个启动器(exe),也有别的选项可以生成安装程序等等(需要第三方工具)
-Bruntime=$JAVA_HOME/jre
指定打包出来的独立程序使用的 jre 的位置,这里用的是本人的 jdk 自带的 jre,如果你用的是 cmd 的话写成 %JAVA_HOME%\jre
也可以指定别的 jre,但是要小心保证 javapackager 所在的 jdk 和所使用的 jre 的位数相同(即都是32位或都是64位,最好版本也相同,最最好就直接用 jdk 自带的 jre)
关于这个参数和其它的参数的更多的参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javapackager.html
最后确认一下 exe 是可以运行的,你可以在命令行里运行,也可以打开 windows 资源管理器找到 exe 双击运行

把 deploy/bundles/Test 这个目录打包就可以发给别人随意运行了
以前的那些问题应该都不会有了,生成的独立程序目录包含了一些必要的运行环境组件。如果还有不能运行的问题,大概你可能是盗版系统的受害者,或者重新检查一下所使用的 jre 是否正确。
↑这篇的再版
重新描述一下这个工具,javafxpackager 在大概是 Java 8 发行的时候改名为 javapackager 包含在 jdk 里,可以用于常规 Java 独立应用程序的打包(包括打包 jre 和附带一个启动器)
如果你正确配置了 jdk,在命令行里使用 javapackager 命令就能看到帮助

演示一下最基本的使用,重新用回之前的例子
public class Test{
public static void main(String[] args){
javax.swing.JOptionPane.showMessageDialog(null, "hello j8");
}
}
保存为Test.java
然后用以下命令编译
mkdir classes
javac *.java -d classes
确认一下程序是可以运行的

之后跟之前一样用 javapackager -createjar 命令生成 jar,不过现在版本的这个命令生成的 jar 似乎没什么特别的
用以下命令打包 jar
javapackager -createjar -appclass Test -srcdir classes -outdir archive -outfile Test.jar
参数说明
-appclass Test
指定应用程序主类,就是 psvm 所在的类
-srcdir classes
指定源目录,这里指定的是我们刚才编译的时候存放 class 文件的目录
-outdir archive
指定输出目录,名字随你喜好
-outfile Test.jar
指定输出文件名,名字随你喜好
这个命令会生成一个能自启动的 jar 文件(即manifest里带了主类信息),确认一下程序还是可以运行的

最后就是重头戏,用javapackager -deploy 打包出可以独立运行的 exe (在windows平台上)
用以下命令打包独立程序
javapackager -deploy -appclass Test -native image -srcdir archive -outdir deploy -outfile Test -Bruntime=$JAVA_HOME/jre
参数说明
-appclass Test
还是指定应用程序主类
-srcdir archive
指定源目录,这里指定的是我们刚才打包存放 jar 文件的目录
-outdir deploy
指定输出目录,名字随你喜好
-outfile Test
指定输出文件名,名字随你喜好
-native image
指定输出的本地程序类型,image 的话只生成一个启动器(exe),也有别的选项可以生成安装程序等等(需要第三方工具)
-Bruntime=$JAVA_HOME/jre
指定打包出来的独立程序使用的 jre 的位置,这里用的是本人的 jdk 自带的 jre,如果你用的是 cmd 的话写成 %JAVA_HOME%\jre
也可以指定别的 jre,但是要小心保证 javapackager 所在的 jdk 和所使用的 jre 的位数相同(即都是32位或都是64位,最好版本也相同,最最好就直接用 jdk 自带的 jre)
关于这个参数和其它的参数的更多的参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javapackager.html
最后确认一下 exe 是可以运行的,你可以在命令行里运行,也可以打开 windows 资源管理器找到 exe 双击运行

把 deploy/bundles/Test 这个目录打包就可以发给别人随意运行了
以前的那些问题应该都不会有了,生成的独立程序目录包含了一些必要的运行环境组件。如果还有不能运行的问题,大概你可能是盗版系统的受害者,或者重新检查一下所使用的 jre 是否正确。
