几年来,我一直在每年发布适度应用程序的更新 - 就在夏季游泳联盟开始之前。
过去,我已将各种图标(音量,应用等)放在package/macosx/
文件夹中。文件名MyApp-volume.icns
等与<fx:application name="MyApp" .../>
匹配,一切正常。
但从今年的构建和部署开始,应用程序的名称将包含年份 - 即MyApp 2016
。但是,我不想每年更改图标文件名;我希望保持原样(MyApp-volume.icns
,MyApp.icns
)。
有没有办法告诉Java打包程序使用特定的图标文件名,一个与应用程序名称或标题不同的文件名? (我查看了Oracle文档,但我没有看到任何内容。)
答案 0 :(得分:0)
-Bicon=<path to icon relative to project resourses>
这就是你要找的东西吗?
或者您可以将其添加到主应用Stage
。
希望它有用
答案 1 :(得分:0)
正如我在对我的问题的第一次评论中写的那样,javapackager没有选择这样做。
以下是我制定的解决方案:
在与文件夹package
相同的级别创建一个新文件夹(这不是指Java package
,而是指Custom Resources)。将新文件夹命名为package-base
。
将macosx
和windows
个文件夹从package
移至package-base
。 (我不会为Linux生成可执行文件,因为我的用户都没有使用Linux。)现在,package
文件夹为空。
在我的构建脚本中,我添加了一个步骤,对于每个构建一个自包含的应用程序包&#34; (Oracle的术语),清除package
文件夹,然后将package-base
的内容复制到package
。
文件在复制时被重命名,以包含所需的措辞 - 在我的情况下,这意味着年份附加到文件名。例如,复制时MyApp-volume.icns
重命名为MyApp-2018-volume.icns
。
以下是相关的Gradle片段:
import org.gradle.internal.os.OperatingSystem
...
def getYear() {
new Date().format('yyyy')
}
...
ext {
...
year = getYear()
appNameBase = "MyApp"
appName = appNameBase + " " + year
...
}
...
task macCleanPackage {
doLast {
if (OperatingSystem.current().isMacOsX()) {
delete fileTree(dir: "./package/macosx", include: "*.*")
}
}
}
task macCopyAndRenamePackageResources {
dependsOn macCleanPackage
doLast {
if (OperatingSystem.current().isMacOsX()) {
def toDir = "./package/macosx"
copy {
from './package-base/macosx'
into "${toDir}"
include "*${appNameBase}*.*"
rename { String fileName -> fileName.replace("$appNameBase", "${appName}") }
}
ant.replaceregexp(file: "${toDir}/${appName}-dmg-setup.scpt", match:"${appNameBase}", replace:"${appName}", flags:'g')
}
}
}
task windowsCleanPackage {
doLast {
if (OperatingSystem.current().isWindows()) {
delete fileTree(dir: "package/windows", includes: ["*.bmp", "*.ico", "*.iss"])
}
}
}
task windowsCopyAndRenamePackageResources {
dependsOn windowsCleanPackage
doLast {
if (OperatingSystem.current().isWindows()) {
def toDir = "./package/windows"
copy {
from './package-base/windows'
into "${toDir}"
include "*${appNameBase}*.*"
rename { String fileName -> fileName.replace("$appNameBase", "${appName}") }
}
// Replace app name in iss setup script to include year.
def issFilename = "./package/windows/${appName}.iss"
ant.replaceregexp(file: "${issFilename}", match: "${appNameBase}", replace: "${appName}", flags: "g")
ant.replaceregexp(file: "${issFilename}", match: "AppCopyright=Copyright (C)", replace: "AppCopyright=Copyright (C) ${year}", byline: "on")
ant.replaceregexp(file: "${issFilename}", match: "AppVersion=", replace: "AppVersion=${year} build ${buildNumber}", byline: "on")
ant.replaceregexp(file: "${issFilename}", match: "OutputBaseFilename=.*", replace: "OutputBaseFilename=${appName}-(build ${buildNumber})", byline: "on")
}
}
}
我不会只是更改文件名。
对于OS X版本,ant.replaceregexp
用于修改自定义AppleScript文件中的应用程序名称。
对于Windows版本,ant.replaceregexp
广泛用于替换InnoSetup配置文件中的版本号,版权以及应用程序的名称(包括年份)。
这可能看起来像是一项额外的工作,但是一旦编写了脚本,它就会起作用。