1 import org.apache.tools.ant.filters.ReplaceTokens
2 import org.gradle.internal.os.OperatingSystem
7 classpath 'org.openclover:clover:4.3.1'
14 id 'com.github.johnrengelman.shadow' version '4.0.3'
15 id 'com.install4j.gradle' version '7.0.9'
27 mainClassName = launcherClass
28 def cloverInstrDir = file("$buildDir/sources-instr")
34 srcDirs "$jalviewDir/$sourceDir"
35 outputDir = file("$jalviewDir/$classesDir")
39 srcDirs "$jalviewDir/$resourceDir"
40 srcDirs "$jalviewDir/$libDir"
43 jar.destinationDir = file("$jalviewDir/$packageDir")
45 compileClasspath = files(sourceSets.main.java.outputDir)
46 compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
47 if (JAVA_VERSION.equals("1.8")) {
48 print("ADDING J11LIBS TO CLASSPATH")
49 compileClasspath += fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"])
52 runtimeClasspath = compileClasspath
56 compileClasspath = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"])
58 runtimeClasspath = compileClasspath
63 srcDirs = [ cloverInstrDir ]
64 outputDir = file("$jalviewDir/$testOutputDir")
68 srcDirs = sourceSets.main.resources.srcDirs
70 compileClasspath = configurations.cloverRuntime + files( sourceSets.clover.java.outputDir )
71 compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
72 compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
73 if (JAVA_VERSION.equals("1.8")) {
74 print("ADDING J11LIBS TO CLASSPATH")
75 compileClasspath += fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"])
78 runtimeClasspath = compileClasspath
83 srcDirs = [ cloverInstrDir ]
84 outputDir = file("$jalviewDir/$testOutputDir")
88 srcDirs = sourceSets.main.resources.srcDirs
92 compileClasspath += configurations.cloverRuntime + files( sourceSets.test.java.outputDir )
93 compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
94 compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
95 if (JAVA_VERSION.equals("1.8")) {
96 print("ADDING J11LIBS TO CLASSPATH")
97 compileClasspath += fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"])
100 runtimeClasspath = compileClasspath
106 cloverCompile 'org.openclover:clover:4.3.1'
107 testCompile 'org.openclover:clover:4.3.1'
112 cloverRuntime.extendsFrom cloverCompile
116 inputs.files files (sourceSets.main.allJava, fileTree(dir:"$jalviewDir/$testSourceDir", include: ["**/*.java"]))
117 outputs.dir cloverInstrDir
120 delete cloverInstrDir
121 def argsList = ["--initstring", "${buildDir}/clover/clover.db",
122 "-d", "${buildDir}/sources-instr"]
123 argsList.addAll(inputs.files.files.collect({ file ->
126 String[] args = argsList.toArray()
127 println("About to instrument "+args.length +" files")
128 com.atlassian.clover.CloverInstr.mainImpl(args)
132 test.dependsOn cloverInstr
135 inputs.dir "${buildDir}/clover"
136 outputs.dir "${reportsDir}/clover"
138 file("${buildDir}/clover/clover.db").exists()
141 def argsList = ["--initstring", "${buildDir}/clover/clover.db",
142 "-o", "${reportsDir}/clover"]
143 String[] args = argsList.toArray()
144 com.atlassian.clover.reporters.html.HtmlReporter.runReport(args)
154 if (JAVA_VERSION.equals("1.8")) {
155 sourceCompatibility = 1.8
156 targetCompatibility = 1.8
157 } else if (JAVA_VERSION.equals("11")) {
158 sourceCompatibility = 11
159 targetCompatibility = 11
161 options.compilerArgs = [
162 '--module-path', sourceSets.modules.compileClasspath.asPath,
163 '--add-modules', j11modules
166 print ("Setting target compatibility to "+targetCompatibility+"\n")
174 if (JAVA_VERSION.equals("1.8")) {
175 sourceCompatibility = 1.8
176 targetCompatibility = 1.8
177 } else if (JAVA_VERSION.equals("11")) {
178 sourceCompatibility = 11
179 targetCompatibility = 11
181 options.compilerArgs = [
182 '--module-path', sourceSets.modules.compileClasspath.asPath,
183 '--add-modules', j11modules
186 print ("Setting target compatibility to "+targetCompatibility+"\n")
188 classpath += configurations.cloverRuntime
192 //compileCloverJava {
195 // if (JAVA_VERSION.equals("1.8")) {
196 // sourceCompatibility = 1.8
197 // targetCompatibility = 1.8
198 // } else if (JAVA_VERSION.equals("11")) {
199 // sourceCompatibility = 11
200 // targetCompatibility = 11
202 // options.compilerArgs += [
203 // '--module-path', sourceSets.modules.compileClasspath.asPath,
204 // '--add-modules', j11modules
207 // print ("Setting target compatibility to "+targetCompatibility+"\n")
209 // classpath += configurations.cloverRuntime
213 delete sourceSets.main.java.outputDir
217 delete sourceSets.test.java.outputDir
218 delete cloverInstrDir
221 def getDate(format) {
222 def date = new Date()
223 //return date.format("dd MMMM yyyy")
224 return date.format(format)
228 def stdout = new ByteArrayOutputStream()
230 commandLine "git", "rev-parse", "--short", "HEAD"
231 standardOutput = stdout
232 workingDir = jalviewDir
234 return stdout.toString().trim()
238 def stdout = new ByteArrayOutputStream()
240 commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
241 standardOutput = stdout
242 workingDir = jalviewDir
244 return stdout.toString().trim()
247 task createBuildProperties(type: WriteProperties) {
248 inputs.dir("$jalviewDir/$sourceDir")
249 inputs.dir("$jalviewDir/$resourceDir")
250 outputFile "$jalviewDir/$classesDir/$buildPropertiesFile"
251 /* taking time/date specific comment out to allow better incremental builds */
252 //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss")
253 comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
254 property "BUILD_DATE", getDate("dd MMMM yyyy")
255 property "VERSION", JALVIEW_VERSION
256 property "INSTALLATION", INSTALLATION+" git-commit:"+getGitHash()+" ["+getGitBranch()+"]"
257 outputs.file(outputFile)
258 outputs.dir("$jalviewDir/$classesDir")
261 task syncDocs(type: Sync) {
262 def syncDir = "$jalviewDir/$classesDir/$docDir"
263 from fileTree("$jalviewDir/$docDir")
268 def helpFile = "$jalviewDir/$classesDir/$helpDir/help.jhm"
269 task syncHelp(type: Sync) {
270 inputs.files("$jalviewDir/$helpDir")
271 outputs.files(helpFile)
273 def syncDir = "$jalviewDir/$classesDir/$helpDir"
274 from fileTree("$jalviewDir/$helpDir")
278 task copyHelp(type: Copy) {
279 def inputDir = "$jalviewDir/$helpDir"
280 def outputDir = "$jalviewDir/$classesDir/$helpDir"
283 filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': "USING_FILTER"])
285 outputs.files(helpFile)
286 outputs.dir(outputDir)
289 task syncLib(type: Sync) {
290 def syncDir = "$jalviewDir/$classesDir/$libDir"
291 from fileTree("$jalviewDir/$libDir")
295 task syncResources(type: Sync) {
296 from "$jalviewDir/$resourceDir"
299 into "$jalviewDir/$classesDir"
306 dependsOn syncResources
312 //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir
319 includeGroups testngGroups
323 workingDir = jalviewDir
324 //systemProperties 'clover.jar' System.properties.clover.jar
325 if (JAVA_VERSION.equals("1.8")) {
326 sourceCompatibility = 1.8
327 targetCompatibility = 1.8
328 } else if (JAVA_VERSION.equals("11")) {
329 sourceCompatibility = 11
330 targetCompatibility = 11
334 sourceSets.modules.compileClasspath.asPath,
339 print ("Setting target compatibility to "+targetCompatibility+"\n")
342 task buildIndices(type: JavaExec) {
344 classpath = sourceSets.main.compileClasspath
345 main = "com.sun.java.help.search.Indexer"
346 workingDir = "$jalviewDir/$classesDir/$helpDir"
349 inputs.dir("$workingDir/$argDir")
351 outputs.dir("$jalviewDir/$classesDir/doc")
352 outputs.dir("$jalviewDir/$classesDir/help")
353 outputs.file("$workingDir/JavaHelpSearch/DOCS")
354 outputs.file("$workingDir/JavaHelpSearch/DOCS.TAB")
355 outputs.file("$workingDir/JavaHelpSearch/OFFSETS")
356 outputs.file("$workingDir/JavaHelpSearch/POSITIONS")
357 outputs.file("$workingDir/JavaHelpSearch/SCHEMA")
358 outputs.file("$workingDir/JavaHelpSearch/TMAP")
361 task compileLinkCheck(type: JavaCompile) {
363 classpath = files("$jalviewDir/$utilsDir")
364 destinationDir = file("$jalviewDir/$utilsDir")
365 source = fileTree(dir: "$jalviewDir/$utilsDir", include: ["HelpLinksChecker.java", "BufferedLineReader.java"])
367 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.class")
368 outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class")
371 task linkCheck(type: JavaExec) {
372 dependsOn prepare, compileLinkCheck
373 classpath = files("$jalviewDir/$utilsDir")
374 main = "HelpLinksChecker"
375 workingDir = "$jalviewDir"
376 args = [ "$classesDir/$helpDir", "-nointernet" ]
379 standardOutput new FileOutputStream("$jalviewDir/$utilsDir/HelpLinksChecker.out")
382 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.out")
385 task cleanPackageDir(type: Delete) {
386 delete fileTree("$jalviewDir/$packageDir").include("*.jar")
391 dependsOn buildIndices
392 dependsOn createBuildProperties
395 attributes "Main-Class": mainClass,
396 "Permissions": "all-permissions",
397 "Application-Name": "Jalview Desktop",
398 "Codebase": application_codebase
401 destinationDir = file("$jalviewDir/$packageDir")
402 archiveName = rootProject.name+".jar"
410 inputs.dir("$jalviewDir/$classesDir")
411 outputs.file("$jalviewDir/$packageDir/$archiveName")
414 task copyJars(type: Copy) {
415 from fileTree("$jalviewDir/$classesDir").include("**/*.jar").include("*.jar").files
416 into "$jalviewDir/$packageDir"
419 // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well
420 task syncJars(type: Sync) {
421 from fileTree("$jalviewDir/$libDir").include("**/*.jar").include("*.jar").files
422 into "$jalviewDir/$packageDir"
424 include jar.archiveName
429 // order of "cleanPackageDir", "copyJars", "jar" important!
430 jar.mustRunAfter cleanPackageDir
431 syncJars.mustRunAfter cleanPackageDir
432 dependsOn cleanPackageDir
435 outputs.dir("$jalviewDir/$packageDir")
439 dependsOn cleanPackageDir
446 if (JAVA_VERSION.equals("11")) {
447 from ("$jalviewDir/$j11libDir") {
451 mainClassName = shadowJarMainClass
458 getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir
459 getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir
460 getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir
461 getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir
462 getdownLauncher = jalviewDir + '/' + getdown_launcher
463 getdownFilesDir = jalviewDir + '/' + getdown_files_dir
466 task getdownWebsite() {
468 def getdownWebsiteResourceFilenames = []
469 def getdownTextString = ""
470 def getdownResourceDir = project.ext.getdownResourceDir
471 def getdownAppDir = project.ext.getdownAppDir
472 def getdownResourceFilenames = []
474 // go through properties looking for getdown_txt_...
475 def props = project.properties.sort { it.key }
476 if (JAVA_VERSION.equals("11")) {
477 props.put("getdown_txt_java_min_version", getdown_alt_java11_min_version)
479 props.put("getdown_txt_java_min_version", getdown_alt_java8_min_version)
481 props.each{ prop, val ->
482 if (prop.startsWith("getdown_txt_") && val != null) {
483 if (prop.startsWith("getdown_txt_multi_")) {
484 def key = prop.substring(18)
485 val.split(",").each{ v ->
486 def line = key + " = " + v + "\n"
487 getdownTextString += line
490 // file values rationalised
491 if (val.indexOf('/') > -1) {
493 if (val.indexOf('/') == 0) {
496 } else if (val.indexOf('/') > 0) {
497 // relative path (relative to jalviewDir)
498 r = file( jalviewDir + '/' + val )
501 val = getdown_resource_dir + '/' + r.getName()
502 getdownWebsiteResourceFilenames += val
503 getdownResourceFilenames += r.getPath()
506 def line = prop.substring(12) + " = " + val + "\n"
507 getdownTextString += line
512 getdownWebsiteResourceFilenames.each{ filename ->
513 getdownTextString += "resource = "+filename+"\n"
515 getdownResourceFilenames.each{ filename ->
518 into project.ext.getdownResourceDir
523 makeDist.outputs.files.each{ f ->
524 if (f.isDirectory()) {
525 def files = fileTree(dir: f, include: ["*"]).getFiles()
527 } else if (f.exists()) {
531 codeFiles.sort().each{f ->
532 def line = "code = " + getdown_app_dir + '/' + f.getName() + "\n"
533 getdownTextString += line
536 into project.ext.getdownAppDir
540 if (JAVA_VERSION.equals("11")) {
541 def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles()
542 j11libFiles.sort().each{f ->
543 def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n"
544 getdownTextString += line
547 into project.ext.getdownJ11libDir
552 getdownTextString += "code = " + file(getdownLauncher).getName() + "\n"
553 getdownTextString += "class = " + mainClass + "\n"
555 def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt")
556 getdown_txt.write(getdownTextString)
560 into project.ext.getdownFilesDir
565 into project.ext.getdownWebsiteDir
570 into project.ext.getdownFilesDir
574 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.background_image')
575 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.error_background')
576 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.progress_image')
577 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.icon')
578 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.mac_dock_icon')
579 into project.ext.getdownFilesDir + '/' + getdown_resource_dir
583 inputs.dir(jalviewDir + '/' + packageDir)
584 outputs.dir(project.ext.getdownWebsiteDir)
585 outputs.dir(project.ext.getdownFilesDir)
588 task getdownDigest(type: JavaExec) {
589 dependsOn getdownWebsite
590 classpath = files(jalviewDir + '/' + getdown_core)
591 main = "com.threerings.getdown.tools.Digester"
592 args project.ext.getdownWebsiteDir
593 outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt")
597 dependsOn getdownDigest
601 delete project.ext.getdownWebsiteDir
602 delete project.ext.getdownFilesDir
606 def install4jHomeDir = "/opt/install4j"
607 def hostname = "hostname".execute().text.trim()
608 if (hostname.equals("jv-bamboo")) {
609 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
610 } else if (OperatingSystem.current().isMacOsX()) {
611 install4jHomeDir = '/Applications/install4j.app/Contents/Resources/app'
612 if (! file(install4jHomeDir).exists()) {
613 install4jHomeDir = System.getProperty("user.home")+install4jHomeDir
615 } else if (OperatingSystem.current().isLinux()) {
616 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
618 installDir = file(install4jHomeDir)
621 task installers(type: com.install4j.gradle.Install4jTask) {
623 projectFile = "$jalviewDir/$install4jResourceDir/$install4jConf"
624 variables = [majorVersion: version.substring(2, 11), build: 001]
625 destination = "$jalviewDir/$install4jBuildDir"
627 inputs.dir(project.ext.getdownWebsiteDir)
628 outputs.dir("$jalviewDir/$install4jBuildDir")