首页 > 解决方案 > 将 Gradle 构建文件导出到 java 应用程序

问题描述

我的 Java 应用程序依赖于第三方应用程序(特别是 Firefox)。我没有尝试将安装与存储库捆绑在一起(这会占用大量空间并阻止我上传到 GitHub),而是让我的 gradle build 下载安装程序并在构建时安装 Firefox。

task downloadWindows_x86_64(type: Download) {
    src "https://download-installer.cdn.mozilla.net/pub/${firefox_module}/releases/${firefox_revision}/win64/en-US/Firefox%20Setup%20${firefox_revision}.msi"
    dest layout.buildDirectory.file("installer.msi")
    overwrite false
    onlyIfModified true
}

task installWindows_x86_64(dependsOn: downloadWindows_x86_64, type: Exec) {
    workingDir layout.buildDirectory
    commandLine 'msiexec', '/i', '"' + downloadWindows_x86_64.dest + '"', '/li', '"install.log"', '/qb', 'INSTALL_DIRECTORY_PATH="' + layout.buildDirectory.dir("browser").get().asFile + '"', 'TASKBAR_SHORTCUT=false', 'DESKTOP_SHORTCUT=false', 'INSTALL_MAINTENANCE_SERVICE=false'
    outputs.dir(layout.buildDirectory.dir("browser").get().asFile)
}

processResources.finalizedBy installWindows_x86_64

但是,我有点难以找到一种优雅的方式来让我的 Java 应用程序以一种适用于开发和部署的方式查看此安装。我不能完全将安装添加到资源中,因为这会导致安装被压缩到 .jar 文件中,我怀疑它会从那里运行。我可能可以将应用程序安装到项目文件夹,然后将依赖项添加到 installDist、distZip 和 distTar 任务以捆绑该安装(因此允许我使用new File(System.getProperty("user.dir"), "browser/firefox.exe")),但这并没有真正让我觉得优雅。我也尝试在构建中设置环境变量,但没有结果

installWindows_x86_64.finalizedBy {
    environment 'universal_browser', outputs.files.singleFile.toString()
    println "Installed browser to " + System.getenv('universal_browser')
}
// Both this print and the ones in the application see only null for the environmental variable

有没有我缺少的技术?

标签: javagradleexe

解决方案


推荐阅读