JavaFX 使用 xjar 加密并且打包成 exe安装运行

记录一下(针对 Windows 的加密、打包、安装、运行)
一般都很少人会使用 JavaFX 去写桌面程序,但是因为某些原因,不得不使用,并且还需要对外发布安装包。为了防止代码被看到(因为 jar 包是类似于压缩包,解压就能看到全部内容),所以使用了 xjar 进行加密。
xjar_github
首先按照 github 的 readme 将 jar 包引入,并且增加 xjar-plugin。

// 打包命令
mvn clean package -Dxjar.password=自定义的密码

打包后,会出现一个 xjar.go 文件,这个文件就是执行文件,通过该文件去执行 java -jar ***.xjar 去运行 jar包,从而将加密后的 javafx 程序运行起来

maven 打包后,target 目录下有几个关键文件

  • ***.jar -- 未加密的 jar 包
  • ***.xjar -- 加密后的 jar 包
  • xjar.go -- 真正执行文件

这个时候的运行命令是 xjar.go java -jar ***.xjar

此时,还需要将这些文件打包成安装包,并且需要有一个可执行文件用来安装后运行。
因为 xjar.go 是真正运行文件,所以就需要将 xjar.go 编译成 .exe 文件,这个可以使用 go 官方的命令
go build (go build 具体参数不写了,如果需要打包其他相关文件到同一个exe,还有图标等,百度都有)

如果需要 go 编译后的 .exe 文件能直接运行,而不是执行上述命令(双击 .exe 文件直接运行)
则需要对 maven 打包出的 xjar.go 做亿点点改造(本机没 xjar.go 文件了,所以直接文字说明吧)

通过观察 xjar.go 文件发现,内部是通过调用 cmd 命令行来直接执行 java -jar ***.xjar 的。
具体的入口在 main() 方法,里面会拿到传入的参数(就是 java -jar ***.xjar),这三个参数,然后去调用后续方法。

  1. 首先将第一个参数 java 拿出来,作为执行命令
  2. 后面的参数作为 java 命令的执行参数,如果要设置某些如 -Xmx 这些,则放在第一个参数后面,倒数第一、第二个参数前面
  3. 倒数第二个参数会作为 -jar,如果不是会报错
  4. 倒数第一个参数就是执行的 xjar
// 这是生成 xjar.go 中获取 jar 包名称的方法,会直接寻找 -jar 参数的下一个参数作为执行的 jar 包名称
// find jar name from args
func JAR(args []string) (string, error) {
    var jar string

    l := len(args)
    for i := 1; i < l-1; i++ {
        arg := args[i]
        if arg == "-jar" {
            jar = args[i+1]
        }
    }
    if jar == "" {
        return "", errors.New("unspecified jar name")
    }
    return jar, nil
}

因为默认参数是要自己传的(看xjar.go java -jar ***.xjar能看出来),所以为了让直接执行 xjar.go 能有这种效果,则直接修改生成的 xjar.go 文件

main()入口处,直接写死运行命令,将main()方法传入的 args[] 手动赋值

  1. 把 args[0] 赋值成 java
  2. 后续的赋值成启动参数
  3. 最后两个为 -jar***.xjar
    上述操作完成后,运行 xjar.go 就能直接启动 jar包了,但是这个时候发现会弹出 cmd 窗口来执行,所以还要隐藏
将 xjar.go 打包成 exe 的命令换成 go build  -ldflags="-H windowsgui"
// 并且在这行代码下添加下面那行代码
cmd := exec.Command(java, args...)
// 添加的代码
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}

这个实现运行打包后的 xjar.exe就能隐藏弹窗直接启动 jar 包了

最后就是使用 inno setup 打包成安装包了。
具体执行文件直接选 xjar.exe 那个文件,这个文件自己修改名称。xjar 包和其他需要的文件夹也一起打包进去,为加密的 Jar 包就不需要了。具体的打包方法直接百度就好了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容