def compile_target_compatibility
ext {
- // where the getdown channel will be built.
- // TODO: consider allowing this expression to be overridden by -P arg
getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir + '/' + JAVA_VERSION
+ getdownDir = ""
+ reportRsyncCmd = false
+ buildDist = true
+ buildProperties = buildPropertiesFile
+ switch (CHANNEL) {
+
+ case "BUILD":
+ // TODO: get bamboo build artifact URL for getdown artifacts
+ getdown_app_dir = getdown_app_dir_alt
+ buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+ break
+
+ case "RELEASE":
+ getdown_channel_name = CHANNEL.toLowerCase()
+ getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+ getdown_app_base = getdown_channel_base + "/" + getdownDir
+ getdown_app_dir = getdown_app_dir_release
+ buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+ reportRsyncCommand = true
+ break
+
+ case "ARCHIVE":
+ getdown_channel_name = CHANNEL.toLowerCase()+"/"+JALVIEW_VERSION
+ getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+ getdown_app_base = getdown_channel_base + "/" + getdownDir
+ getdown_app_dir = getdown_app_dir_alt
+ if (!file(ARCHIVEDIR+"/"+packageDir).exists()) {
+ print "Must provide an ARCHIVEDIR value to produce an archive distribution"
+ exit
+ } else {
+ packageDir = ARCHIVEDIR + "/" + packageDir
+ buildProperties = ARCHIVEDIR +"/" + classesDir + "/" + buildPropertiesFile
+ buildDist = false
+ }
+ reportRsyncCommand = true
+ break
+
+ case "ARCHIVELOCAL":
+ getdown_channel_name = "archive" + "/" + JALVIEW_VERSION
+ getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+ getdown_app_base = file(getdownWebsiteDir).toURI().toString()
+ getdown_app_dir = getdown_app_dir_alt
+ if (!file(ARCHIVEDIR+"/"+packageDir).exists()) {
+ print "Must provide an ARCHIVEDIR value to produce an archive distribution"
+ exit
+ } else {
+ packageDir = ARCHIVEDIR + "/" + packageDir
+ buildProperties = ARCHIVEDIR +"/" + classesDir + "/" + buildPropertiesFile
+ buildDist = false
+ }
+ reportRsyncCommand = true
+ break
+
+ case "DEVELOP":
+ getdown_channel_name = CHANNEL.toLowerCase()
+ getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+ getdown_app_base = getdown_channel_base + "/" + getdownDir
+ getdown_app_dir = getdown_app_dir_alt
+ buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+ reportRsyncCommand = true
+ break
+
+ case "TEST-RELEASE":
+ getdown_channel_name = CHANNEL.toLowerCase()
+ getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+ getdown_app_base = getdown_channel_base + "/" + getdownDir
+ getdown_app_dir = getdown_app_dir_alt
+ buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+ reportRsyncCommand = true
+ break
+
+ case ~/^SCRATCH(|-\w*)$/:
+ getdown_channel_name = CHANNEL
+ getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+ getdown_app_base = getdown_channel_base + "/" + getdownDir
+ getdown_app_dir = getdown_app_dir_alt
+ buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+ reportRsyncCommand = true
+ break
+
+ case "LOCAL":
+ getdown_app_base = file(getdownWebsiteDir).toURI().toString()
+ getdown_app_dir = getdown_app_dir_alt
+ buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+ break
+
+ default: // something wrong specified
+ print("CHANNEL must be one of BUILD, RELEASE, ARCHIVE, DEVELOP, TEST-RELEASE, SCRATCH-..., LOCAL [default]")
+ exit
+ break
+
+ }
+
+ println("Using a "+CHANNEL+" profile. appbase="+getdown_app_base)
getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir
//getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir
getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir
+ getdownInstallDir = getdownWebsiteDir + '/' + getdown_install_dir
getdownLauncher = jalviewDir + '/' + getdown_launcher
getdownFilesDir = jalviewDir + '/' + getdown_files_dir + '/' + JAVA_VERSION + '/'
- getdown_app_base = getdown_channel_base+"/"+getdown_channel_name+"/"+JAVA_VERSION+"/"
+ getdownFilesInstallDir = getdownFilesDir+"/"+getdown_install_dir
modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"])
modules_runtimeClasspath = modules_compileClasspath
gitHash = ""
getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location
eclipse_java_runtime_name = "JavaSE-11"
additional_compiler_args += [
- '--module-path', ext.modules_compileClasspath.asPath,
- '--add-modules', j11modules
+ '--module-path', ext.modules_compileClasspath.asPath,
+ '--add-modules', j11modules
]
} else if (JAVA_VERSION.equals("12") || JAVA_VERSION.equals("13")) {
JAVA_INTEGER_VERSION = JAVA_VERSION
getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location
eclipse_java_runtime_name = "JavaSE-11"
additional_compiler_args += [
- '--module-path', ext.modules_compileClasspath.asPath,
- '--add-modules', j11modules
+ '--module-path', ext.modules_compileClasspath.asPath,
+ '--add-modules', j11modules
]
} else {
throw new GradleException("JAVA_VERSION=$JAVA_VERSION not currently supported by Jalview")
} else {
compileClasspath += files(sourceSets.main.java.outputDir)
}
-
+
compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
name = "Jalview with gradle build"
natures 'org.eclipse.jdt.core.javanature',
- 'org.eclipse.jdt.groovy.core.groovyNature',
- 'org.eclipse.buildship.core.gradleprojectnature'
+ 'org.eclipse.jdt.groovy.core.groovyNature',
+ 'org.eclipse.buildship.core.gradleprojectnature'
buildCommand 'org.eclipse.jdt.core.javabuilder'
buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'
//defaultOutputDir = sourceSets.main.java.outputDir
def removeThese = []
configurations.each{ if (it.isCanBeResolved()) {
- removeThese += it
- }
+ removeThese += it
}
+ }
- minusConfigurations += removeThese
- plusConfigurations = [ ]
- file {
-
- whenMerged { cp ->
- def removeTheseToo = []
- HashMap<String, Boolean> addedSrcPath = new HashMap<>();
- cp.entries.each { entry ->
- if (entry.kind == 'src') {
- if (addedSrcPath.getAt(entry.path) || !(entry.path == "src" || entry.path == "test")) {
- removeTheseToo += entry
- } else {
- addedSrcPath.putAt(entry.path, true)
- }
- }
- }
- cp.entries.removeAll(removeTheseToo)
-
- print ("CP="+cp.inspect())
-
- cp.entries += new Output("bin/main")
- cp.entries += new Library(fileReference(helpParentDir))
- cp.entries += new Library(fileReference(resourceDir))
-
- HashMap<String, Boolean> addedLibPath = new HashMap<>();
-
- // changing from sourcesets.main.classpath to specific Java version lib
- //sourceSets.main.compileClasspath.each{
- fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").each {
- //don't want to add outputDir as eclipse is using its own output dir in bin/main
- if (it.isDirectory() || ! it.exists()) {
- // don't add dirs to classpath
- return
- }
- def itPath = it.toString()
- if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
- itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
- }
- if (addedLibPath.get(itPath)) {
- //println("Not adding duplicate entry "+itPath)
+ minusConfigurations += removeThese
+ plusConfigurations = [ ]
+ file {
+
+ whenMerged { cp ->
+ def removeTheseToo = []
+ HashMap<String, Boolean> addedSrcPath = new HashMap<>();
+ cp.entries.each { entry ->
+ if (entry.kind == 'src') {
+ if (addedSrcPath.getAt(entry.path) || !(entry.path == "src" || entry.path == "test")) {
+ removeTheseToo += entry
} else {
- //println("Adding entry "+itPath)
- cp.entries += new Library(fileReference(itPath))
- addedLibPath.put(itPath, true)
+ addedSrcPath.putAt(entry.path, true)
}
}
+ }
+ cp.entries.removeAll(removeTheseToo)
- // changing from sourcesets.main.classpath to specific Java version lib
- //sourceSets.test.compileClasspath.each{
- fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]).each {
- //if ((it.isDirectory() || ! it.exists()) && ! (it.equals(sourceSets.main.java.outputDir))) {
- //no longer want to add outputDir as eclipse is using its own output dir in bin/main
- if (it.isDirectory() || ! it.exists()) {
- // don't add dirs to classpath
- return false // groovy "break" in .each loop
- }
- def itPath = it.toString()
- if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
- itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
- }
- if (addedLibPath.get(itPath)) {
- // don't duplicate
- } else {
- def lib = new Library(fileReference(itPath))
- // this doesn't work... yet. Adding test=true attribute using withXml below
- //def attrs = new Node(null, 'attributes', ["test":"true"])
- //lib.appendNode(attrs) //
- cp.entries += lib
- addedLibPath.put(itPath, true)
- }
+ print ("CP="+cp.inspect())
+
+ cp.entries += new Output("bin/main")
+ cp.entries += new Library(fileReference(helpParentDir))
+ cp.entries += new Library(fileReference(resourceDir))
+
+ HashMap<String, Boolean> addedLibPath = new HashMap<>();
+
+ // changing from sourcesets.main.classpath to specific Java version lib
+ //sourceSets.main.compileClasspath.each{
+ fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").each {
+ //don't want to add outputDir as eclipse is using its own output dir in bin/main
+ if (it.isDirectory() || ! it.exists()) {
+ // don't add dirs to classpath
+ return
+ }
+ def itPath = it.toString()
+ if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
+ itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
}
- }
+ if (addedLibPath.get(itPath)) {
+ //println("Not adding duplicate entry "+itPath)
+ } else {
+ //println("Adding entry "+itPath)
+ cp.entries += new Library(fileReference(itPath))
+ addedLibPath.put(itPath, true)
+ }
+ }
+
+ // changing from sourcesets.main.classpath to specific Java version lib
+ //sourceSets.test.compileClasspath.each{
+ fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]).each {
+ //if ((it.isDirectory() || ! it.exists()) && ! (it.equals(sourceSets.main.java.outputDir))) {
+ //no longer want to add outputDir as eclipse is using its own output dir in bin/main
+ if (it.isDirectory() || ! it.exists()) {
+ // don't add dirs to classpath
+ return false // groovy "break" in .each loop
+ }
+ def itPath = it.toString()
+ if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
+ itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
+ }
+ if (addedLibPath.get(itPath)) {
+ // don't duplicate
+ } else {
+ def lib = new Library(fileReference(itPath))
+ // this doesn't work... yet. Adding test=true attribute using withXml below
+ //def attrs = new Node(null, 'attributes', ["test":"true"])
+ //lib.appendNode(attrs) //
+ cp.entries += lib
+ addedLibPath.put(itPath, true)
+ }
+ }
+ }
// withXml changes ignored by buildship, these add the "test=true" attribute
withXml {
def node = it.asNode()
-
+
def srcTestAttributes
node.children().each{ cpe ->
def attributes = cpe.attributes()
def attributes = cpe.attributes()
if (attributes.get("kind") == "lib" && attributes.get("path").startsWith("utils/")) {
cpe.appendNode('attributes')
- .appendNode('attribute', [name:"test", value:"true"])
+ .appendNode('attribute', [name:"test", value:"true"])
}
}
} // withXML
}
}
}
-
+
//synchronizationTasks eclipseClasspath
//autoBuildTasks eclipseClasspath
-}
+}
task cloverInstr() {
// only instrument source, we build test classes as normal
doFirst {
delete cloverInstrDir
def argsList = ["--initstring", "${buildDir}/clover/clover.db",
- "-d", "${buildDir}/${cloverSourcesInstrDir}"]
+ "-d", "${buildDir}/${cloverSourcesInstrDir}"]
argsList.addAll(inputs.files.files.collect({ file ->
file.absolutePath
}))
com.atlassian.clover.CloverInstr.mainImpl(args)
}
}
-
+
task cloverReport {
group = "Verification"
- description = "Createst the Clover report"
- inputs.dir "${buildDir}/clover"
- outputs.dir "${reportsDir}/clover"
- onlyIf {
- file("${buildDir}/clover/clover.db").exists()
- }
+ description = "Createst the Clover report"
+ inputs.dir "${buildDir}/clover"
+ outputs.dir "${reportsDir}/clover"
+ onlyIf {
+ file("${buildDir}/clover/clover.db").exists()
+ }
doFirst {
def argsList = ["--initstring", "${buildDir}/clover/clover.db",
- "-o", "${reportsDir}/clover"]
+ "-o", "${reportsDir}/clover"]
String[] args = argsList.toArray()
com.atlassian.clover.reporters.html.HtmlReporter.runReport(args)
// and generate ${reportsDir}/clover/clover.xml
args = ["--initstring", "${buildDir}/clover/clover.db",
- "-o", "${reportsDir}/clover/clover.xml"].toArray()
+ "-o", "${reportsDir}/clover/clover.xml"].toArray()
com.atlassian.clover.reporters.xml.XMLReporter.runReport(args)
}
}
inputs.dir("$jalviewDir/$sourceDir")
inputs.dir("$classes")
inputs.dir("$jalviewDir/$resourceDir")
- outputFile "$classes/$buildPropertiesFile"
+ outputFile (buildProperties)
// taking time specific comment out to allow better incremental builds
comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss")
//comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
def outputDir = "$classes/$helpDir"
from(inputDir) {
exclude '**/*.gif'
- exclude '**/*.jpg'
- exclude '**/*.png'
- filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION])
+ exclude '**/*.jpg'
+ exclude '**/*.png'
+ filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION])
}
from(inputDir) {
include '**/*.gif'
- include '**/*.jpg'
- include '**/*.png'
+ include '**/*.jpg'
+ include '**/*.png'
}
into outputDir
dependsOn cloverInstr
}
- print("Running tests " + (use_clover?"WITH":"WITHOUT") + " clover [clover="+use_clover+"]\n")
+ if (use_clover) {
+ print("Running tests " + (use_clover?"WITH":"WITHOUT") + " clover [clover="+use_clover+"]\n")
+ }
useTestNG() {
includeGroups testngGroups
shadowJar {
group = "distribution"
- dependsOn makeDist
+ if (buildDist) {
+ dependsOn makeDist
+ }
from ("$jalviewDir/$libDistDir") {
include("*.jar")
}
+ manifest {
+ attributes 'Implementation-Version': JALVIEW_VERSION
+ }
mainClassName = shadowJarMainClass
mergeServiceFiles()
- classifier = "all-"+JAVA_VERSION
+ classifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION
minimize()
}
task getdownWebsite() {
group = "distribution"
description = "Create the getdown minimal app folder, and website folder for this version of jalview. Website folder also used for offline app installer"
- dependsOn makeDist
+ if (buildDist) {
+ dependsOn makeDist
+ }
+
+ // clean the getdown website and files dir before creating getdown folders
+ delete project.ext.getdownWebsiteDir
+ delete project.ext.getdownFilesDir
+
def getdownWebsiteResourceFilenames = []
def getdownTextString = ""
def getdownResourceDir = project.ext.getdownResourceDir
def getdownAppDir = project.ext.getdownAppDir
def getdownResourceFilenames = []
+
doFirst {
+ copy {
+ from buildProperties
+ rename(buildPropertiesFile, getdown_build_properties)
+ into project.ext.getdownWebsiteDir
+ }
+ getdownWebsiteResourceFilenames += getdown_build_properties
+
// go through properties looking for getdown_txt_...
def props = project.properties.sort { it.key }
props.put("getdown_txt_java_min_version", getdown_alt_java_min_version)
props.put("getdown_txt_multi_java_location", getdown_alt_multi_java_location)
- if (getdown_local == "true") {
- getdown_app_base = file(getdownWebsiteDir).toURI().toString()
- }
props.put("getdown_txt_appbase", getdown_app_base)
props.each{ prop, val ->
if (prop.startsWith("getdown_txt_") && val != null) {
}
} else {
// file values rationalised
- if (val.indexOf('/') > -1) {
+ if (val.indexOf('/') > -1 || prop.startsWith("getdown_txt_resource")) {
def r = null
if (val.indexOf('/') == 0) {
// absolute path
getdownResourceFilenames += r.getPath()
}
}
- def line = prop.substring(12) + " = " + val + "\n"
- getdownTextString += line
+ if (! prop.startsWith("getdown_txt_resource")) {
+ def line = prop.substring(12) + " = " + val + "\n"
+ getdownTextString += line
+ }
}
}
}
}
def codeFiles = []
- makeDist.outputs.files.each{ f ->
+ fileTree(file(packageDir)).each{ f ->
if (f.isDirectory()) {
def files = fileTree(dir: f, include: ["*"]).getFiles()
codeFiles += files
// NOT USING MODULES YET, EVERYTHING SHOULD BE IN dist
/*
- if (JAVA_VERSION.equals("11")) {
- def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles()
- j11libFiles.sort().each{f ->
- def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n"
- getdownTextString += line
- copy {
- from f.getPath()
- into project.ext.getdownJ11libDir
- }
- }
- }
+ if (JAVA_VERSION.equals("11")) {
+ def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles()
+ j11libFiles.sort().each{f ->
+ def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n"
+ getdownTextString += line
+ copy {
+ from f.getPath()
+ into project.ext.getdownJ11libDir
+ }
+ }
+ }
*/
// getdown-launcher.jar should not be in main application class path so the main application can move it when updated. Listed as a resource so it gets updated.
def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt")
getdown_txt.write(getdownTextString)
- copy {
- from getdown_txt
- into project.ext.getdownFilesDir
- }
+ def launch_jvl = file(project.ext.getdownWebsiteDir + "/" + getdown_launch_jvl)
+ launch_jvl.write("appbase="+props.get("getdown_txt_appbase"))
copy {
from getdownLauncher
- into project.ext.getdownWebsiteDir
rename(file(getdownLauncher).getName(), getdown_launcher_new)
+ into project.ext.getdownWebsiteDir
}
copy {
from getdownLauncher
- into project.ext.getdownFilesDir
+ into project.ext.getdownWebsiteDir
+ }
+
+ if (! (CHANNEL.startsWith("ARCHIVE") || CHANNEL.startsWith("DEVELOP"))) {
+ copy {
+ from getdown_txt
+ from getdownLauncher
+ from getdownWebsiteDir+"/"+getdown_build_properties
+ into getdownInstallDir
+ }
+
+ copy {
+ from getdownInstallDir
+ into getdownFilesInstallDir
+ }
}
copy {
+ from getdown_txt
+ from launch_jvl
from getdownLauncher
- into project.ext.getdownWebsiteDir
+ from getdownWebsiteDir+"/"+getdown_build_properties
+ into getdownFilesDir
}
copy {
- from jalviewDir + '/' + project.getProperty('getdown_txt_ui.background_image')
- from jalviewDir + '/' + project.getProperty('getdown_txt_ui.error_background')
- from jalviewDir + '/' + project.getProperty('getdown_txt_ui.progress_image')
- from jalviewDir + '/' + project.getProperty('getdown_txt_ui.icon')
- from jalviewDir + '/' + project.getProperty('getdown_txt_ui.mac_dock_icon')
+ from getdownResourceDir
into project.ext.getdownFilesDir + '/' + getdown_resource_dir
}
}
- inputs.dir(jalviewDir + '/' + packageDir)
+ if (buildDist) {
+ inputs.dir(jalviewDir + '/' + packageDir)
+ }
outputs.dir(project.ext.getdownWebsiteDir)
outputs.dir(project.ext.getdownFilesDir)
}
group = "distribution"
description = "Create the minimal and full getdown app folder for installers and website and create digest file"
dependsOn getdownDigest
+ doLast {
+ if (reportRsyncCommand) {
+ def fromDir = getdownWebsiteDir + (getdownWebsiteDir.endsWith("/")?"":"/")
+ def toDir = getdown_rsync_dest + "/" + getdownDir + (getdownDir.endsWith("/")?"":"/")
+ println "LIKELY RSYNC COMMAND:"
+ println "rsync -avh --delete '$fromDir' '$toDir'"
+ if (RUNRSYNC == "true") {
+ exec {
+ commandLine "mkdir", "-p", toDir
+ }
+ exec {
+ commandLine "rsync", "-avh", "--delete", fromDir, toDir
+ }
+ }
+ }
+ }
}
clean {
rename (install4jTemplate, install4jConfFile)
filter(ReplaceTokens, beginToken: '', endToken: '', tokens: ['9999999999': JAVA_VERSION])
filter(ReplaceTokens, beginToken: '$$', endToken: '$$',
- tokens: [
- 'JAVA_VERSION': JAVA_VERSION,
- 'JAVA_INTEGER_VERSION': JAVA_INTEGER_VERSION,
- 'VERSION': JALVIEW_VERSION,
- 'MACOS_JAVA_VM_DIR': macosJavaVMDir,
- 'MACOS_JAVA_VM_TGZ': macosJavaVMTgz,
- 'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir,
- 'WINDOWS_JAVA_VM_TGZ': windowsJavaVMTgz,
- 'INSTALL4JINFOPLISTFILEASSOCIATIONS': install4jInfoPlistFileAssociations,
- 'COPYRIGHT_MESSAGE': install4jCopyrightMessage,
- 'MACOS_BUNDLE_ID': install4jMacOSBundleId
- ]
+ tokens: [
+ 'JAVA_VERSION': JAVA_VERSION,
+ 'JAVA_INTEGER_VERSION': JAVA_INTEGER_VERSION,
+ 'VERSION': JALVIEW_VERSION,
+ 'MACOS_JAVA_VM_DIR': macosJavaVMDir,
+ 'MACOS_JAVA_VM_TGZ': macosJavaVMTgz,
+ 'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir,
+ 'WINDOWS_JAVA_VM_TGZ': windowsJavaVMTgz,
+ 'INSTALL4JINFOPLISTFILEASSOCIATIONS': install4jInfoPlistFileAssociations,
+ 'COPYRIGHT_MESSAGE': install4jCopyrightMessage,
+ 'MACOS_BUNDLE_ID': install4jMacOSBundleId,
+ 'GETDOWN_RESOURCE_DIR': getdown_resource_dir,
+ 'GETDOWN_DIST_DIR': getdown_app_dir,
+ 'GETDOWN_ALT_DIR': getdown_app_dir_alt,
+ 'GETDOWN_INSTALL_DIR': getdown_install_dir
+ ]
)
if (OSX_KEYPASS=="") {
filter(ReplaceTokens, beginToken: 'codeSigning macEnabled="', endToken: '"', tokens: ['true':'codeSigning macEnabled="false"'])
// include uninstaller applescript app files in dmg
def installerDMGUninstallerXml = file("$install4jDir/$install4jDMGUninstallerAppFiles").text
ant.replaceregexp(
- byline: false,
- flags: "s",
- match: '<file name="UNINSTALL_OLD_JALVIEW_APP_REPLACED_IN_GRADLE" file=.*?>',
- replace: installerDMGUninstallerXml,
- file: install4jConf
+ byline: false,
+ flags: "s",
+ match: '<file name="UNINSTALL_OLD_JALVIEW_APP_REPLACED_IN_GRADLE" file=.*?>',
+ replace: installerDMGUninstallerXml,
+ file: install4jConf
)
- */
+ */
}
}
if (OSX_KEYPASS) {
macKeystorePassword=OSX_KEYPASS
-
+
}
-
+
inputs.dir(project.ext.getdownWebsiteDir)
inputs.file(install4jConf)
inputs.dir(macosJavaVMDir)
inputs.dir(windowsJavaVMDir)
outputs.dir("$jalviewDir/$install4jBuildDir/$JAVA_VERSION")
+
}
clean {
delete install4jConf
}
+
<parent>
<groupId>com.threerings.getdown</groupId>
<artifactId>getdown</artifactId>
- <version>1.8.3-SNAPSHOT</version>
+ <version>1.8.3-1.0_JVL</version>
</parent>
<artifactId>getdown-ant</artifactId>
<parent>
<groupId>com.threerings.getdown</groupId>
<artifactId>getdown</artifactId>
- <version>1.8.3-SNAPSHOT</version>
+ <version>1.8.3-1.0_JVL</version>
</parent>
<artifactId>getdown-core</artifactId>
public enum Step
{
UPDATE_JAVA(10),
- VERIFY_METADATA(15, 65, 95),
- DOWNLOAD(40),
+ //VERIFY_METADATA(15, 65, 95),
+ VERIFY_METADATA(15, 45, 90),
+ DOWNLOAD(50),
PATCH(60),
- VERIFY_RESOURCES(70, 97),
- REDOWNLOAD_RESOURCES(90),
- UNPACK(98),
- LAUNCH(99);
+ //VERIFY_RESOURCES(70, 97),
+ VERIFY_RESOURCES(30, 60),
+ //REDOWNLOAD_RESOURCES(90),
+ REDOWNLOAD_RESOURCES(70),
+ //UNPACK(98),
+ UNPACK(90),
+ //LAUNCH(99);
+ LAUNCH(100);
/** What is the final percent value for this step? */
public final List<Integer> defaultPercents;
/** The paths (relative to the appdir) of images for the window icon. */
public final List<String> iconImages;
+ /** The path (relative to the appdir) to a single background image to appear first. */
+ public final String instantBackgroundImage;
+
/** The path (relative to the appdir) to a single background image. */
public final String backgroundImage;
/** Whether progress text should be hidden or not. */
public final boolean hideProgressText;
+ /** Whether the splash screen should retain focus. */
+ public final boolean progressSync;
+
+ /** Whether the splash screen should retain focus. */
+ public final boolean keepOnTop;
+
+ /** Whether to display the appbase. */
+ public final boolean displayAppbase;
+
+ /** Whether to display the version. */
+ public final boolean displayVersion;
+
/** The minimum number of seconds to display the GUI. This is to prevent the GUI from
* flashing up on the screen and immediately disappearing, which can be confusing to the
* user. */
@Override
public String toString ()
{
- return "[name=" + name + ", bg=" + background + ", bg=" + backgroundImage +
+ return "[name=" + name + ", bg=" + background + ", bg=" + backgroundImage + ", instant_bg=" + instantBackgroundImage +
", pi=" + progressImage + ", prect=" + progress + ", pt=" + progressText +
", pb=" + progressBar + ", srect=" + status + ", st=" + statusText +
", shadow=" + textShadow + ", err=" + installError + ", nrect=" + patchNotes +
", notes=" + patchNotesUrl + ", stepPercentages=" + stepPercentages +
- ", hideProgressText" + hideProgressText + ", minShow=" + minShowSeconds + "]";
+ ", hideProgressText=" + hideProgressText + ", keepOnTop=" + keepOnTop + ", progressSync=" + progressSync + ", minShow=" + minShowSeconds +
+ ", displayAppbase=" + displayAppbase + ", displayVersion=" + displayVersion + "]";
}
public UpdateInterface (Config config)
this.progress = config.getRect("ui.progress", new Rectangle(5, 5, 300, 15));
this.progressText = config.getColor("ui.progress_text", Color.BLACK);
this.hideProgressText = config.getBoolean("ui.hide_progress_text");
+ this.progressSync = config.getBoolean("ui.progress_sync");
+ this.keepOnTop = config.getBoolean("ui.keep_on_top");
+ this.displayAppbase = config.getBoolean("ui.display_appbase");
+ this.displayVersion = config.getBoolean("ui.display_version");
this.minShowSeconds = config.getInt("ui.min_show_seconds", 5);
this.progressBar = config.getColor("ui.progress_bar", 0x6699CC);
this.status = config.getRect("ui.status", new Rectangle(5, 25, 500, 100));
this.textShadow = config.getColor("ui.text_shadow", Color.CLEAR);
this.hideDecorations = config.getBoolean("ui.hide_decorations");
this.backgroundImage = config.getString("ui.background_image");
+ this.instantBackgroundImage = config.getString("ui.instant_background_image");
// default to black or white bg color, depending on the brightness of the progressText
int defaultBackground = (0.5f < Color.brightness(this.progressText)) ?
Color.BLACK : Color.WHITE;
try {
Config tmpConfig = null;
+ Map<String, Object> tmpData = new HashMap<>();
if (_locatorFile.exists()) {
tmpConfig = Config.parseConfig(_locatorFile, opts);
+ // appbase is sanitised in HostWhitelist
+ Map<String, Object> tmpConfigData = tmpConfig.getData();
+ if (tmpConfig != null) {
+ for (Map.Entry<String, Object> entry : tmpConfigData.entrySet()) {
+ String key = entry.getKey();
+ Object value = entry.getValue();
+ String mkey = key.indexOf('.') > -1 ? key.substring(key.indexOf('.') + 1) : key;
+ if (Config.allowedReplaceKeys.contains(mkey) || Config.allowedMergeKeys.contains(mkey)) {
+ tmpData.put(key, value);
+ }
+ }
+ } else {
+ log.warning("Error occurred reading config file", "file", _locatorFile);
+ }
} else {
log.warning("Given locator file does not exist", "file", _locatorFile);
}
- // appbase is sanitised in HostWhitelist
- Map<String, Object> tmpData = new HashMap<>();
- for (Map.Entry<String, Object> entry : tmpConfig.getData().entrySet()) {
- String key = entry.getKey();
- Object value = entry.getValue();
- String mkey = key.indexOf('.') > -1 ? key.substring(key.indexOf('.') + 1) : key;
- if (Config.allowedReplaceKeys.contains(mkey) || Config.allowedMergeKeys.contains(mkey)) {
- tmpData.put(key, value);
- }
- }
locatorConfig = new Config(tmpData);
} catch (Exception e) {
return locatorConfig;
}
+ public String getAppbase() {
+ return _appbase;
+ }
+
protected final EnvConfig _envc;
protected File _config;
protected Digest _digest;
<parent>
<groupId>com.threerings.getdown</groupId>
<artifactId>getdown</artifactId>
- <version>1.8.3-SNAPSHOT</version>
+ <version>1.8.3-1.0_JVL</version>
</parent>
<artifactId>getdown-launcher</artifactId>
Config config = _app.init(true);
if (preloads) doPredownloads(_app.getResources());
_ifc = new Application.UpdateInterface(config);
+ if (_status != null) {
+ _status.setAppbase(_app.getAppbase());
+ }
}
/**
// show the patch notes button, if applicable
if (!StringUtil.isBlank(_ifc.patchNotesUrl)) {
createInterfaceAsync(false);
- EventQueue.invokeLater(new Runnable() {
+ EQinvoke(new Runnable() {
public void run () {
_patchNotes.setVisible(true);
}
} else {
proc = _app.createProcess(false);
}
-
+
// close standard in to avoid choking standard out of the launched process
proc.getInputStream().close();
// close standard out, since we're not going to write to anything to it anyway
}
}
+ //_container.setVisible(true);
+ //_container.validate();
+
// if we have a UI open and we haven't been around for at least 5 seconds (the default
// for min_show_seconds), don't stick a fork in ourselves straight away but give our
// lovely user a chance to see what we're doing
if (_silent || (_container != null && !reinit)) {
return;
}
-/*
- EventQueue.invokeLater(new Runnable() {
+
+ EQinvoke (new Runnable() {
public void run () {
-*/
+
if (_container == null || reinit) {
if (_container == null) {
_container = createContainer();
try {
readConfig(false);
Graphics g = _container.getGraphics();
- String imageFile = _ifc.backgroundImage;
- BufferedImage bgImage = loadImage(_ifc.backgroundImage);
- int bwidth = bgImage.getWidth();
- int bheight = bgImage.getHeight();
-
- instantSplashPane = new JPanel() {
- @Override
- protected void paintComponent(Graphics g)
- {
- super.paintComponent(g);
- // attempt to draw a background image...
- if (bgImage != null) {
- g.drawImage(bgImage, 0, 0, this);
- }
- }
- };
-
- instantSplashPane.setSize(bwidth,bheight);
- instantSplashPane.setPreferredSize(new Dimension(bwidth,bheight));
-
- _layers.add(instantSplashPane, Integer.valueOf(0));
-
- _container.setPreferredSize(new Dimension(bwidth,bheight));
+ BufferedImage iBgImage = loadImage(_ifc.instantBackgroundImage);
+ boolean ibg = true;
+ if (iBgImage == null) {
+ iBgImage = loadImage(_ifc.backgroundImage);
+ ibg = false;
+ }
+ if (iBgImage != null) {
+ final BufferedImage bgImage = iBgImage;
+ int bwidth = bgImage.getWidth();
+ int bheight = bgImage.getHeight();
+
+ log.info("Displaying instant background image", ibg?"instant_background_image":"background_image");
+
+ instantSplashPane = new JPanel() {
+ @Override
+ protected void paintComponent(Graphics g)
+ {
+ super.paintComponent(g);
+ // attempt to draw a background image...
+ if (bgImage != null) {
+ g.drawImage(bgImage, 0, 0, this);
+ }
+ }
+ };
+
+ instantSplashPane.setSize(bwidth,bheight);
+ instantSplashPane.setPreferredSize(new Dimension(bwidth,bheight));
+
+ _layers.add(instantSplashPane, Integer.valueOf(1));
+
+ _container.setPreferredSize(new Dimension(bwidth,bheight));
+ }
} catch (Exception e) {
- log.warning("Failed to set instant background image", "bg", _ifc.backgroundImage);
+ log.warning("Failed to set instant background image", "ibg", _ifc.instantBackgroundImage);
}
-
-
_container.add(_layers, BorderLayout.CENTER);
_patchNotes = new JButton(new AbstractAction(_msgs.getString("m.patch_notes")) {
_patchNotes.setFont(StatusPanel.FONT);
_layers.add(_patchNotes);
_status = new StatusPanel(_msgs);
- _layers.add(_status, Integer.valueOf(10));
+ setStatusAsync("m.initialising", 0, -1L, true);
+ //_layers.add(_status, Integer.valueOf(2));
initInterface();
}
showContainer();
-/*
}
});
-*/
+
}
/**
_status.init(_ifc, _background, getProgressImage());
Dimension size = _status.getPreferredSize();
_status.setSize(size);
+ //_status.updateStatusLabel();
_layers.setPreferredSize(size);
_patchNotes.setBounds(_ifc.patchNotes.x, _ifc.patchNotes.y,
createInterfaceAsync(false);
}
- EventQueue.invokeLater(new Runnable() {
+ EQinvoke(new Runnable() {
public void run () {
- if (_status == null) {
+
+ if (_status == null) {
if (message != null) {
log.info("Dropping status '" + message + "'.");
}
_status.setProgress(0, -1L);
} else if (percent >= 0) {
_status.setProgress(percent, remaining);
+ } else {
+ //_status.setStatus("m.initialising", false);
}
+
}
});
+
+ if (! _addedStatusLayer) {
+ _layers.add(_status, Integer.valueOf(2));
+ _addedStatusLayer = true;
+ initInterface();
+ }
+
}
protected void reportTrackingEvent (String event, int progress)
setStatusAsync(null, stepToGlobalPercent(percent), -1L, false);
}
};
-
+
+ // Asynchronous or synchronous progress updates
+ protected void EQinvoke(Runnable r) {
+
+ try {
+ readConfig(false);
+ } catch (Exception e) {
+ log.warning("Could't read config when invoking GUI action", "Exception", e.getMessage());
+ }
+ if (_ifc != null && _ifc.progressSync) {
+ try {
+ EventQueue.invokeAndWait(r);
+ //r.run();
+ } catch (Exception e) {
+ log.warning("Tried to invokeAndWait but couldn't. Going to invokeLater instead", "Exception", e.getMessage());
+ EventQueue.invokeLater(r);
+ }
+ } else {
+ EventQueue.invokeLater(r);
+ //r.run();
+ }
+
+ //try { Thread.sleep(500); } catch (Exception e) {}
+
+ }
+
protected Application _app;
protected Application.UpdateInterface _ifc = new Application.UpdateInterface(Config.EMPTY);
protected AbortPanel _abort;
protected RotatingBackgrounds _background;
+ protected boolean _addedStatusLayer;
protected boolean _dead;
protected boolean _silent;
protected boolean _launchInSilent;
protected boolean _noUpdate;
protected long _startup;
-
+
protected Set<Resource> _toInstallResources;
protected boolean _readyToInstall;
import java.awt.Color;
import java.awt.Container;
-import java.awt.EventQueue;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import com.samskivert.swing.util.SwingUtil;
import com.threerings.getdown.data.Application;
+import com.threerings.getdown.data.Build;
import com.threerings.getdown.data.EnvConfig;
import com.threerings.getdown.data.SysProps;
import com.threerings.getdown.util.LaunchUtil;
}
if (abort) System.exit(-1);
- log.info("Starting ....");
+ log.info("Starting ...");
try
{
jalview.bin.StartupNotificationListener.setListener();
log.info("-- User Name: " + System.getProperty("user.name"));
log.info("-- User Home: " + System.getProperty("user.home"));
log.info("-- Cur dir: " + System.getProperty("user.dir"));
+ log.info("-- launcher version: "+Build.version());
log.info("-- startupFilesParameterString: " + startupFilesParameterString);
log.info("---------------------------------------------");
handleWindowClose();
}
});
+
+ // keep_on_top
+ try {
+ readConfig(false);
+ } catch (Exception e) {
+ log.warning("Error reading config for keep_on_top");
+ }
+ // move window to top, always on top
+ if (_ifc.keepOnTop) {
+ log.info("Keep on top set to ", "keep_on_top", _ifc.keepOnTop);
+ _frame.setAlwaysOnTop(true);
+ }
+
// handle close on ESC
String cancelId = "Cancel"; // $NON-NLS-1$
_frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
super.fail(message);
// super.fail causes the UI to be created (if needed) on the next UI tick, so we
// want to wait until that happens before we attempt to redecorate the window
- EventQueue.invokeLater(new Runnable() {
+ EQinvoke(new Runnable() {
@Override
public void run() {
// if the frame was set to be undecorated, make window decoration available
import com.samskivert.util.Throttle;
import com.threerings.getdown.data.Application.UpdateInterface;
+import com.threerings.getdown.data.Build;
import com.threerings.getdown.util.MessageUtil;
import com.threerings.getdown.util.Rectangle;
import com.threerings.getdown.util.StringUtil;
// maybe update the progress label
if (_progress != percent) {
_progress = percent;
- if (!_ifc.hideProgressText) {
+ if (_ifc != null && !_ifc.hideProgressText) {
String msg = MessageFormat.format(get("m.complete"), percent);
_newplab = createLabel(msg, new Color(_ifc.progressText, true));
}
}
remaining /= values;
- if (!_ifc.hideProgressText) {
+ if (_ifc != null && !_ifc.hideProgressText) {
// now compute our display value
int minutes = (int)(remaining / 60), seconds = (int)(remaining % 60);
String remstr = minutes + ":" + ((seconds < 10) ? "0" : "") + seconds;
*/
protected void updateStatusLabel ()
{
+ if (_ifc == null) {
+ return;
+ }
String status = _status;
if (!_displayError) {
for (int ii = 0; ii < _statusDots; ii++) {
status += " .";
}
}
- _newlab = createLabel(status, new Color(_ifc.statusText, true));
+
+ StringBuilder labelText = new StringBuilder();
+ if (_ifc.displayVersion) {
+ labelText.append("launcher version: "+Build.version());
+ labelText.append("\n");
+ }
+ if (_ifc.displayAppbase) {
+ labelText.append("appbase: "+_appbase);
+ labelText.append("\n");
+ }
+ labelText.append(status);
+
+ _newlab = createLabel(labelText.toString(), new Color(_ifc.statusText, true));
// set the width of the label to the width specified
int width = _ifc.status.width;
if (width == 0) {
return key;
}
}
+
+ public void setAppbase(String appbase) {
+ _appbase = appbase;
+ }
protected Image _barimg;
protected RotatingBackgrounds _bg;
protected Throttle _rthrottle = new Throttle(1, 1000L);
protected static final Font FONT = new Font("SansSerif", Font.BOLD, 12);
+
+ public String _appbase;
}
m.missing_class = The configuration file is missing the application class.
m.missing_code = The configuration file specifies no code resources.
m.invalid_digest_file = The digest file is invalid.
+
+# When at 0%
+m.initialising = Initialising
m.missing_code = Die Konfigurationsdatei enth\u00e4lt keine Codequellen.
m.invalid_digest_file = Die Hashwertedatei ist ung\u00fcltig.
+
+# When at 0%
+m.initialising = Initialising
m.missing_code = El archivo de configuraci\u00f3n especifica que no hay recursos de c\u00f3digo.
m.invalid_digest_file = El archivo digest no es v\u00e1lido.
+
+# When at 0%
+m.initialising = Initialising
m.missing_class = Le fichier de configuration ne contient pas la classe de l'application.
m.missing_code = Le fichier de configuration ne sp\u00e9cifie aucune ressource de code.
m.invalid_digest_file = Le fichier digest est invalide.
+
+# When at 0%
+m.initialising = Initialising
m.missing_class = Il file di configurazione non contiene la classe da eseguire (tag "class").
m.missing_code = Il file di configurazione non contiene alcuna risorsa (tag "code").
m.invalid_digest_file = Il file di digest non è valido.
+
+# When at 0%
+m.initialising = Initialising
m.missing_class = \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u304c\u4e0d\u660e\u3067\u3059\u3002
m.missing_code = \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u30b3\u30fc\u30c9\u30ea\u30bd\u30fc\u30b9\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
m.invalid_digest_file = \u30c0\u30a4\u30b8\u30a7\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u304c\u7121\u52b9\u3067\u3059\u3002
+
+# When at 0%
+m.initialising = Initialising
m.missing_class = \uC124\uC815 \uD30C\uC77C\uC5D0 \uC5B4\uD50C\uB9AC\uCF00\uC774\uC158 \uD074\uB798\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.
m.missing_code = \uC124\uC815 \uD30C\uC77C\uC5D0 \uB9AC\uC18C\uC2A4\uC5D0 \uB300\uD55C \uCF54\uB4DC\uAC00 \uBA85\uC2DC\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
m.invalid_digest_file = \uB2E4\uC774\uC81C\uC2A4\uD2B8 \uD30C\uC77C\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
+
+# When at 0%
+m.initialising = Initialising
m.missing_class = O arquivo de configura\u00E7\u00E3o n\u00E3o possui a classe de aplicativo.
m.missing_code = O arquivo de configura\u00E7\u00E3o n\u00E3o especifica um recurso de c\u00F3digo.
m.invalid_digest_file = O arquivo digest \u00E9 inv\u00E1lido.
+
+# When at 0%
+m.initialising = Initialising
m.missing_class = \u914d\u7f6e\u6587\u4ef6\u4e2d\u65e0\u6cd5\u627e\u5230\u7a0b\u5e8f\u6587\u4ef6\u3002
m.missing_code = \u914d\u7f6e\u6587\u4ef6\u4e2d\u65e0\u6cd5\u627e\u5230\u6307\u5b9a\u7684\u8d44\u6e90\u3002
m.invalid_digest_file = \u65e0\u6548\u7684\u914d\u7f6e\u6587\u4ef6\u3002
+
+# When at 0%
+m.initialising = Initialising
-mvn clean package -Dgetdown.host.whitelist="jalview.org,*.jalview.org" && cp launcher/target/getdown-launcher-1.8.3-SNAPSHOT.jar ../../../getdown/lib/getdown-launcher.jar && cp core/target/getdown-core-1.8.3-SNAPSHOT.jar ../../../getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar && cp core/target/getdown-core-1.8.3-SNAPSHOT.jar ../../../j8lib/getdown-core.jar && cp core/target/getdown-core-1.8.3-SNAPSHOT.jar ../../../j11lib/getdown-core.jar
+#!/usr/bin/env bash
+
+if [ x$JVLVERSION != x ]; then
+ export VERSION=$JVLVERSION
+else
+ export VERSION=1.8.3-1.0_JVL
+fi
+
+if [ x${VERSION%_JVL} = x$VERSION ]; then
+ VERSION=${VERSION}_JVL
+fi
+
+echo "Setting VERSION to '$VERSION'"
+
+perl -p -i -e 's|(<version>)[^<]*JVL[^<]*(</version>)|${1}$ENV{VERSION}${2}|;' pom.xml */pom.xml
+
+mvn package -Dgetdown.host.whitelist="jalview.org,*.jalview.org"
+RET=$?
+if [ x$RET = x0 ]; then
+ cp launcher/target/getdown-launcher-$VERSION.jar ../../../getdown/lib/getdown-launcher.jar && echo "Copied getdown-launcher.jar to getdown/lib"
+ cp core/target/getdown-core-$VERSION.jar ../../../getdown/lib/getdown-core.jar && echo "Copied getdown-core.jar to getdown/lib"
+ cp core/target/getdown-core-$VERSION.jar ../../../j8lib/getdown-core.jar && echo "Copied getdown-core.jar to j8lib"
+ cp core/target/getdown-core-$VERSION.jar ../../../j11lib/getdown-core.jar && echo "Copied getdown-core.jar to j11lib"
+fi
<groupId>com.threerings.getdown</groupId>
<artifactId>getdown</artifactId>
<packaging>pom</packaging>
- <version>1.8.3-SNAPSHOT</version>
+ <version>1.8.3-1.0_JVL</version>
<name>getdown</name>
<description>An application installer and updater.</description>
cloverClassesDir = clover-classes
cloverSourcesInstrDir = sources-instr
packageDir = dist
+ARCHIVEDIR =
outputJar = jalview.jar
testSourceDir = test
getdown_local = false
getdown_website_dir = getdown/website
getdown_resource_dir = resource
-getdown_app_dir = dist
#getdown_j11lib_dir = j11lib
getdown_files_dir = getdown/files
getdown_launcher = getdown/lib/getdown-launcher.jar
getdown_launcher_new = getdown-launcher-new.jar
-getdown_core = getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar
-getdown_base_txt = getdown/files/getdown.txt
+getdown_core = getdown/lib/getdown-core.jar
+getdown_launch_jvl = channel_launch.jvl
+getdown_build_properties = build_properties
getdown_txt_title = Jalview
-getdown_channel_base = http://www.jalview.org/getdown/jalview
-getdown_channel_name = TEST
getdown_txt_allow_offline = true
getdown_txt_jalview.jvmmempc = 90
getdown_txt_multi_jvmarg = -Dgetdownappdir=%APPDIR%
getdown_txt_strict_comments = true
getdown_txt_title = Jalview
getdown_txt_ui.name = Jalview
+getdown_txt_ui.progress_sync = true
+getdown_txt_ui.keep_on_top = true
+getdown_txt_ui.display_appbase = true
+getdown_txt_ui.display_version = true
+getdown_txt_ui.min_show_seconds = 6
getdown_txt_ui.background = FFFFFF
-getdown_txt_ui.background_image = resources/images/jalview_logo_background_getdown-640x480.png
-getdown_txt_ui.error_background = resources/images/jetset_jalview_splash.png
-getdown_txt_ui.progress_image = resources/images/jalview_logo_background_getdown-progress.png
+getdown_txt_ui.background_image = utils/getdown/jalview_logo_background_getdown-640x480.png
+getdown_txt_ui.instant_background_image = utils/getdown/jalview_logo_background_getdown_instant-640x480.png
+getdown_txt_ui.error_background = utils/getdown/jalview_logo_background_getdown_error-640x480.png
+getdown_txt_ui.progress_image = utils/getdown/jalview_logo_background_getdown-progress.png
getdown_txt_ui.icon = resources/images/JalviewLogo_Huge.png
getdown_txt_ui.progress = 20, 440, 600, 22
getdown_txt_ui.progress_bar = AAAAFF
getdown_txt_ui.progress_text = 000000
getdown_txt_ui.status = 20, 380, 600, 58
getdown_txt_ui.status_text = 000066
-getdown_txt_ui.text_shadow = EEEEFF
-getdown_txt_ui.install_error = http://www.jalview.org/download/error
+#getdown_txt_ui.text_shadow = FFFFFF
+getdown_txt_ui.install_error = http://www.jalview.org/faq/getdownerror
getdown_txt_ui.mac_dock_icon = resources/images/jalview_logos.ico
getdown_alt_java8_min_version = 01080000
getdown_alt_java11_min_version = 11000000
pandoc_exec = /usr/local/bin/pandoc,/usr/bin/pandoc
dev = false
+CHANNEL=LOCAL
+getdown_channel_base = http://www.jalview.org/getdown
+getdown_channel_name = SCRATCH-DEFAULT
+getdown_app_dir_release = release
+getdown_install_dir = install
+getdown_app_dir_alt = alt
+getdown_rsync_dest = /Volumes/jalview/docroot/getdown
+reportRsyncCommand =
+RUNRSYNC=false
--- /dev/null
+#!/usr/bin/env bash
+
+J8HOME=/path/to/java8/jdk
+J11HOME=/path/to/java11/jdk
+OLDBUILDDIR=/path/to/old/build/root
+JALVIEWDIR=/path/to/recent/jalview
+LOCALARCHIVEDIR=/path/to/where/to/store/archive/locally
+WEBSITEDOCROOTMOUNT=/path/to/mounted/website/docroot
+
+
+cd OLDBUILDDIR
+mkdir tar
+cd tar
+wget http://www.jalview.org/source/jalview_2_08b.tar.gz http://www.jalview.org/source/jalview_2_2_1.tar.gz http://www.jalview.org/source/jalview_2_3_buildfix.tar.gz http://www.jalview.org/source/jalview_2_4_0b2.tar.gz http://www.jalview.org/source/jalview_2_5_1.tar.gz http://www.jalview.org/source/jalview_2_6_1.tar.gz http://www.jalview.org/source/jalview_2_7.tar.gz http://www.jalview.org/source/jalview_2_8_2b1.tar.gz http://www.jalview.org/source/jalview_2_9_0b1.tar.gz http://www.jalview.org/source/jalview_2_10_5.tar.gz
+cd -
+
+export JAVA_HOME=J8HOME
+export PATH=$JAVA_HOME/bin:$PATH
+
+for x in tar/jalview_*.tar.gz
+do
+ V=${x#*jalview_}
+ V=${V%.tar.gz}
+ echo $V
+ tar --one-top-level -xvf $x
+ cd jalview_$V/jalview
+ ant makedist -DJALVIEW_VERSION="$V"
+ cd -
+done
+
+export JAVA_HOME=J11HOME
+export PATH=$JAVA_HOME/bin:$PATH
+
+cd $JALVIEWDIR
+for x in $OLDBUILDDIR/jalview_*/jalview
+do
+ V=${x##*jalview_}
+ V=${V%/jalview}
+ echo $V
+ [ -e getdown/website ] && /bin/rm -r getdown/website
+ [ -e getdown/files ] && /bin/rm -r getdown/website
+ gradle getdown -PCHANNEL=ARCHIVE -PJALVIEW_VERSION="$V" -PJAVA_VERSION=1.8 -PARCHIVEDIR=$x -Pgetdown_rsync_dest=$LOCALARCHIVEDIR -PRUNRSYNC=true
+done
+
+
+cd $LOCALARCHIVEDIR
+rsync -avh --delete $LOCALARCHIVEDIR/archive/ $WEBSITEDOCROOTMOUNT/getdown/archive/
+
<key>CFBundleIconFile</key>
<string>applet</string>
<key>CFBundleIdentifier</key>
- <string>com.apple.ScriptEditor.id.Uninstall-Old-Jalview--optional</string>
+ <string>com.apple.ScriptEditor.id.Uninstall-Old-Jalview</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
- <string>Uninstall Old Jalview (optional)</string>
+ <string>Uninstall Old Jalview</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
</dict>
<key>LSRequiresCarbon</key>
<true/>
+ <key>NSAppleEventsUsageDescription</key>
+ <string>This script needs to control other applications to run.</string>
+ <key>NSAppleMusicUsageDescription</key>
+ <string>This script needs access to your music to run.</string>
+ <key>NSCalendarsUsageDescription</key>
+ <string>This script needs access to your calendars to run.</string>
+ <key>NSCameraUsageDescription</key>
+ <string>This script needs access to your camera to run.</string>
+ <key>NSContactsUsageDescription</key>
+ <string>This script needs access to your contacts to run.</string>
+ <key>NSHomeKitUsageDescription</key>
+ <string>This script needs access to your HomeKit Home to run.</string>
+ <key>NSMicrophoneUsageDescription</key>
+ <string>This script needs access to your microphone to run.</string>
+ <key>NSPhotoLibraryUsageDescription</key>
+ <string>This script needs access to your photos to run.</string>
+ <key>NSRemindersUsageDescription</key>
+ <string>This script needs access to your reminders to run.</string>
+ <key>NSSiriUsageDescription</key>
+ <string>This script needs access to Siri to run.</string>
+ <key>NSSystemAdministrationUsageDescription</key>
+ <string>This script needs access to administer this system to run.</string>
<key>WindowState</key>
<dict>
<key>bundleDividerCollapsed</key>
<key>bundlePositionOfDivider</key>
<real>0.0</real>
<key>dividerCollapsed</key>
- <false/>
+ <true/>
<key>eventLogLevel</key>
<integer>2</integer>
<key>name</key>
<key>positionOfDivider</key>
<real>421</real>
<key>savedFrame</key>
- <string>20 1180 700 672 0 0 3360 1867 </string>
+ <string>272 342 1754 910 0 0 3360 1867 </string>
<key>selectedTab</key>
- <string>description</string>
+ <string>result</string>
</dict>
</dict>
</plist>
-{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf600
+{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf500
{\fonttbl}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
<dict>
<key>Resources/Scripts/main.scpt</key>
<data>
- fqUypmAyNT7kgykBjNqtdjMM1Mg=
+ KEuZnZPFR5wgwG/qEhXMd5yBoi4=
</data>
<key>Resources/applet.icns</key>
<data>
</data>
<key>Resources/applet.rsrc</key>
<data>
- aTN+E9yPFzj2wRwcmefcTGGpQYM=
+ oLbJze+WI6mK9fT14HFV6EwFoEI=
</data>
<key>Resources/description.rtfd/TXT.rtf</key>
<data>
- O79gUM5bdy3TK5k10nzhees3tLA=
+ JdCHmFsejhMRQNi2CzUAg7xM/6Q=
</data>
</dict>
<key>files2</key>
<dict>
<key>hash</key>
<data>
- fqUypmAyNT7kgykBjNqtdjMM1Mg=
+ KEuZnZPFR5wgwG/qEhXMd5yBoi4=
</data>
<key>hash2</key>
<data>
- EQiIOT1XOBWGSwXZlfTXIrxNy+61mjRDze6gR+e3c2U=
+ Y+OMztx129elZ3oX0uhaiMMNU87xhkEPVzSuhF528t0=
</data>
</dict>
<key>Resources/applet.icns</key>
<dict>
<key>hash</key>
<data>
- aTN+E9yPFzj2wRwcmefcTGGpQYM=
+ oLbJze+WI6mK9fT14HFV6EwFoEI=
</data>
<key>hash2</key>
<data>
- fQhBZ0v2JeXFde/OYcgUVYOfUcp426odn5rtdTkcdjc=
+ 6bi/D/GzKmLhXbbC8+OLEX9+44Au0XOyGRd+kfw6uzA=
</data>
</dict>
<key>Resources/description.rtfd/TXT.rtf</key>
<dict>
<key>hash</key>
<data>
- O79gUM5bdy3TK5k10nzhees3tLA=
+ JdCHmFsejhMRQNi2CzUAg7xM/6Q=
</data>
<key>hash2</key>
<data>
- qxVBcYejHswAjMa99pSek5Vgi52JP4dlQMTiIzbCkBs=
+ e8RCmynIiyJGwHTnWQowZeGP0OUnjjA6SQTvIzP7Hxs=
</data>
</dict>
</dict>
<?xml version="1.0" encoding="UTF-8"?>
-<install4j version="7.0.9" transformSequenceNumber="7">
+<install4j version="7.0.11" transformSequenceNumber="7">
<directoryPresets config="." />
<application name="Jalview" distributionSourceDir="" applicationId="6595-2347-1923-0725" mediaDir="../../build/install4j" mediaFilePattern="${compiler:sys.shortName}_${compiler:sys.platform}_${compiler:sys.version}" compression="6" lzmaCompression="true" pack200Compression="false" excludeSignedFromPacking="true" commonExternalFiles="false" createMd5Sums="true" shrinkRuntime="true" shortName="Jalview" publisher="University of Dundee" publisherWeb="http://www.jalview.org/" version="$$VERSION$$" allPathsRelative="true" backupOnSave="false" autoSave="false" convertDotsToUnderscores="true" macSignature="????" macVolumeId="5aac4968c304f65" javaMinVersion="9999999999" javaMaxVersion="" allowBetaVM="true" jdkMode="jdk" jdkName="JDK 11.0">
<languages skipLanguageSelection="false" languageSelectionInPrincipalLanguage="false">
<dirEntry mountPoint="885" file="$$WINDOWS_JAVA_VM_DIR$$" overwriteMode="4" shared="false" fileMode="755" uninstallMode="0" overrideFileMode="true" overrideOverwriteMode="false" overrideUninstallMode="true" entryMode="subdir" subDirectory="${compiler:JRE_DIR}" excludeSuffixes="" dirMode="755" overrideDirMode="false">
<exclude />
</dirEntry>
- <dirEntry mountPoint="1875" file="../../getdown/website/$$JAVA_VERSION$$/dist" overwriteMode="1" shared="false" fileMode="644" uninstallMode="2" overrideFileMode="true" overrideOverwriteMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="dist" excludeSuffixes="" dirMode="755" overrideDirMode="true">
+ <dirEntry mountPoint="1875" file="../../getdown/website/$$JAVA_VERSION$$/$$GETDOWN_DIST_DIR$$" overwriteMode="1" shared="false" fileMode="644" uninstallMode="2" overrideFileMode="true" overrideOverwriteMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="$$GETDOWN_DIST_DIR$$" excludeSuffixes="" dirMode="755" overrideDirMode="true">
<exclude />
</dirEntry>
<dirEntry mountPoint="2107" file="Uninstall Old Jalview.app" overwriteMode="4" shared="false" fileMode="755" uninstallMode="0" overrideFileMode="true" overrideOverwriteMode="false" overrideUninstallMode="false" entryMode="subdir" subDirectory="Uninstall Old Jalview.app" excludeSuffixes="" dirMode="755" overrideDirMode="true">
<java mainClass="com.threerings.getdown.launcher.GetdownApp" mainMode="1" vmParameters="" arguments=". jalview" allowVMPassthroughParameters="true" preferredVM="" bundleRuntime="true">
<classPath>
<archive location="getdown-launcher.jar" failOnError="true" />
+ <scanDirectory location="$$GETDOWN_INSTALL_DIR$$" failOnError="false" />
</classPath>
<modulePath />
<nativeLibraryDirectories />
<java mainClass="com.threerings.getdown.launcher.GetdownApp" mainMode="1" vmParameters="" arguments=". jalview" allowVMPassthroughParameters="true" preferredVM="" bundleRuntime="true">
<classPath>
<archive location="getdown-launcher.jar" failOnError="true" />
+ <scanDirectory location="$$GETDOWN_INSTALL_DIR$$" failOnError="false" />
</classPath>
<modulePath />
<nativeLibraryDirectories />
</splashScreen>
<java mainClass="jalview.bin.Launcher" mainMode="1" vmParameters="" arguments="" allowVMPassthroughParameters="true" preferredVM="" bundleRuntime="true">
<classPath>
- <scanDirectory location="dist" failOnError="false" />
+ <scanDirectory location="$$GETDOWN_DIST_DIR$$" failOnError="false" />
</classPath>
<modulePath />
<nativeLibraryDirectories />
<java class="java.beans.XMLDecoder">
<object class="com.install4j.runtime.beans.actions.files.DeleteFileAction">
<void property="files">
- <array class="java.io.File" length="17">
+ <array class="java.io.File" length="31">
<void index="0">
<object class="java.io.File">
<string>jre</string>
</void>
<void index="1">
<object class="java.io.File">
- <string>.install4j</string>
+ <string>jre.jar</string>
</object>
</void>
<void index="2">
<object class="java.io.File">
- <string>dist</string>
+ <string>.install4j</string>
</object>
</void>
<void index="3">
<object class="java.io.File">
- <string>resource</string>
+ <string>$$GETDOWN_DIST_DIR$$</string>
</object>
</void>
<void index="4">
<object class="java.io.File">
- <string>getdown-launcher.jar</string>
+ <string>$$GETDOWN_ALT_DIR$$</string>
</object>
</void>
<void index="5">
<object class="java.io.File">
- <string>getdown-launcher-old.jar</string>
+ <string>$$GETDOWN_RESOURCE_DIR$$</string>
</object>
</void>
<void index="6">
<object class="java.io.File">
- <string>getdown-launcher-new.jar</string>
+ <string>getdown-launcher.jar</string>
</object>
</void>
<void index="7">
<object class="java.io.File">
- <string>*.jarv</string>
+ <string>getdown-launcher-old.jar</string>
</object>
</void>
<void index="8">
<object class="java.io.File">
- <string>gettingdown.lock</string>
+ <string>getdown-launcher-new.jar</string>
</object>
</void>
<void index="9">
<object class="java.io.File">
- <string>*.log</string>
+ <string>*.jarv</string>
</object>
</void>
<void index="10">
<object class="java.io.File">
- <string>*.txt</string>
+ <string>gettingdown.lock</string>
</object>
</void>
<void index="11">
<object class="java.io.File">
- <string>*_new</string>
+ <string>*.log</string>
</object>
</void>
<void index="12">
<object class="java.io.File">
- <string>digest.txt</string>
+ <string>*.txt</string>
</object>
</void>
<void index="13">
<object class="java.io.File">
- <string>digest2.txt</string>
+ <string>*_new</string>
</object>
</void>
<void index="14">
<object class="java.io.File">
- <string>getdown-launcher.jarv</string>
+ <string>digest.txt</string>
</object>
</void>
<void index="15">
<object class="java.io.File">
- <string>launcher.log</string>
+ <string>digest2.txt</string>
</object>
</void>
<void index="16">
<object class="java.io.File">
+ <string>getdown-launcher.jarv</string>
+ </object>
+ </void>
+ <void index="17">
+ <object class="java.io.File">
+ <string>getdown-launcher-new.jarv</string>
+ </object>
+ </void>
+ <void index="18">
+ <object class="java.io.File">
+ <string>channel_launch.jvl</string>
+ </object>
+ </void>
+ <void index="19">
+ <object class="java.io.File">
+ <string>launcher.log</string>
+ </object>
+ </void>
+ <void index="20">
+ <object class="java.io.File">
<string>proxy.txt</string>
</object>
</void>
+ <void index="21">
+ <object class="java.io.File">
+ <string>META-INF</string>
+ </object>
+ </void>
+ <void index="22">
+ <object class="java.io.File">
+ <string>install/getdown-launcher.jar</string>
+ </object>
+ </void>
+ <void index="23">
+ <object class="java.io.File">
+ <string>install/getdown.txt</string>
+ </object>
+ </void>
+ <void index="24">
+ <object class="java.io.File">
+ <string>install/build_properties</string>
+ </object>
+ </void>
+ <void index="25">
+ <object class="java.io.File">
+ <string>build_properties</string>
+ </object>
+ </void>
+ <void index="26">
+ <object class="java.io.File">
+ <string>install</string>
+ </object>
+ </void>
+ <void index="27">
+ <object class="java.io.File">
+ <string>dist</string>
+ </object>
+ </void>
+ <void index="28">
+ <object class="java.io.File">
+ <string>release</string>
+ </object>
+ </void>
+ <void index="29">
+ <object class="java.io.File">
+ <string>alt</string>
+ </object>
+ </void>
+ <void index="30">
+ <object class="java.io.File">
+ <string>resource</string>
+ </object>
+ </void>
</array>
</void>
<void property="recursive">
<group name="" id="49" customizedId="" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" enabled="true" commentSet="false" comment="" actionElevationType="inherit" useExternalParametrization="true" externalParametrizationName="Customize title bar" externalParametrizationMode="include">
<serializedBean>
<java class="java.beans.XMLDecoder">
- <object class="com.install4j.runtime.beans.groups.VerticalFormComponentGroup">
+ <object class="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" id="VerticalFormComponentGroup0">
<void property="backgroundColor">
<object class="java.awt.Color">
<int>255</int>
<string>icon:${installer:sys.installerApplicationMode}_header.png</string>
</object>
</void>
+ <void id="Integer0" property="cellSpacing" />
+ <void id="Integer1" property="borderWidth" />
<void property="imageInsets">
<object class="java.awt.Insets">
- <int>0</int>
+ <object idref="Integer0" />
<int>5</int>
- <int>1</int>
- <int>1</int>
+ <object idref="Integer1" />
+ <object idref="Integer1" />
</object>
</void>
<void property="insets">
<object class="java.awt.Insets">
- <int>0</int>
+ <object idref="Integer0" />
<int>20</int>
- <int>0</int>
+ <object idref="Integer0" />
<int>10</int>
</object>
</void>
<group name="" id="53" customizedId="" beanClass="com.install4j.runtime.beans.groups.HorizontalFormComponentGroup" enabled="true" commentSet="false" comment="" actionElevationType="inherit" useExternalParametrization="false" externalParametrizationName="" externalParametrizationMode="all">
<serializedBean>
<java class="java.beans.XMLDecoder">
- <object class="com.install4j.runtime.beans.groups.HorizontalFormComponentGroup">
+ <object class="com.install4j.runtime.beans.groups.HorizontalFormComponentGroup" id="HorizontalFormComponentGroup0">
<void property="alignFirstLabel">
<boolean>false</boolean>
</void>
+ <void id="Integer0" property="cellSpacing" />
<void property="insets">
<object class="java.awt.Insets">
<int>3</int>
- <int>5</int>
+ <object idref="Integer0" />
<int>8</int>
- <int>5</int>
+ <object idref="Integer0" />
</object>
</void>
</object>