X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=build.gradle;h=ed3ace3a3c3238f6b19219677608cecc2f3b889b;hb=6f9d7b98943ecba292a9c0dd65b30c4d8150c98f;hp=8b77be8ef3367a1e3436eed2e79022238fc40f9b;hpb=df74daf9d2a0f8e5911311589002774c73fb6d1a;p=jalview.git diff --git a/build.gradle b/build.gradle index 8b77be8..ed3ace3 100644 --- a/build.gradle +++ b/build.gradle @@ -11,6 +11,7 @@ buildscript { plugins { id 'java' id 'application' + id 'eclipse' id 'com.github.johnrengelman.shadow' version '4.0.3' id 'com.install4j.gradle' version '7.0.9' } @@ -27,6 +28,7 @@ repositories { mainClassName = launcherClass def cloverInstrDir = file("$buildDir/$cloverSourcesInstrDir") def classes = "$jalviewDir/$classesDir" + if (clover.equals("true")) { use_clover = true classes = "$buildDir/$cloverClassesDir" @@ -37,26 +39,55 @@ if (clover.equals("true")) { // configure classpath/args for j8/j11 compilation +def jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath() def libDir def libDistDir def compile_source_compatibility def compile_target_compatibility + +ext { + // where the getdown channel will be built. + // TODO: consider allowing this expression to be overrriden by -P arg + getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir + '/' + JAVA_VERSION + '/' + getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir + getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir + getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir + getdownLauncher = jalviewDir + '/' + getdown_launcher + getdownFilesDir = jalviewDir + '/' + getdown_files_dir + '/' + JAVA_VERSION + '/' + getdownLib1 = jalviewDir + '/' + getdown_lib1 + def getdownChannel = getdown_channel_name + if (getdown_channel_name.equals("COMMIT")) { + getdownChannel = getGitHash() + } + getdown_app_base = getdown_channel_base+"/"+getdownChannel+"/"+JAVA_VERSION+"/" + modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"]) + modules_runtimeClasspath = modules_compileClasspath +} + +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 +// this property is assigned below and expanded to multiple lines in the getdown task +def getdown_alt_multi_java_location if (JAVA_VERSION.equals("1.8")) { + JAVA_INTEGER_VERSION = "8" 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_multi_java_location = getdown_alt_java8_txt_multi_java_location } 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_multi_java_location = getdown_alt_java11_txt_multi_java_location additional_compiler_args += [ - '--module-path', file("$jalviewDir/$j11modDir").getAbsolutePath(), + '--module-path', ext.modules_compileClasspath.asPath, '--add-modules', j11modules ] } else { @@ -73,7 +104,7 @@ sourceSets { resources { srcDirs "$jalviewDir/$resourceDir" - srcDirs "$jalviewDir/$libDir" + srcDirs "$jalviewDir/$libDistDir" } jar.destinationDir = file("$jalviewDir/$packageDir") @@ -83,7 +114,6 @@ sourceSets { runtimeClasspath = compileClasspath } - clover { java { srcDirs = [ cloverInstrDir ] @@ -94,6 +124,8 @@ sourceSets { srcDirs = sourceSets.main.resources.srcDirs } 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"]) @@ -111,12 +143,13 @@ sourceSets { } compileClasspath = files( sourceSets.test.java.outputDir ) + if (use_clover) { compileClasspath += sourceSets.clover.compileClasspath } else { - compileClasspath += sourceSets.main.compileClasspath compileClasspath += files(sourceSets.main.java.outputDir) } + compileClasspath += sourceSets.main.compileClasspath compileClasspath += files( sourceSets.main.resources.srcDirs) compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) @@ -137,7 +170,140 @@ configurations { cloverRuntime cloverRuntime.extendsFrom cloverCompile } - + +eclipse { + project { + name = "Jalview with gradle build" + + natures 'org.eclipse.jdt.core.javanature', + 'org.eclipse.jdt.groovy.core.groovyNature', + 'org.eclipse.buildship.core.gradleprojectnature' + + buildCommand 'org.eclipse.jdt.core.javabuilder' + buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder' + } + + classpath { + //defaultOutputDir = sourceSets.main.java.outputDir + def removeThese = [] + configurations.each{ if (it.isCanBeResolved()) { + removeThese += it + } + } + containers 'org.eclipse.buildship.core.gradleclasspathcontainer' + + 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" || entry.path == "resources")) { + removeTheseToo += entry + } else { + addedSrcPath.putAt(entry.path, true) + } + } + } + cp.entries.removeAll(removeTheseToo) + } + + withXml { + def node = it.asNode() + 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 + } + } + def addTestAttribute = true + srcTestAttributes.each{a -> + if (a.name() == "attribute" && a.attributes().getAt("name") == "test") { + addTestAttribute = false + } + } + if (addTestAttribute) { + srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"])) + } + + node.appendNode('classpathentry', [kind:"output", path:"bin/main"]) + HashMap addedLibPath = new HashMap<>(); + def allPaths = sourceSets.test.compileClasspath + sourceSets.main.compileClasspath + sourceSets.main.compileClasspath.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 + //println("Not adding directory "+it) + 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) + node.appendNode('classpathentry', [kind:"lib", path:itPath]) + addedLibPath.put(itPath, true) + } + } + sourceSets.test.compileClasspath.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 + //println("Not adding directory "+it) + 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) + node.appendNode('classpathentry', [kind:"lib", path:itPath]) + .appendNode('attributes') + .appendNode('attribute', [name:"test", value:"true"]) + addedLibPath.put(itPath, true) + } + } + } + + } + } + + jdt { + // for the IDE, use java 11 compatibility + sourceCompatibility = 11 + targetCompatibility = 11 + javaRuntimeName = "JavaSE-11" + + file { + withProperties { props -> + def jalview_prefs = new Properties() + def ins = new FileInputStream(eclipse_extra_jdt_prefs_file) + jalview_prefs.load(ins) + ins.close() + jalview_prefs.forEach { t, v -> + if (props.getAt(t) == null) { + props.putAt(t, v) + } + } + } + } + } + +} + task cloverInstr() { // only instrument source, we build test classes as normal inputs.files files (sourceSets.main.allJava) // , fileTree(dir:"$jalviewDir/$testSourceDir", include: ["**/*.java"])) @@ -158,6 +324,8 @@ task cloverInstr() { task cloverReport { + group = "Verification" + description = "Createst the Clover report" inputs.dir "${buildDir}/clover" outputs.dir "${reportsDir}/clover" onlyIf { @@ -191,7 +359,6 @@ compileJava { } compileTestJava { - if (use_clover) { dependsOn compileCloverJava classpath += configurations.cloverRuntime @@ -296,8 +463,8 @@ task copyHelp(type: Copy) { } task syncLib(type: Sync) { - def syncDir = "$classes/$libDir" - from fileTree("$jalviewDir/$libDir") + def syncDir = "$classes/$libDistDir" + from fileTree("$jalviewDir/$libDistDir") into syncDir } @@ -325,6 +492,7 @@ test { if (use_clover) { dependsOn cloverInstr } + print("Running tests " + (use_clover?"WITH":"WITHOUT") + " clover [clover="+use_clover+"]\n") useTestNG() { @@ -370,6 +538,7 @@ task compileLinkCheck(type: JavaCompile) { outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class") } +def helplinkscheckeroutputfile = file("$jalviewDir/$utilsDir/HelpLinksChecker.out") task linkCheck(type: JavaExec) { dependsOn prepare, compileLinkCheck classpath = files("$jalviewDir/$utilsDir") @@ -380,10 +549,11 @@ task linkCheck(type: JavaExec) { //args = [ "$classesDir/$helpDir", "-nointernet" ] doFirst { - standardOutput new FileOutputStream("$jalviewDir/$utilsDir/HelpLinksChecker.out") + helplinkscheckeroutputfile.createNewFile() + standardOutput new FileOutputStream(helplinkscheckeroutputfile, false) } - outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.out") + outputs.file(helplinkscheckeroutputfile) } task cleanPackageDir(type: Delete) { @@ -422,7 +592,7 @@ task copyJars(type: Copy) { // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well task syncJars(type: Sync) { - from fileTree("$jalviewDir/$libDir").include("**/*.jar").include("*.jar").files + from fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").files into "$jalviewDir/$packageDir" preserve { include jar.archiveName @@ -430,6 +600,8 @@ task syncJars(type: Sync) { } task makeDist { + group = "build" + description = "Put all required libraries in dist" // order of "cleanPackageDir", "copyJars", "jar" important! jar.mustRunAfter cleanPackageDir syncJars.mustRunAfter cleanPackageDir @@ -447,33 +619,18 @@ task cleanDist { shadowJar { dependsOn makeDist - if (JAVA_VERSION.equals("11")) { - from ("$jalviewDir/$j11libDir") { + from ("$jalviewDir/$libDistDir") { include("*.jar") - } } mainClassName = shadowJarMainClass mergeServiceFiles() - classifier = "all" + classifier = "all-"+JAVA_VERSION minimize() } -ext { - getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir - getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir - getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir - getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir - getdownLauncher = jalviewDir + '/' + getdown_launcher - getdownFilesDir = jalviewDir + '/' + getdown_files_dir - getdownLib1 = jalviewDir + '/' + getdown_lib1 - def getdownChannel = getdown_channel_name - if (getdown_channel_name.equals("COMMIT")) { - getdownChannel = getGitHash() - } - getdown_app_base = getdown_channel_base+"/"+JAVA_VERSION+"/"+getdownChannel+"/" -} - 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 def getdownWebsiteResourceFilenames = [] def getdownTextString = "" @@ -484,6 +641,8 @@ task getdownWebsite() { // 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) + props.put("getdown_txt_appbase", getdown_app_base) props.each{ prop, val -> if (prop.startsWith("getdown_txt_") && val != null) { @@ -544,6 +703,8 @@ task getdownWebsite() { } } + // 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 -> @@ -555,6 +716,7 @@ task getdownWebsite() { } } } + */ getdownTextString += "code = " + file(getdownLauncher).getName() + "\n" getdownTextString += "class = " + mainClass + "\n" @@ -569,22 +731,17 @@ task getdownWebsite() { copy { from getdownLauncher - into project.ext.getdownWebsiteDir - } - - copy { - from getdownLauncher into project.ext.getdownFilesDir } copy { - from getdownLib1 - into project.ext.getdownFilesDir + from getdownLauncher + into project.ext.getdownWebsiteDir } copy { from getdownLib1 - into project.ext.getdownWebsiteDir + into project.ext.getdownFilesDir + '/' + packageDir } copy { @@ -603,6 +760,8 @@ task getdownWebsite() { } task getdownDigest(type: JavaExec) { + group = "distribution" + description = "Digest the getdown website folder" dependsOn getdownWebsite classpath = files(jalviewDir + '/' + getdown_core) classpath file(jalviewDir + '/' + getdown_lib1) @@ -612,6 +771,8 @@ task getdownDigest(type: JavaExec) { } task getdown() { + group = "distribution" + description = "Create the minimal and full getdown app folder for installers and website and create digest file" dependsOn getdownDigest } @@ -639,19 +800,23 @@ install4j { 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/macos-jre"+JAVA_VERSION+"/java_vm" - windowsJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/windows-jre"+JAVA_VERSION+"/java_vm" + 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: ['VERSION': JALVIEW_VERSION, 'MACOS_JAVA_VM_DIR': macosJavaVMDir, 'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir]) + 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]) } into install4jDir inputs.files("$install4jDir/$install4jTemplate") @@ -659,18 +824,20 @@ task copyInstall4jTemplate(type: Copy) { } 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) variables = [majorVersion: version.substring(2, 11), build: 001] - destination = "$jalviewDir/$install4jBuildDir" + destination = "$jalviewDir/$install4jBuildDir/$JAVA_VERSION" buildSelected = true inputs.dir(project.ext.getdownWebsiteDir) inputs.file(install4jConf) inputs.dir(macosJavaVMDir) inputs.dir(windowsJavaVMDir) - outputs.dir("$jalviewDir/$install4jBuildDir") + outputs.dir("$jalviewDir/$install4jBuildDir/$JAVA_VERSION") } clean {