java吧 关注:1,252,088贴子:12,739,501
  • 29回复贴,共1

【技术淼】新·用javapackager打包本地程序(exe)

只看楼主收藏回复

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 是否正确。


IP属地:广西1楼2015-12-10 15:24回复
    2L


    IP属地:加拿大2楼2015-12-10 15:29
    收起回复
      大神


      来自iPhone客户端3楼2015-12-10 17:07
      收起回复
        我只关心它打包出来是多大 是只打包用到的 还是整个jre都进去了


        IP属地:湖北4楼2015-12-10 17:30
        收起回复
          额,不好玩。


          IP属地:新疆来自Android客户端5楼2015-12-10 18:02
          回复
            可盗版用户多


            IP属地:广东来自Android客户端6楼2015-12-10 18:02
            收起回复
              什么mingw64是什么鬼


              IP属地:新疆来自Android客户端7楼2015-12-10 18:14
              收起回复
                我大IDEA有这个打包的向导.
                可以打包javafx和普通的


                IP属地:广东8楼2015-12-10 18:14
                收起回复
                  大神⊙▽⊙


                  IP属地:上海来自Android客户端9楼2015-12-10 18:21
                  回复
                    大神


                    IP属地:广东来自Android客户端10楼2015-12-10 18:24
                    收起回复
                      大神,


                      IP属地:山东11楼2015-12-31 08:50
                      收起回复
                        大神


                        IP属地:湖北来自Android客户端12楼2015-12-31 08:58
                        收起回复