plugins {
id 'java'
id 'application'
+ id 'eclipse'
id 'com.github.johnrengelman.shadow' version '4.0.3'
id 'com.install4j.gradle' version '7.0.9'
}
mainClassName = launcherClass
def cloverInstrDir = file("$buildDir/$cloverSourcesInstrDir")
def classes = "$jalviewDir/$classesDir"
+
if (clover.equals("true")) {
use_clover = true
classes = "$buildDir/$cloverClassesDir"
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
+ 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 additional_compiler_args = []
// these are getdown.txt properties defined dependent on the JAVA_VERSION
def getdown_alt_java_min_version
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 {
runtimeClasspath = compileClasspath
}
-
clover {
java {
srcDirs = [ cloverInstrDir ]
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"])
}
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"])
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<String, Boolean> 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<String, Boolean> 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"]))
task cloverReport {
+ group = "Verification"
+ description = "Createst the Clover report"
inputs.dir "${buildDir}/clover"
outputs.dir "${reportsDir}/clover"
onlyIf {
}
compileTestJava {
-
if (use_clover) {
dependsOn compileCloverJava
classpath += configurations.cloverRuntime
if (use_clover) {
dependsOn cloverInstr
}
+
print("Running tests " + (use_clover?"WITH":"WITHOUT") + " clover [clover="+use_clover+"]\n")
useTestNG() {
outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class")
}
+def helplinkscheckeroutputfile = file("$jalviewDir/$utilsDir/HelpLinksChecker.out")
task linkCheck(type: JavaExec) {
dependsOn prepare, compileLinkCheck
classpath = files("$jalviewDir/$utilsDir")
//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) {
}
task makeDist {
+ group = "build"
+ description = "Put all required libraries in dist"
// order of "cleanPackageDir", "copyJars", "jar" important!
jar.mustRunAfter cleanPackageDir
syncJars.mustRunAfter cleanPackageDir
minimize()
}
-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
- 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+"/"
-}
-
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 = ""
}
task getdownDigest(type: JavaExec) {
+ group = "distribution"
+ description = "Digest the getdown website folder"
dependsOn getdownWebsite
classpath = files(jalviewDir + '/' + getdown_core)
classpath file(jalviewDir + '/' + getdown_lib1)
}
task getdown() {
+ group = "distribution"
+ description = "Create the minimal and full getdown app folder for installers and website and create digest file"
dependsOn getdownDigest
}
}
task installers(type: com.install4j.gradle.Install4jTask) {
+ group = "distribution"
+ description = "Create the install4j installers"
dependsOn getdown
dependsOn copyInstall4jTemplate
projectFile = file(install4jConf)