From cd28f3cb40185b5ea23178136c3576e87d0ad2ef Mon Sep 17 00:00:00 2001 From: Ben Soares Date: Thu, 21 Nov 2019 12:54:35 +0000 Subject: [PATCH] JAL-3449 Using tidied build.gradle and gradle.properties from Jalview-JS/develop --- build.gradle | 1031 +++++++++++++++++++++++++++++++---------------------- gradle.properties | 113 ++++-- 2 files changed, 688 insertions(+), 456 deletions(-) diff --git a/build.gradle b/build.gradle index f02d8ad..69dc6da 100644 --- a/build.gradle +++ b/build.gradle @@ -1,15 +1,14 @@ import org.apache.tools.ant.filters.ReplaceTokens -//import org.apache.tools.ant.filters.ReplaceRegexp import org.gradle.internal.os.OperatingSystem -import org.gradle.plugins.ide.eclipse.model.* - +import org.gradle.plugins.ide.eclipse.model.Output +import org.gradle.plugins.ide.eclipse.model.Library +import java.security.MessageDigest import groovy.transform.ExternalizeMethods buildscript { dependencies { classpath 'org.openclover:clover:4.3.1' - classpath 'org.apache.commons:commons-compress:1.18' } } @@ -19,6 +18,7 @@ plugins { id 'eclipse' id 'com.github.johnrengelman.shadow' version '4.0.3' id 'com.install4j.gradle' version '7.0.9' + id 'com.dorongold.task-tree' version '1.4' // only needed to display task dependency tree with gradle task1 [task2 ...] taskTree } repositories { @@ -30,118 +30,180 @@ repositories { } } -mainClassName = launcherClass -def cloverInstrDir = file("$buildDir/$cloverSourcesInstrDir") -def classes = "$jalviewDir/$classesDir" - -if (clover.equals("true")) { - use_clover = true - classes = "$buildDir/$cloverClassesDir" -} else { - use_clover = false - classes = "$jalviewDir/$classesDir" +dependencies { + compile 'org.apache.commons:commons-compress:1.18' } -// configure classpath/args for j8/j11 compilation -def jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath() -def libDir -def libDistDir -def compile_source_compatibility -def compile_target_compatibility +// in ext the values are cast to Object. Ensure string values are cast as String (and not GStringImpl) for later use +def string(Object o) { + return o.toString() +} + ext { - getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir + '/' + JAVA_VERSION - getdownDir = "" + jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath() + jalviewDirRelativePath = jalviewDir + + // local build environment properties + def localProps = "${jalviewDirAbsolutePath}/local.properties" + if (file(localProps).exists()) { + try { + def p = new Properties() + def localPropsFIS = new FileInputStream(localProps) + p.load(localPropsFIS) + localPropsFIS.close() + p.each { + key, val -> + def over = getProperty(key) != null + setProperty(key, val) + if (over) { + println("Overriding property '${key}' with local.properties value '${val}'") + } + } + } catch (Exception e) { + System.out.println("Exception reading local.properties") + } + } + + // this property set when running Eclipse headlessly + j2sHeadlessBuildProperty = string("net.sf.j2s.core.headlessbuild") + // this property set by Eclipse + eclipseApplicationProperty = string("eclipse.application") + // CHECK IF RUNNING FROM WITHIN ECLIPSE + def eclipseApplicationPropertyVal = System.properties[eclipseApplicationProperty] + IN_ECLIPSE = eclipseApplicationPropertyVal != null && eclipseApplicationPropertyVal.startsWith("org.eclipse.ui.") + // BUT WITHOUT THE HEADLESS BUILD PROPERTY SET + if (System.properties[j2sHeadlessBuildProperty].equals("true")) { + println("Setting IN_ECLIPSE to ${IN_ECLIPSE} as System.properties['${j2sHeadlessBuildProperty}'] == '${System.properties[j2sHeadlessBuildProperty]}'") + IN_ECLIPSE = false + } + if (IN_ECLIPSE) { + println("WITHIN ECLIPSE IDE") + } else { + println("HEADLESS BUILD") + } + /* *-/ + System.properties.sort { it.key }.each { + key, val -> println("SYSTEM PROPERTY ${key}='${val}'") + } + /-* *-/ + if (false && IN_ECLIPSE) { + jalviewDir = jalviewDirAbsolutePath + } + */ + + // essentials + bareSourceDir = string(source_dir) + sourceDir = string("${jalviewDir}/${bareSourceDir}") + resourceDir = string("${jalviewDir}/${resource_dir}") + bareTestSourceDir = string(test_source_dir) + testSourceDir = string("${jalviewDir}/${bareTestSourceDir}") + + // clover + cloverInstrDir = file("${buildDir}/${cloverSourcesInstrDir}") + classesDir = string("${jalviewDir}/${classes_dir}") + if (clover.equals("true")) { + use_clover = true + classesDir = string("${buildDir}/${cloverClassesDir}") + } else { + use_clover = false + classesDir = string("${jalviewDir}/${classes_dir}") + } + + classes = classesDir + + getdownWebsiteDir = string("${jalviewDir}/${getdown_website_dir}/${JAVA_VERSION}") + getdownDir = string("") reportRsyncCmd = false buildDist = true - buildProperties = buildPropertiesFile - getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher + buildProperties = build_properties_file + getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher}") switch (CHANNEL) { case "BUILD": // TODO: get bamboo build artifact URL for getdown artifacts getdown_channel_base = bamboo_channelbase - getdown_channel_name = bamboo_planKey + '/'+JAVA_VERSION - getdown_app_base = bamboo_channelbase + '/'+ bamboo_planKey + bamboo_getdown_channel_suffix + '/'+JAVA_VERSION + getdown_channel_name = string("${bamboo_planKey}/${JAVA_VERSION}") + getdown_app_base = string("${bamboo_channelbase}/${bamboo_planKey}${bamboo_getdown_channel_suffix}/${JAVA_VERSION}") getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = string("${classesDir}/${build_properties_file}") break case "RELEASE": getdown_channel_name = CHANNEL.toLowerCase() - getdownDir = getdown_channel_name + "/" + JAVA_VERSION - getdown_app_base = getdown_channel_base + "/" + getdownDir + getdownDir = string("${getdown_channel_name}/${JAVA_VERSION}") + getdown_app_base = string("${getdown_channel_base}/${getdownDir}") getdown_app_dir = getdown_app_dir_release - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = string("${classesDir}/${build_properties_file}") 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_channel_name = CHANNEL.toLowerCase()+"/${JALVIEW_VERSION}" + getdownDir = string("${getdown_channel_name}/${JAVA_VERSION}") + getdown_app_base = string("${getdown_channel_base}/${getdownDir}") getdown_app_dir = getdown_app_dir_alt - if (!file(ARCHIVEDIR+"/"+packageDir).exists()) { + 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 + packageDir = string("${ARCHIVEDIR}/${packageDir}") + buildProperties = string("${ARCHIVEDIR}/${classes_dir}/${build_properties_file}") buildDist = false } reportRsyncCommand = true break case "ARCHIVELOCAL": - getdown_channel_name = "archive" + "/" + JALVIEW_VERSION - getdownDir = getdown_channel_name + "/" + JAVA_VERSION + getdown_channel_name = string("archive/${JALVIEW_VERSION}") + getdownDir = string("${getdown_channel_name}/${JAVA_VERSION}") getdown_app_base = file(getdownWebsiteDir).toURI().toString() getdown_app_dir = getdown_app_dir_alt - if (!file(ARCHIVEDIR+"/"+packageDir).exists()) { + 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 + packageDir = string("${ARCHIVEDIR}/${packageDir}") + buildProperties = string("${ARCHIVEDIR}/${classes_dir}/${build_properties_file}") buildDist = false } reportRsyncCommand = true - getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher_local + getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}") break case "DEVELOP": getdown_channel_name = CHANNEL.toLowerCase() - getdownDir = getdown_channel_name + "/" + JAVA_VERSION - getdown_app_base = getdown_channel_base + "/" + getdownDir + getdownDir = string("${getdown_channel_name}/${JAVA_VERSION}") + getdown_app_base = string("${getdown_channel_base}/${getdownDir}") getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = string("${classesDir}/${build_properties_file}") reportRsyncCommand = true break case "TEST-RELEASE": getdown_channel_name = CHANNEL.toLowerCase() - getdownDir = getdown_channel_name + "/" + JAVA_VERSION - getdown_app_base = getdown_channel_base + "/" + getdownDir + getdownDir = string("${getdown_channel_name}/${JAVA_VERSION}") + getdown_app_base = string("${getdown_channel_base}/${getdownDir}") getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = string("${classesDir}/${build_properties_file}") reportRsyncCommand = true break case ~/^SCRATCH(|-[-\w]*)$/: getdown_channel_name = CHANNEL - getdownDir = getdown_channel_name + "/" + JAVA_VERSION - getdown_app_base = getdown_channel_base + "/" + getdownDir + getdownDir = string("${getdown_channel_name}/${JAVA_VERSION}") + getdown_app_base = string("${getdown_channel_base}/${getdownDir}") getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = string("${classesDir}/${build_properties_file}") reportRsyncCommand = true break case "LOCAL": getdown_app_base = file(getdownWebsiteDir).toURI().toString() getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile - getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher_local + buildProperties = string("${classesDir}/${build_properties_file}") + getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}") break default: // something wrong specified @@ -151,96 +213,141 @@ ext { } - 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 - getdownFilesDir = jalviewDir + '/' + getdown_files_dir + '/' + JAVA_VERSION + '/' - getdownFilesInstallDir = getdownFilesDir+"/"+getdown_install_dir + getdownAppDir = string("${getdownWebsiteDir}/${getdown_app_dir}") + //getdownJ11libDir = "${getdownWebsiteDir}/${getdown_j11lib_dir}" + getdownResourceDir = string("${getdownWebsiteDir}/${getdown_resource_dir}") + getdownInstallDir = string("${getdownWebsiteDir}/${getdown_install_dir}") + getdownFilesDir = string("${jalviewDir}/${getdown_files_dir}/${JAVA_VERSION}/") + getdownFilesInstallDir = string("${getdownFilesDir}/${getdown_install_dir}") /* compile without modules -- using classpath libraries - modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"]) + modules_compileClasspath = fileTree(dir: "${jalviewDir}/${j11modDir}", include: ["*.jar"]) modules_runtimeClasspath = modules_compileClasspath */ - gitHash = "" - gitBranch = "" -} + gitHash = string("") + gitBranch = string("") + + println("Using a ${CHANNEL} profile.") + + additional_compiler_args = [] + // configure classpath/args for j8/j11 compilation + if (JAVA_VERSION.equals("1.8")) { + JAVA_INTEGER_VERSION = string("8") + //libDir = j8libDir + libDir = j11libDir + libDistDir = j8libDir + compile_source_compatibility = 1.8 + compile_target_compatibility = 1.8 + // these are getdown.txt properties defined dependent on the JAVA_VERSION + getdown_alt_java_min_version = getdown_alt_java8_min_version + getdown_alt_java_max_version = getdown_alt_java8_max_version + // this property is assigned below and expanded to multiple lines in the getdown task + getdown_alt_multi_java_location = getdown_alt_java8_txt_multi_java_location + // this property is for the Java library used in eclipse + eclipse_java_runtime_name = string("JavaSE-1.8") + } else if (JAVA_VERSION.equals("11")) { + JAVA_INTEGER_VERSION = string("11") + libDir = j11libDir + libDistDir = j11libDir + compile_source_compatibility = 11 + compile_target_compatibility = 11 + getdown_alt_java_min_version = getdown_alt_java11_min_version + getdown_alt_java_max_version = getdown_alt_java11_max_version + getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location + eclipse_java_runtime_name = string("JavaSE-11") + /* compile without modules -- using classpath libraries + additional_compiler_args += [ + '--module-path', modules_compileClasspath.asPath, + '--add-modules', j11modules + ] + */ + } else if (JAVA_VERSION.equals("12") || JAVA_VERSION.equals("13")) { + JAVA_INTEGER_VERSION = JAVA_VERSION + libDir = j11libDir + libDistDir = j11libDir + compile_source_compatibility = JAVA_VERSION + compile_target_compatibility = JAVA_VERSION + getdown_alt_java_min_version = getdown_alt_java11_min_version + getdown_alt_java_max_version = getdown_alt_java11_max_version + getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location + eclipse_java_runtime_name = string("JavaSE-11") + /* compile without modules -- using classpath libraries + additional_compiler_args += [ + '--module-path', modules_compileClasspath.asPath, + '--add-modules', j11modules + ] + */ + } else { + throw new GradleException("JAVA_VERSION=${JAVA_VERSION} not currently supported by Jalview") + } -def JAVA_INTEGER_VERSION -def additional_compiler_args = [] -// these are getdown.txt properties defined dependent on the JAVA_VERSION -def getdown_alt_java_min_version -def getdown_alt_java_max_version -// this property is assigned below and expanded to multiple lines in the getdown task -def getdown_alt_multi_java_location -// this property is for the Java library used in eclipse -def eclipse_java_runtime_name -if (JAVA_VERSION.equals("1.8")) { - JAVA_INTEGER_VERSION = "8" - //libDir = j8libDir - libDir = j11libDir - libDistDir = j8libDir - compile_source_compatibility = 1.8 - compile_target_compatibility = 1.8 - getdown_alt_java_min_version = getdown_alt_java8_min_version - getdown_alt_java_max_version = getdown_alt_java8_max_version - getdown_alt_multi_java_location = getdown_alt_java8_txt_multi_java_location - eclipse_java_runtime_name = "JavaSE-1.8" -} else if (JAVA_VERSION.equals("11")) { - JAVA_INTEGER_VERSION = "11" - libDir = j11libDir - libDistDir = j11libDir - compile_source_compatibility = 11 - compile_target_compatibility = 11 - getdown_alt_java_min_version = getdown_alt_java11_min_version - getdown_alt_java_max_version = getdown_alt_java11_max_version - getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location - eclipse_java_runtime_name = "JavaSE-11" - /* compile without modules -- using classpath libraries - additional_compiler_args += [ - '--module-path', ext.modules_compileClasspath.asPath, - '--add-modules', j11modules - ] - */ -} else if (JAVA_VERSION.equals("12") || JAVA_VERSION.equals("13")) { - JAVA_INTEGER_VERSION = JAVA_VERSION - libDir = j11libDir - libDistDir = j11libDir - compile_source_compatibility = JAVA_VERSION - compile_target_compatibility = JAVA_VERSION - getdown_alt_java_min_version = getdown_alt_java11_min_version - getdown_alt_java_max_version = getdown_alt_java11_max_version - getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location - eclipse_java_runtime_name = "JavaSE-11" - /* compile without modules -- using classpath libraries - additional_compiler_args += [ - '--module-path', ext.modules_compileClasspath.asPath, - '--add-modules', j11modules - ] - */ -} else { - throw new GradleException("JAVA_VERSION=$JAVA_VERSION not currently supported by Jalview") + + // for install4j + macosJavaVMDir = string("${System.env.HOME}/buildtools/jre/openjdk-java_vm/getdown/macos-jre${JAVA_VERSION}/jre") + macosJavaVMTgz = string("${System.env.HOME}/buildtools/jre/openjdk-java_vm/install4j/tgz/macos-jre${JAVA_VERSION}.tar.gz") + windowsJavaVMDir = string("${System.env.HOME}/buildtools/jre/openjdk-java_vm/getdown/windows-jre${JAVA_VERSION}/jre") + windowsJavaVMTgz = string("${System.env.HOME}/buildtools/jre/openjdk-java_vm/install4j/tgz/windows-jre${JAVA_VERSION}.tar.gz") + install4jDir = string("${jalviewDir}/${install4j_utils_dir}") + install4jConfFileName = string("jalview-installers-java${JAVA_VERSION}.install4j") + install4jConfFile = string("${install4jDir}/${install4jConfFileName}") + install4jHomeDir = install4j_home_dir + if (install4jHomeDir.startsWith("~/")) { + install4jHomeDir = System.getProperty("user.home") + install4jHomeDir.substring(1) + } + + + + buildingHTML = string("${jalviewDir}/${docDir}/building.html") + helpFile = string("${classesDir}/${help_dir}/help.jhm") + helpParentDir = string("${jalviewDir}/${help_parent_dir}") + helpDir = string("${help_dir}") + helpSourceDir = string("${helpParentDir}/${helpDir}") + + + relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath()) + jalviewjsBuildDir = string("${relativeBuildDir}/jalviewjs") + jalviewjsSiteDir = string("${jalviewjsBuildDir}/${jalviewjs_site_dir}") + if (IN_ECLIPSE) { + jalviewjsTransferSiteJsDir = string(jalviewjsSiteDir) + } else { + jalviewjsTransferSiteJsDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_js") + } + jalviewjsTransferSiteLibDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_lib") + jalviewjsTransferSiteSwingJsDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_swingjs") + jalviewjsTransferSiteCoreDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_core") + jalviewjsJalviewCoreHtmlFile = string("") + jalviewjsJalviewCoreName = string(jalviewjs_core_name) + jalviewjsCoreClasslists = [] + jalviewjsJalviewTemplateName = string(jalviewjs_name) + jalviewjsJ2sSettingsFileName = string("${jalviewDir}/${jalviewjs_j2s_settings}") + jalviewjsJ2sProps = null + + eclipseWorkspace = null + eclipseBinary = string("") + eclipseVersion = string("") + eclipseDebug = false + // ENDEXT } -sourceSets { +sourceSets { main { java { - srcDirs "$jalviewDir/$sourceDir" - outputDir = file("$classes") + srcDirs sourceDir + outputDir = file(classesDir) } resources { - srcDirs "$jalviewDir/$resourceDir" + srcDirs resourceDir } - jar.destinationDir = file("$jalviewDir/$packageDir") + jar.destinationDir = file("${jalviewDir}/${packageDir}") compileClasspath = files(sourceSets.main.java.outputDir) - compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) runtimeClasspath = compileClasspath } + clover { java { srcDirs = [ cloverInstrDir ] @@ -253,16 +360,16 @@ sourceSets { compileClasspath = configurations.cloverRuntime + files( sourceSets.clover.java.outputDir ) compileClasspath += files(sourceSets.main.java.outputDir) compileClasspath += sourceSets.main.compileClasspath - compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) - compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${utilsDir}", include: ["**/*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) runtimeClasspath = compileClasspath } test { java { - srcDirs "$jalviewDir/$testSourceDir" - outputDir = file("$jalviewDir/$testOutputDir") + srcDirs testSourceDir + outputDir = file("${jalviewDir}/${testOutputDir}") } resources { @@ -277,13 +384,15 @@ sourceSets { compileClasspath += files(sourceSets.main.java.outputDir) } - compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) - compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${utilsDir}/testnglibs", include: ["**/*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${utilsDir}/testlibs", include: ["**/*.jar"]) runtimeClasspath = compileClasspath } } + // clover bits dependencies { if (use_clover) { @@ -292,6 +401,7 @@ dependencies { } } + configurations { cloverRuntime cloverRuntime.extendsFrom cloverCompile @@ -299,7 +409,7 @@ configurations { eclipse { project { - name = "Jalview with gradle build" + name = eclipse_project_name natures 'org.eclipse.jdt.core.javanature', 'org.eclipse.jdt.groovy.core.groovyNature', @@ -312,117 +422,92 @@ eclipse { classpath { //defaultOutputDir = sourceSets.main.java.outputDir def removeThese = [] - configurations.each{ if (it.isCanBeResolved()) { - removeThese += it - } - } - - minusConfigurations += removeThese - plusConfigurations = [ ] - file { - - whenMerged { cp -> - def removeTheseToo = [] - HashMap 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) - } - } + configurations.each{ + if (it.isCanBeResolved()) { + removeThese += it } - 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)) + minusConfigurations += removeThese + plusConfigurations = [ ] + file { - HashMap addedLibPath = new HashMap<>(); + whenMerged { cp -> + def removeTheseToo = [] + HashMap alreadyAddedSrcPath = new HashMap<>(); + cp.entries.each { entry -> + // This conditional removes all src classpathentries that a) have already been added or b) aren't "src" or "test". + // e.g. this removes the resources dir being copied into bin/main, bin/test AND bin/clover + // we add the resources and help/help dirs in as libs afterwards (see below) + if (entry.kind == 'src') { + if (alreadyAddedSrcPath.getAt(entry.path) || !(entry.path == bareSourceDir || entry.path == bareTestSourceDir)) { + removeTheseToo += entry + } else { + alreadyAddedSrcPath.putAt(entry.path, true) + } + } - // 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) - } - } + 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) + //cp.entries += new Output("${eclipse_bin_dir}/main") + if (file(helpSourceDir).isDirectory()) { + cp.entries += new Library(fileReference(helpSourceDir)) } + if (file(resourceDir).isDirectory()) { + cp.entries += new Library(fileReference(resourceDir)) } - } - // withXml changes ignored by buildship, these add the "test=true" attribute - withXml { - def node = it.asNode() + HashMap alreadyAddedLibPath = new HashMap<>(); - def srcTestAttributes - node.children().each{ cpe -> - def attributes = cpe.attributes() - if (attributes.get("kind") == "src" && attributes.get("path") == "test") { - srcTestAttributes = cpe.find { a -> a.name() == "attributes" } - return + sourceSets.main.compileClasspath.findAll { it.name.endsWith(".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, especially if they don't exist + return false // groovy "continue" in .any closure } - } - def addTestAttribute = true - srcTestAttributes.each{a -> - if (a.name() == "attribute" && a.attributes().getAt("name") == "test") { - addTestAttribute = false + def itPath = it.toString() + if (itPath.startsWith("${jalviewDirAbsolutePath}/")) { + // make relative path + itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) + } + if (alreadyAddedLibPath.get(itPath)) { + //println("Not adding duplicate entry "+itPath) + } else { + //println("Adding entry "+itPath) + cp.entries += new Library(fileReference(itPath)) + alreadyAddedLibPath.put(itPath, true) } - } - if (addTestAttribute) { - srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"])) } - node.children().each{ cpe -> - def attributes = cpe.attributes() - if (attributes.get("kind") == "lib" && attributes.get("path").startsWith("utils/")) { - cpe.appendNode('attributes') - .appendNode('attribute', [name:"test", value:"true"]) + //fileTree(dir: "$jalviewDir/$utilsDir", include: ["test*/*.jar"]).each { + sourceSets.test.compileClasspath.findAll { it.name.endsWith(".jar") }.any { + //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 "continue" in .any closure + } + + def itPath = it.toString() + if (itPath.startsWith("${jalviewDirAbsolutePath}/")) { + itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) + } + if (alreadyAddedLibPath.get(itPath)) { + // don't duplicate + } else { + def lib = new Library(fileReference(itPath)) + lib.entryAttributes["test"] = "true" + cp.entries += lib + alreadyAddedLibPath.put(itPath, true) } } - } // withXML + + } // whenMerged + } // file containers 'org.eclipse.buildship.core.gradleclasspathcontainer' + } // classpath jdt { @@ -431,10 +516,11 @@ eclipse { targetCompatibility = compile_target_compatibility javaRuntimeName = eclipse_java_runtime_name + // add in jalview project specific properties/preferences into eclipse core preferences file { withProperties { props -> def jalview_prefs = new Properties() - def ins = new FileInputStream(jalviewDirAbsolutePath+"/"+eclipse_extra_jdt_prefs_file) + def ins = new FileInputStream("${jalviewDirAbsolutePath}/${eclipse_extra_jdt_prefs_file}") jalview_prefs.load(ins) ins.close() jalview_prefs.forEach { t, v -> @@ -444,15 +530,21 @@ eclipse { } } } - } - //synchronizationTasks eclipseClasspath - //autoBuildTasks eclipseClasspath + } // jdt + + if (IN_ECLIPSE) { + // Don't want these to be activated if in headless build + synchronizationTasks "eclipseSynchronizationTask" + autoBuildTasks "eclipseAutoBuildTask" + + } } + task cloverInstr() { // only instrument source, we build test classes as normal - inputs.files files (sourceSets.main.allJava) // , fileTree(dir:"$jalviewDir/$testSourceDir", include: ["**/*.java"])) + inputs.files files (sourceSets.main.allJava) // , fileTree(dir: testSourceDir, include: ["**/*.java"])) outputs.dir cloverInstrDir doFirst { @@ -489,7 +581,6 @@ task cloverReport { com.atlassian.clover.reporters.xml.XMLReporter.runReport(args) } } - // end clover bits @@ -504,6 +595,7 @@ compileJava { } + compileTestJava { if (use_clover) { dependsOn compileCloverJava @@ -531,21 +623,29 @@ compileCloverJava { classpath += configurations.cloverRuntime } + clean { - delete sourceSets.main.java.outputDir + doFirst { + delete sourceSets.main.java.outputDir + } } + cleanTest { - delete sourceSets.test.java.outputDir - delete cloverInstrDir + doFirst { + delete sourceSets.test.java.outputDir + delete cloverInstrDir + } } + // format is a string like date.format("dd MMMM yyyy") def getDate(format) { def date = new Date() return date.format(format) } + task setGitVals { def hashStdOut = new ByteArrayOutputStream() exec { @@ -561,36 +661,40 @@ task setGitVals { ignoreExitValue true } - project.ext.gitHash = hashStdOut.toString().trim() - project.ext.gitBranch = branchStdOut.toString().trim() + gitHash = hashStdOut.toString().trim() + gitBranch = branchStdOut.toString().trim() outputs.upToDateWhen { false } } + task createBuildProperties(type: WriteProperties) { dependsOn setGitVals - inputs.dir("$jalviewDir/$sourceDir") - inputs.dir("$classes") - inputs.dir("$jalviewDir/$resourceDir") + inputs.dir(sourceDir) + inputs.dir(resourceDir) + file(buildProperties).getParentFile().mkdirs() 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") property "BUILD_DATE", getDate("HH:mm:ss dd MMMM yyyy") property "VERSION", JALVIEW_VERSION - property "INSTALLATION", INSTALLATION+" git-commit:"+project.ext.gitHash+" ["+project.ext.gitBranch+"]" + property "INSTALLATION", INSTALLATION+" git-commit:"+gitHash+" ["+gitBranch+"]" outputs.file(outputFile) } -def buildingHTML = "$jalviewDir/$docDir/building.html" -task deleteBuildingHTML(type: Delete) { - delete buildingHTML + +task cleanBuildingHTML(type: Delete) { + doFirst { + delete buildingHTML + } } + task convertBuildingMD(type: Exec) { - dependsOn deleteBuildingHTML - def buildingMD = "$jalviewDir/$docDir/building.md" - def css = "$jalviewDir/$docDir/github.css" + dependsOn cleanBuildingHTML + def buildingMD = "${jalviewDir}/${docDir}/building.md" + def css = "${jalviewDir}/${docDir}/github.css" def pandoc = null pandoc_exec.split(",").each { @@ -610,7 +714,7 @@ task convertBuildingMD(type: Exec) { commandLine pandoc, '-s', '-o', buildingHTML, '--metadata', 'pagetitle="Building Jalview from Source"', '--toc', '-H', css, buildingMD } else { println("Cannot find pandoc. Skipping convert building.md to HTML") - throw new StopExecutionException() + throw new StopExecutionException("Cannot find pandoc. Skipping convert building.md to HTML") } } @@ -620,33 +724,44 @@ task convertBuildingMD(type: Exec) { inputs.file(css) outputs.file(buildingHTML) } + + clean { - delete buildingHTML + doFirst { + delete buildingHTML + } } + task syncDocs(type: Sync) { dependsOn convertBuildingMD - def syncDir = "$classes/$docDir" - from fileTree("$jalviewDir/$docDir") + def syncDir = "${classesDir}/${docDir}" + from fileTree("${jalviewDir}/${docDir}") into syncDir } -def helpFile = "$classes/$helpDir/help.jhm" task copyHelp(type: Copy) { - def inputDir = "$jalviewDir/$helpParentDir/$helpDir" - def outputDir = "$classes/$helpDir" + def inputDir = helpSourceDir + def outputDir = "${classesDir}/${helpDir}" from(inputDir) { exclude '**/*.gif' - exclude '**/*.jpg' - exclude '**/*.png' - filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION,'Year-Rel': getDate("yyyy")]) + exclude '**/*.jpg' + exclude '**/*.png' + filter(ReplaceTokens, + beginToken: '$$', + endToken: '$$', + tokens: [ + 'Version-Rel': JALVIEW_VERSION, + 'Year-Rel': getDate("yyyy") + ] + ) } from(inputDir) { include '**/*.gif' - include '**/*.jpg' - include '**/*.png' + include '**/*.jpg' + include '**/*.png' } into outputDir @@ -655,22 +770,24 @@ task copyHelp(type: Copy) { outputs.dir(outputDir) } + task syncLib(type: Sync) { - def syncDir = "$classes/$libDistDir" - from fileTree("$jalviewDir/$libDistDir") + def syncDir = "${classesDir}/${libDistDir}" + from fileTree("${jalviewDir}/${libDistDir}") into syncDir } + task syncResources(type: Sync) { - from "$jalviewDir/$resourceDir" + from resourceDir include "**/*.*" - exclude "install4j" - into "$classes" + into "${classesDir}" preserve { include "**" } } + task prepare { dependsOn syncResources dependsOn syncDocs @@ -701,65 +818,76 @@ test { sourceCompatibility = compile_source_compatibility targetCompatibility = compile_target_compatibility jvmArgs += additional_compiler_args - print ("Setting target compatibility to "+targetCompatibility+"\n") + } + task buildIndices(type: JavaExec) { dependsOn copyHelp classpath = sourceSets.main.compileClasspath main = "com.sun.java.help.search.Indexer" - workingDir = "$classes/$helpDir" + workingDir = "${classesDir}/${helpDir}" def argDir = "html" args = [ argDir ] - inputs.dir("$workingDir/$argDir") - - outputs.dir("$classes/doc") - outputs.dir("$classes/help") - outputs.file("$workingDir/JavaHelpSearch/DOCS") - outputs.file("$workingDir/JavaHelpSearch/DOCS.TAB") - outputs.file("$workingDir/JavaHelpSearch/OFFSETS") - outputs.file("$workingDir/JavaHelpSearch/POSITIONS") - outputs.file("$workingDir/JavaHelpSearch/SCHEMA") - outputs.file("$workingDir/JavaHelpSearch/TMAP") + inputs.dir("${workingDir}/${argDir}") + + outputs.dir("${classesDir}/doc") + outputs.dir("${classesDir}/help") + outputs.file("${workingDir}/JavaHelpSearch/DOCS") + outputs.file("${workingDir}/JavaHelpSearch/DOCS.TAB") + outputs.file("${workingDir}/JavaHelpSearch/OFFSETS") + outputs.file("${workingDir}/JavaHelpSearch/POSITIONS") + outputs.file("${workingDir}/JavaHelpSearch/SCHEMA") + outputs.file("${workingDir}/JavaHelpSearch/TMAP") } + task compileLinkCheck(type: JavaCompile) { options.fork = true - classpath = files("$jalviewDir/$utilsDir") - destinationDir = file("$jalviewDir/$utilsDir") - source = fileTree(dir: "$jalviewDir/$utilsDir", include: ["HelpLinksChecker.java", "BufferedLineReader.java"]) - - inputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.java") - inputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.java") - outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.class") - outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class") + classpath = files("${jalviewDir}/${utilsDir}") + destinationDir = file("${jalviewDir}/${utilsDir}") + source = fileTree(dir: "${jalviewDir}/${utilsDir}", include: ["HelpLinksChecker.java", "BufferedLineReader.java"]) + + inputs.file("${jalviewDir}/${utilsDir}/HelpLinksChecker.java") + inputs.file("${jalviewDir}/${utilsDir}/HelpLinksChecker.java") + outputs.file("${jalviewDir}/${utilsDir}/HelpLinksChecker.class") + outputs.file("${jalviewDir}/${utilsDir}/BufferedLineReader.class") } -def helplinkscheckertouchfile = file("$jalviewDir/$utilsDir/HelpLinksChecker.touch") + task linkCheck(type: JavaExec) { dependsOn prepare, compileLinkCheck - classpath = files("$jalviewDir/$utilsDir") + + def helpLinksCheckerOutFile = file("${jalviewDir}/${utilsDir}/HelpLinksChecker.out") + classpath = files("${jalviewDir}/${utilsDir}") main = "HelpLinksChecker" workingDir = jalviewDir - def help = "$classes/$helpDir" - args = [ "$classes/$helpDir", "-nointernet" ] - - doLast { - helplinkscheckertouchfile.createNewFile() - } - - inputs.dir("$classes/$helpDir") - outputs.file(helplinkscheckertouchfile) + def help = "${classesDir}/${helpDir}" + args = [ "${classesDir}/${helpDir}", "-nointernet" ] + + def outFOS = new FileOutputStream(helpLinksCheckerOutFile, false) // false == don't append + def errFOS = outFOS + standardOutput = new org.apache.tools.ant.util.TeeOutputStream( + outFOS, + standardOutput) + errorOutput = new org.apache.tools.ant.util.TeeOutputStream( + outFOS, + errorOutput) + + inputs.dir("${classesDir}/${helpDir}") + outputs.file(helpLinksCheckerOutFile) } // import the pubhtmlhelp target -ant.properties.basedir = "$jalviewDir" -ant.properties.helpBuildDir = jalviewDirAbsolutePath+"/$classes/$helpDir" -ant.importBuild "$utilsDir/publishHelp.xml" +ant.properties.basedir = "${jalviewDir}" +ant.properties.helpBuildDir = "${jalviewDirAbsolutePath}/${classes_dir}/${helpDir}" +ant.importBuild "${utilsDir}/publishHelp.xml" task cleanPackageDir(type: Delete) { - delete fileTree("$jalviewDir/$packageDir").include("*.jar") + doFirst { + delete fileTree(dir: "${jalviewDir}/${packageDir}", include: "*.jar") + } } jar { @@ -774,7 +902,7 @@ jar { "Codebase": application_codebase } - destinationDir = file("$jalviewDir/$packageDir") + destinationDir = file("${jalviewDir}/${packageDir}") archiveName = rootProject.name+".jar" exclude "cache*/**" @@ -783,24 +911,27 @@ jar { exclude "**/*.jar" exclude "**/*.jar.*" - inputs.dir("$classes") - outputs.file("$jalviewDir/$packageDir/$archiveName") + inputs.dir(classesDir) + outputs.file("${jalviewDir}/${packageDir}/${archiveName}") } + task copyJars(type: Copy) { - from fileTree("$classes").include("**/*.jar").include("*.jar").files - into "$jalviewDir/$packageDir" + from fileTree(dir: classesDir, include: "**/*.jar").files + into "${jalviewDir}/${packageDir}" } + // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well task syncJars(type: Sync) { - from fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").files - into "$jalviewDir/$packageDir" + from fileTree(dir: "${jalviewDir}/${libDistDir}", include: "**/*.jar").files + into "${jalviewDir}/${packageDir}" preserve { include jar.archiveName } } + task makeDist { group = "build" description = "Put all required libraries in dist" @@ -810,9 +941,10 @@ task makeDist { dependsOn cleanPackageDir dependsOn syncJars dependsOn jar - outputs.dir("$jalviewDir/$packageDir") + outputs.dir("${jalviewDir}/${packageDir}") } + task cleanDist { dependsOn cleanPackageDir dependsOn cleanTest @@ -824,7 +956,7 @@ shadowJar { if (buildDist) { dependsOn makeDist } - from ("$jalviewDir/$libDistDir") { + from ("${jalviewDir}/${libDistDir}") { include("*.jar") } manifest { @@ -836,6 +968,7 @@ shadowJar { 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" @@ -843,33 +976,33 @@ task getdownWebsite() { 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 getdownResourceDir = getdownResourceDir + def getdownAppDir = getdownAppDir def getdownResourceFilenames = [] doFirst { + // clean the getdown website and files dir before creating getdown folders + delete getdownWebsiteDir + delete getdownFilesDir + copy { from buildProperties - rename(buildPropertiesFile, getdown_build_properties) - into project.ext.getdownAppDir + rename(build_properties_file, getdown_build_properties) + into getdownAppDir } - getdownWebsiteResourceFilenames += getdown_app_dir+"/"+getdown_build_properties + getdownWebsiteResourceFilenames += "${getdown_app_dir}/${getdown_build_properties}" // go through properties looking for getdown_txt_... def props = project.properties.sort { it.key } - if (getdown_alt_java_min_version.length() > 0) { - props.put("getdown_txt_java_min_version", getdown_alt_java_min_version) - } - if (getdown_alt_java_max_version.length() > 0) { - props.put("getdown_txt_java_max_version", getdown_alt_java_max_version) - } - props.put("getdown_txt_multi_java_location", getdown_alt_multi_java_location) + if (getdown_alt_java_min_version.length() > 0) { + props.put("getdown_txt_java_min_version", getdown_alt_java_min_version) + } + if (getdown_alt_java_max_version.length() > 0) { + props.put("getdown_txt_java_max_version", getdown_alt_java_max_version) + } + props.put("getdown_txt_multi_java_location", getdown_alt_multi_java_location) props.put("getdown_txt_appbase", getdown_app_base) props.each{ prop, val -> @@ -877,7 +1010,7 @@ task getdownWebsite() { if (prop.startsWith("getdown_txt_multi_")) { def key = prop.substring(18) val.split(",").each{ v -> - def line = key + " = " + v + "\n" + def line = "${key} = ${v}\n" getdownTextString += line } } else { @@ -889,16 +1022,16 @@ task getdownWebsite() { r = file(val) } else if (val.indexOf('/') > 0) { // relative path (relative to jalviewDir) - r = file( jalviewDir + '/' + val ) + r = file( "${jalviewDir}/${val}" ) } if (r.exists()) { - val = getdown_resource_dir + '/' + r.getName() + val = "${getdown_resource_dir}/" + r.getName() getdownWebsiteResourceFilenames += val getdownResourceFilenames += r.getPath() } } if (! prop.startsWith("getdown_txt_resource")) { - def line = prop.substring(12) + " = " + val + "\n" + def line = prop.substring(12) + " = ${val}\n" getdownTextString += line } } @@ -906,12 +1039,12 @@ task getdownWebsite() { } getdownWebsiteResourceFilenames.each{ filename -> - getdownTextString += "resource = "+filename+"\n" + getdownTextString += "resource = ${filename}\n" } getdownResourceFilenames.each{ filename -> copy { from filename - into project.ext.getdownResourceDir + into getdownResourceDir } } @@ -925,24 +1058,26 @@ task getdownWebsite() { } } codeFiles.sort().each{f -> - def line = "code = " + getdown_app_dir + '/' + f.getName() + "\n" + def name = f.getName() + def line = "code = ${getdown_app_dir}/${name}\n" getdownTextString += line copy { from f.getPath() - into project.ext.getdownAppDir + into getdownAppDir } } // NOT USING MODULES YET, EVERYTHING SHOULD BE IN dist /* if (JAVA_VERSION.equals("11")) { - def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles() + def j11libFiles = fileTree(dir: "${jalviewDir}/${j11libDir}", include: ["*.jar"]).getFiles() j11libFiles.sort().each{f -> - def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n" + def name = f.getName() + def line = "code = ${getdown_j11lib_dir}/${name}\n" getdownTextString += line copy { from f.getPath() - into project.ext.getdownJ11libDir + into getdownJ11libDir } } } @@ -950,19 +1085,19 @@ task getdownWebsite() { // 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. //getdownTextString += "class = " + file(getdownLauncher).getName() + "\n" - getdownTextString += "resource = " + getdown_launcher_new + "\n" - getdownTextString += "class = " + mainClass + "\n" + getdownTextString += "resource = ${getdown_launcher_new}\n" + getdownTextString += "class = ${mainClass}\n" - def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt") + def getdown_txt = file("${getdownWebsiteDir}/getdown.txt") getdown_txt.write(getdownTextString) - def launch_jvl = file(project.ext.getdownWebsiteDir + "/" + getdown_launch_jvl) + def launch_jvl = file("${getdownWebsiteDir}/${getdown_launch_jvl}") launch_jvl.write("appbase="+props.get("getdown_txt_appbase")) copy { from getdownLauncher rename(file(getdownLauncher).getName(), getdown_launcher_new) - into project.ext.getdownWebsiteDir + into getdownWebsiteDir } copy { @@ -970,14 +1105,14 @@ task getdownWebsite() { if (file(getdownLauncher).getName() != getdown_launcher) { rename(file(getdownLauncher).getName(), getdown_launcher) } - into project.ext.getdownWebsiteDir + into getdownWebsiteDir } if (! (CHANNEL.startsWith("ARCHIVE") || CHANNEL.startsWith("DEVELOP"))) { copy { from getdown_txt from getdownLauncher - from getdownWebsiteDir+"/"+getdown_build_properties + from "${getdownWebsiteDir}/${getdown_build_properties}" if (file(getdownLauncher).getName() != getdown_launcher) { rename(file(getdownLauncher).getName(), getdown_launcher) } @@ -994,7 +1129,7 @@ task getdownWebsite() { from getdown_txt from launch_jvl from getdownLauncher - from getdownWebsiteDir+"/"+getdown_build_properties + from "${getdownWebsiteDir}/${getdown_build_properties}" if (file(getdownLauncher).getName() != getdown_launcher) { rename(file(getdownLauncher).getName(), getdown_launcher) } @@ -1002,39 +1137,41 @@ task getdownWebsite() { } copy { - from getdownResourceDir - into project.ext.getdownFilesDir + '/' + getdown_resource_dir + from getdownResourceDir + into "${getdownFilesDir}/${getdown_resource_dir}" } } if (buildDist) { - inputs.dir(jalviewDir + '/' + packageDir) + inputs.dir("${jalviewDir}/${packageDir}") } - outputs.dir(project.ext.getdownWebsiteDir) - outputs.dir(project.ext.getdownFilesDir) + outputs.dir(getdownWebsiteDir) + outputs.dir(getdownFilesDir) } + task getdownDigest(type: JavaExec) { group = "distribution" description = "Digest the getdown website folder" dependsOn getdownWebsite doFirst { - classpath = files(getdownWebsiteDir + '/' + getdown_launcher) + classpath = files("${getdownWebsiteDir}/${getdown_launcher}") } main = "com.threerings.getdown.tools.Digester" - args project.ext.getdownWebsiteDir - inputs.dir(project.ext.getdownWebsiteDir) - outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt") + args getdownWebsiteDir + inputs.dir(getdownWebsiteDir) + outputs.file("${getdownWebsiteDir}/digest2.txt") } + task getdown() { 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("/")?"":"/") + def fromDir = getdownWebsiteDir + (getdownWebsiteDir.endsWith('/')?'':'/') + def toDir = "${getdown_rsync_dest}/${getdownDir}" + (getdownDir.endsWith('/')?'':'/') println "LIKELY RSYNC COMMAND:" println "mkdir -p '$toDir'\nrsync -avh --delete '$fromDir' '$toDir'" if (RUNRSYNC == "true") { @@ -1049,131 +1186,145 @@ task getdown() { } } + clean { - delete project.ext.getdownWebsiteDir - delete project.ext.getdownFilesDir + doFirst { + delete getdownWebsiteDir + delete getdownFilesDir + } } + install4j { - def install4jHomeDir = "/opt/install4j" - def hostname = "hostname".execute().text.trim() - if (hostname.equals("jv-bamboo")) { - install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j" - } else if (OperatingSystem.current().isMacOsX()) { - install4jHomeDir = '/Applications/install4j.app/Contents/Resources/app' - if (! file(install4jHomeDir).exists()) { - install4jHomeDir = System.getProperty("user.home")+install4jHomeDir - } - } else if (OperatingSystem.current().isLinux()) { + if (file(install4jHomeDir).exists()) { + // good to go! + } else if (file(System.getProperty("user.home")+"/buildtools/install4j").exists()) { install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j" + } else if (file("/Applications/install4j.app/Contents/Resources/app").exists()) { + install4jHomeDir = "/Applications/install4j.app/Contents/Resources/app" } - installDir = file(install4jHomeDir) - mediaTypes = Arrays.asList(install4jMediaTypes.split(",")) - if (install4jFaster.equals("true")) { + installDir(file(install4jHomeDir)) + + mediaTypes = Arrays.asList(install4j_media_types.split(",")) + if (install4j_faster.equals("true")) { faster = true } } -def install4jConf -def macosJavaVMDir -def macosJavaVMTgz -def windowsJavaVMDir -def windowsJavaVMTgz -def install4jDir = "$jalviewDir/$install4jResourceDir" -def install4jConfFile = "jalview-installers-java"+JAVA_VERSION+".install4j" -install4jConf = "$install4jDir/$install4jConfFile" task copyInstall4jTemplate(type: Copy) { - macosJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/getdown/macos-jre"+JAVA_VERSION+"/jre" - macosJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/macos-jre"+JAVA_VERSION+".tar.gz" - windowsJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/getdown/windows-jre"+JAVA_VERSION+"/jre" - windowsJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/windows-jre"+JAVA_VERSION+".tar.gz" from (install4jDir) { - include install4jTemplate - 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, - '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 - ] + include install4j_template + rename (install4j_template, install4jConfFileName) + 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': install4j_info_plist_file_associations, + 'COPYRIGHT_MESSAGE': install4j_copyright_message, + 'MACOS_BUNDLE_ID': install4j_macOS_bundle_id, + '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"']) - filter(ReplaceTokens, beginToken: 'runPostProcessor="true" ',endToken: 'Processor', tokens: ['post':'runPostProcessor="false" postProcessor']) + if (OSX_KEYPASS == "") { + filter(ReplaceTokens, + beginToken: 'codeSigning macEnabled="', + endToken: '"', + tokens: [ + 'true': 'codeSigning macEnabled="false"' + ] + ) + filter(ReplaceTokens, + beginToken: 'runPostProcessor="true" ', + endToken: 'Processor', + tokens: [ + 'post': 'runPostProcessor="false" postProcessor' + ] + ) } } into install4jDir - outputs.files(install4jConf) + outputs.files(install4jConfFile) doLast { // include file associations in installer - def installerFileAssociationsXml = file("$install4jDir/$install4jInstallerFileAssociations").text + def installerFileAssociationsXml = file("${install4jDir}/${install4j_installer_file_associations}").text ant.replaceregexp( byline: false, flags: "s", match: '', replace: installerFileAssociationsXml, - file: install4jConf + file: install4jConfFile ) /* // include uninstaller applescript app files in dmg - def installerDMGUninstallerXml = file("$install4jDir/$install4jDMGUninstallerAppFiles").text + def installerDMGUninstallerXml = file("$install4jDir/$install4j_DMG_uninstaller_app_files").text ant.replaceregexp( byline: false, flags: "s", match: '', replace: installerDMGUninstallerXml, - file: install4jConf + file: install4jConfFile ) */ } } + +clean { + doFirst { + delete install4jConfFile + } +} + + task installers(type: com.install4j.gradle.Install4jTask) { group = "distribution" description = "Create the install4j installers" dependsOn getdown dependsOn copyInstall4jTemplate - projectFile = file(install4jConf) - println("Using projectFile "+projectFile) + projectFile = file(install4jConfFile) variables = [majorVersion: version.substring(2, 11), build: 001, OSX_KEYSTORE: OSX_KEYSTORE, JSIGN_SH: JSIGN_SH] - destination = "$jalviewDir/$install4jBuildDir/$JAVA_VERSION" + destination = "${jalviewDir}/${install4j_build_dir}/${JAVA_VERSION}" buildSelected = true if (OSX_KEYPASS) { macKeystorePassword=OSX_KEYPASS + } + doFirst { + println("Using projectFile "+projectFile) } - inputs.dir(project.ext.getdownWebsiteDir) - inputs.file(install4jConf) + inputs.dir(getdownWebsiteDir) + inputs.file(install4jConfFile) inputs.dir(macosJavaVMDir) inputs.dir(windowsJavaVMDir) - outputs.dir("$jalviewDir/$install4jBuildDir/$JAVA_VERSION") - + outputs.dir("${jalviewDir}/${install4j_build_dir}/${JAVA_VERSION}") } -clean { - delete install4jConf -} task sourceDist (type: Tar) { def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_") - def outputFileName = project.name + "_" + VERSION_UNDERSCORES + ".tar.gz" + def outputFileName = "${project.name}_${VERSION_UNDERSCORES}.tar.gz" // cater for buildship < 3.1 [3.0.1 is max version in eclipse 2018-09] try { archiveFileName = outputFileName @@ -1190,7 +1341,7 @@ task sourceDist (type: Tar) { ,"benchmarking/*" ,"**/.*" ,"*.class" - ,"**/*.class","$j11modDir/**/*.jar","appletlib","**/*locales" + ,"**/*.class","${j11modDir}/**/*.jar","appletlib","**/*locales" ,"*locales/**", ,"utils/InstallAnywhere"] def PROCESS_FILES=[ "AUTHORS", @@ -1216,34 +1367,44 @@ task sourceDist (type: Tar) { from(jalviewDir) { exclude (EXCLUDE_FILES) include (PROCESS_FILES) - filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION,'Year-Rel': getDate("yyyy")]) + filter(ReplaceTokens, + beginToken: '$$', + endToken: '$$', + tokens: [ + 'Version-Rel': JALVIEW_VERSION, + 'Year-Rel': getDate("yyyy") + ] + ) } from(jalviewDir) { exclude (EXCLUDE_FILES) exclude (PROCESS_FILES) - exclude ("appletlib") - exclude ("**/*locales") - exclude ("*locales/**") - exclude ("utils/InstallAnywhere") + exclude ("appletlib") + exclude ("**/*locales") + exclude ("*locales/**") + exclude ("utils/InstallAnywhere") exclude (getdown_files_dir) - exclude (getdown_website_dir) + exclude (getdown_website_dir) - // exluding these as not using jars as modules yet - exclude ("$j11modDir/**/*.jar") -} -// from (jalviewDir) { -// // explicit includes for stuff that seemed to not get included -// include(fileTree("test/**/*.")) -// exclude(EXCLUDE_FILES) -// exclude(PROCESS_FILES) -// } + // exluding these as not using jars as modules yet + exclude ("${j11modDir}/**/*.jar") + } + // from (jalviewDir) { + // // explicit includes for stuff that seemed to not get included + // include(fileTree("test/**/*.")) + // exclude(EXCLUDE_FILES) + // exclude(PROCESS_FILES) + // } } + task helppages { dependsOn copyHelp dependsOn pubhtmlhelp - inputs.dir("$classes/$helpDir") - outputs.dir("$helpOutputDir") + inputs.dir("${classesDir}/${helpDir}") + outputs.dir("${buildDir}/distributions/${helpDir}") } + +// LARGE AMOUNT OF JALVIEWJS STUFF DELETED HERE diff --git a/gradle.properties b/gradle.properties index 2dbdad3..3710b59 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,6 +2,13 @@ jalviewDir = . #JAVA_VERSION = 1.8 JAVA_VERSION = 11 + +source_dir = src +#source_dir = utils/jalviewjs/test/src + +test_source_dir = test +#test_source_dir = utils/jalviewjs/test/test + JALVIEW_VERSION = DEVELOPMENT INSTALLATION = Source jalview_keystore = keys/.keystore @@ -18,14 +25,12 @@ testngGroups = Functional j8libDir = j8lib j11libDir = j11lib -resourceDir = resources -helpParentDir = help -helpDir = help -helpOutputDir = build/distributions/help +resource_dir = resources +help_parent_dir = help +help_dir = help docDir = doc -sourceDir = src schemaDir = schemas -classesDir = classes +classes_dir = classes examplesDir = examples clover = false use_clover = false @@ -35,11 +40,10 @@ packageDir = dist ARCHIVEDIR = outputJar = jalview.jar -testSourceDir = test testOutputDir = tests utilsDir = utils -buildPropertiesFile = .build_properties +build_properties_file = .build_properties application_codebase = *.jalview.org mainClass = jalview.bin.Jalview shadowJarMainClass = jalview.bin.Launcher @@ -106,23 +110,22 @@ j11libDir = j11lib j11modDir = j11mod j11modules = com.sun.istack.runtime,com.sun.xml.bind,com.sun.xml.fastinfoset,com.sun.xml.streambuffer,com.sun.xml.txw2,com.sun.xml.ws.policy,java.activation,java.annotation,java.base,java.compiler,java.datatransfer,java.desktop,java.logging,java.management,java.management.rmi,java.naming,java.prefs,java.rmi,java.scripting,java.security.sasl,java.sql,java.xml,java.xml.bind,java.xml.soap,java.xml.ws,javax.jws,jdk.httpserver,jdk.jsobject,jdk.unsupported,jdk.xml.dom,org.jvnet.mimepull,org.jvnet.staxex,javax.servlet.api,java.ws.rs -install4jCopyrightMessage = ... -install4jMacOSBundleId = org.jalview.jalview-desktop -install4jResourceDir = utils/install4j -install4jTemplate = install4j_template.install4j -install4jInfoPlistFileAssociations = file_associations_auto-Info_plist.xml -install4jInstallerFileAssociations = file_associations_auto-install4j.xml -install4jDMGUninstallerAppFiles = uninstall_old_jalview_files.xml -install4jBuildDir = build/install4j -install4jMediaTypes = windows,macosArchive,linuxRPM,linuxDeb,unixArchive,unixInstaller -install4jFaster = false +install4j_home_dir = ~/buildtools/install4j8 +install4j_copyright_message = ... +install4j_macOS_bundle_id = org.jalview.jalview-desktop +install4j_utils_dir = utils/install4j +install4j_template = install4j_template.install4j +install4j_info_plist_file_associations = file_associations_auto-Info_plist.xml +install4j_installer_file_associations = file_associations_auto-install4j.xml +#install4j_DMG_uninstaller_app_files = uninstall_old_jalview_files.xml +install4j_build_dir = build/install4j +install4j_media_types = windows,macosArchive,linuxRPM,linuxDeb,unixArchive,unixInstaller +install4j_faster = false OSX_KEYSTORE = OSX_KEYPASS = JSIGN_SH = echo -eclipse_extra_jdt_prefs_file = .settings/org.eclipse.jdt.core.jalview.prefs - pandoc_exec = /usr/local/bin/pandoc,/usr/bin/pandoc dev = false @@ -139,4 +142,72 @@ RUNRSYNC=false bamboo_channelbase = https://builds.jalview.org/browse bamboo_planKey = bamboo_getdown_channel_suffix = /latest/artifact/shared/getdown-channel - \ No newline at end of file + +eclipse_extra_jdt_prefs_file = .settings/org.eclipse.jdt.core.jalview.prefs +eclipse_project_name = jalview +eclipse_bin_dir = bin +eclipse_debug = false + +# for developing in Eclipse as IDE, set this to automatically copy current swingjs/net.sf.j2s.core.jar to your dropins dir +jalviewjs_eclipseIDE_auto_copy_j2s_plugin = false +# Override this in a local.properties file +jalviewjs_eclipse_root = ~/buildtools/eclipse/jee-2019-09 + +jalviewjs_eclipse_dropins_dir = utils/jalviewjs/eclipse/dropins +jalviewjs_swingjs_zip = swingjs/SwingJS-site.zip +jalviewjs_j2s_plugin = swingjs/net.sf.j2s.core.jar +jalviewjs_libjs_dir = utils/jalviewjs/libjs +jalviewjs_site_resource_dir = utils/jalviewjs/site-resources +jalviewjs_classlists_dir = utils/jalviewjs/classlists +jalviewjs_classlist_jalview = utils/jalviewjs/_j2sclasslist.txt +jalviewjs_j2s_settings = .j2s +#jalviewjs_eclipse_workspace = ~/tmp/eclipse-workspace +# these 3 files/dirs found in build/jalviewjs +jalviewjs_eclipse_tmp_dropins_dir = eclipse_dropins +jalviewjs_eclipse_workspace_location_file = eclipse_workspace_location +jalviewjs_site_dir = site +# these dirs are subdirs of the site dir +jalviewjs_swingjs_subdir = swingjs +jalviewjs_j2s_subdir = swingjs/j2s +jalviewjs_js_subdir = swingjs/js +#jalviewjs_eclipseBuildArg = build +jalviewjs_eclipse_build_arg = cleanBuild +jalviewjs_server_port = 9001 +jalviewjs_server_wait = 30 +jalviewjs_server_resource = /jalview_bin_Jalview.html +jalviewjs_core_name = _jalview +jalviewjs_name = JalviewJS +jalviewjs_core_key = core +#jalviewjs_core_key = preloadCore + +j2s.compiler.status = enable +#j2s.site.directory = null ## site defined from buildDir+'/jalviewjs/'+jalviewjs_site_dir +#j2s.log.methods.declared = j2s_methods_declared.log +#j2s.log.methods.called = j2s_methods_called.log +#a semicolon-separated list of package-level file paths to be excluded +j2s.excluded.paths = test;testng;util +#j2s.include.tests = true +#j2s.testing = null +#j2s.compiler.nonqualified.packages = null +#j2s.compiler.nonqualified.classes = null +#j2s.compiler.mode = debug +#a semicolon-separated list of package (foo.) or class (foo.bar) replacements to be made +j2s.class.replacements = org.apache.log4j.->jalview.javascript.log4j. +j2s.template.html = utils/jalviewjs/template.html +j2s_coretemplate_html = utils/jalviewjs/coretemplate.html +#output file name for logging methods declared - delete the file to regenerate a listing +#j2s.prop.j2s.log.methods.declared=swingjs/methodsDeclared_csv +#output file name for logging methods called - delete the file to regenerate a listing +#j2s.prop.j2s.log.methods_called=swingjs/methodsCalled_csv +#if set, every instance of methods called will be logged +#otherwise, only the first call to a method will be logged +#output will be comma-separated: called method,caller class +#j2s.prop.j2s.log.all.calls=true + +jalviewjs_j2s_transpile_stdout = j2s-transpile.out +#jalviewjs_j2s_stderr = j2s-transpile.err # all going into out +jalviewjs_j2s_to_console = true +jalviewjs_j2s_closure_stdout = j2s-closure.out + + +testp=gradle.properties -- 1.7.10.2