Java jar jpackage
Java jar jpackage
综述
jar
Gradle处理依赖jar包类库:
jar {
//manifest { attributes('Main-Class': application.mainClass) } // 未指定--main-class时设置
//from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
doLast { // 如果不包裹doLast,jar包内会缺失*.class等。
copy {
from configurations.runtimeClasspath
into jar.destinationDirectory.asFile.get() // 混淆则另选目录 into "$buildDir/release-files/"
}
}
}
jpackage
亲测 - 打包后app.exe不被Windows Defender报毒,但app.msi则报毒删除。
jpackage打包用法
C:\Progra~1\Java\jdk-21\bin\jpackage --input C:\Users\aw\Documents\NetBeansProjects\jpkg\app\build\libs\ --main-jar app.jar --main-class com.jpkg.App
其他参数:--win-console 显示控制台日志; --verbose 显示详细信息;--type dmg 在 Java 25 亲测只能运行在 macOS 系统。
Gradle命令行方式打包:
version="0.0.1"
task jpackage(type: Exec) {
dependsOn jar //["jar","myProguardTask"]
// C:\Users\aw\AppData\Local\Temp\ComeInHandy\
def appTempPath = "${System.getProperty('java.io.tmpdir')}ComeInHandy/";
def cmd = ["${javaHome}/bin/jpackage",
"--name", "得心应手","--install-dir","ComeInHandy",
'--dest', "${appTempPath}",
'--input', jar.destinationDirectory.get(),
'--main-jar', jar.archiveFileName.get(),
'--main-class', 'com.openle.v1app.comeinhandy.App',
'--win-console', // 显示控制台日志
'--verbose']
println cmd.join(" ")
commandLine cmd
}