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("${buildDir}/clover-classes")
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 "$jalviewDir/$testSourceDir"
84 outputDir = file("$jalviewDir/$testOutputDir")
88 srcDirs = sourceSets.main.resources.srcDirs
92 compileClasspath = configurations.cloverRuntime
93 compileClasspath += files( sourceSets.test.java.outputDir )
94 compileClasspath += files( sourceSets.clover.java.outputDir )
95 compileClasspath += files( sourceSets.main.resources.srcDirs)
96 compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
97 compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
98 if (JAVA_VERSION.equals("1.8")) {
99 print("ADDING J11LIBS TO CLASSPATH")
100 compileClasspath += fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"])
103 runtimeClasspath = compileClasspath
109 cloverCompile 'org.openclover:clover:4.3.1'
110 testCompile 'org.openclover:clover:4.3.1'
115 cloverRuntime.extendsFrom cloverCompile
119 // only instrument source, we build test classes as normal
120 inputs.files files (sourceSets.main.allJava) // , fileTree(dir:"$jalviewDir/$testSourceDir", include: ["**/*.java"]))
121 outputs.dir cloverInstrDir
124 delete cloverInstrDir
125 def argsList = ["--initstring", "${buildDir}/clover/clover.db",
126 "-d", "${buildDir}/sources-instr"]
127 argsList.addAll(inputs.files.files.collect({ file ->
130 String[] args = argsList.toArray()
131 println("About to instrument "+args.length +" files")
132 com.atlassian.clover.CloverInstr.mainImpl(args)
136 test.dependsOn cloverInstr
140 inputs.dir "${buildDir}/clover"
141 outputs.dir "${reportsDir}/clover"
143 file("${buildDir}/clover/clover.db").exists()
146 def argsList = ["--initstring", "${buildDir}/clover/clover.db",
147 "-o", "${reportsDir}/clover"]
148 String[] args = argsList.toArray()
149 com.atlassian.clover.reporters.html.HtmlReporter.runReport(args)
151 // and generate ${reportsDir}/clover/clover.xml
152 args = ["--initstring", "${buildDir}/clover/clover.db",
153 "-o", "${reportsDir}/clover/clover.xml"].toArray()
154 com.atlassian.clover.reporters.xml.XMLReporter.runReport(args)
164 if (JAVA_VERSION.equals("1.8")) {
165 sourceCompatibility = 1.8
166 targetCompatibility = 1.8
167 } else if (JAVA_VERSION.equals("11")) {
168 sourceCompatibility = 11
169 targetCompatibility = 11
171 options.compilerArgs = [
172 '--module-path', sourceSets.modules.compileClasspath.asPath,
173 '--add-modules', j11modules
176 print ("Setting target compatibility to "+targetCompatibility+"\n")
182 dependsOn compileCloverJava
184 if (JAVA_VERSION.equals("1.8")) {
185 sourceCompatibility = 1.8
186 targetCompatibility = 1.8
187 } else if (JAVA_VERSION.equals("11")) {
188 sourceCompatibility = 11
189 targetCompatibility = 11
191 options.compilerArgs = [
192 '--module-path', sourceSets.modules.compileClasspath.asPath,
193 '--add-modules', j11modules
196 print ("Setting target compatibility to "+targetCompatibility+"\n")
198 classpath += configurations.cloverRuntime
205 if (JAVA_VERSION.equals("1.8")) {
206 sourceCompatibility = 1.8
207 targetCompatibility = 1.8
208 } else if (JAVA_VERSION.equals("11")) {
209 sourceCompatibility = 11
210 targetCompatibility = 11
212 options.compilerArgs += [
213 '--module-path', sourceSets.modules.compileClasspath.asPath,
214 '--add-modules', j11modules
217 print ("Setting target compatibility to "+targetCompatibility+"\n")
219 classpath += configurations.cloverRuntime
223 delete sourceSets.main.java.outputDir
227 delete sourceSets.test.java.outputDir
228 delete cloverInstrDir
231 def getDate(format) {
232 def date = new Date()
233 //return date.format("dd MMMM yyyy")
234 return date.format(format)
238 def stdout = new ByteArrayOutputStream()
240 commandLine "git", "rev-parse", "--short", "HEAD"
241 standardOutput = stdout
242 workingDir = jalviewDir
244 return stdout.toString().trim()
248 def stdout = new ByteArrayOutputStream()
250 commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
251 standardOutput = stdout
252 workingDir = jalviewDir
254 return stdout.toString().trim()
257 task createBuildProperties(type: WriteProperties) {
258 inputs.dir("$jalviewDir/$sourceDir")
259 inputs.dir("$jalviewDir/$resourceDir")
260 outputFile "$jalviewDir/$classesDir/$buildPropertiesFile"
261 /* taking time/date specific comment out to allow better incremental builds */
262 //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss")
263 comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
264 property "BUILD_DATE", getDate("dd MMMM yyyy")
265 property "VERSION", JALVIEW_VERSION
266 property "INSTALLATION", INSTALLATION+" git-commit:"+getGitHash()+" ["+getGitBranch()+"]"
267 outputs.file(outputFile)
268 outputs.dir("$jalviewDir/$classesDir")
271 task syncDocs(type: Sync) {
272 def syncDir = "$jalviewDir/$classesDir/$docDir"
273 from fileTree("$jalviewDir/$docDir")
278 def helpFile = "$jalviewDir/$classesDir/$helpDir/help.jhm"
279 task syncHelp(type: Sync) {
280 inputs.files("$jalviewDir/$helpDir")
281 outputs.files(helpFile)
283 def syncDir = "$jalviewDir/$classesDir/$helpDir"
284 from fileTree("$jalviewDir/$helpDir")
288 task copyHelp(type: Copy) {
289 def inputDir = "$jalviewDir/$helpDir"
290 def outputDir = "$jalviewDir/$classesDir/$helpDir"
293 filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': "USING_FILTER"])
295 outputs.files(helpFile)
296 outputs.dir(outputDir)
299 task syncLib(type: Sync) {
300 def syncDir = "$jalviewDir/$classesDir/$libDir"
301 from fileTree("$jalviewDir/$libDir")
305 task syncResources(type: Sync) {
306 from "$jalviewDir/$resourceDir"
309 into "$jalviewDir/$classesDir"
316 dependsOn syncResources
322 //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir
328 includeGroups testngGroups
330 useDefaultListeners=true
333 workingDir = jalviewDir
334 //systemProperties 'clover.jar' System.properties.clover.jar
335 if (JAVA_VERSION.equals("1.8")) {
336 sourceCompatibility = 1.8
337 targetCompatibility = 1.8
338 } else if (JAVA_VERSION.equals("11")) {
339 sourceCompatibility = 11
340 targetCompatibility = 11
344 sourceSets.modules.compileClasspath.asPath,
349 print ("Setting target compatibility to "+targetCompatibility+"\n")
352 task buildIndices(type: JavaExec) {
354 classpath = sourceSets.main.compileClasspath
355 main = "com.sun.java.help.search.Indexer"
356 workingDir = "$jalviewDir/$classesDir/$helpDir"
359 inputs.dir("$workingDir/$argDir")
361 outputs.dir("$jalviewDir/$classesDir/doc")
362 outputs.dir("$jalviewDir/$classesDir/help")
363 outputs.file("$workingDir/JavaHelpSearch/DOCS")
364 outputs.file("$workingDir/JavaHelpSearch/DOCS.TAB")
365 outputs.file("$workingDir/JavaHelpSearch/OFFSETS")
366 outputs.file("$workingDir/JavaHelpSearch/POSITIONS")
367 outputs.file("$workingDir/JavaHelpSearch/SCHEMA")
368 outputs.file("$workingDir/JavaHelpSearch/TMAP")
371 task compileLinkCheck(type: JavaCompile) {
373 classpath = files("$jalviewDir/$utilsDir")
374 destinationDir = file("$jalviewDir/$utilsDir")
375 source = fileTree(dir: "$jalviewDir/$utilsDir", include: ["HelpLinksChecker.java", "BufferedLineReader.java"])
377 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.class")
378 outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class")
381 task linkCheck(type: JavaExec) {
382 dependsOn prepare, compileLinkCheck
383 classpath = files("$jalviewDir/$utilsDir")
384 main = "HelpLinksChecker"
385 workingDir = "$jalviewDir"
386 args = [ "$classesDir/$helpDir", "-nointernet" ]
389 standardOutput new FileOutputStream("$jalviewDir/$utilsDir/HelpLinksChecker.out")
392 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.out")
395 task cleanPackageDir(type: Delete) {
396 delete fileTree("$jalviewDir/$packageDir").include("*.jar")
401 dependsOn buildIndices
402 dependsOn createBuildProperties
405 attributes "Main-Class": mainClass,
406 "Permissions": "all-permissions",
407 "Application-Name": "Jalview Desktop",
408 "Codebase": application_codebase
411 destinationDir = file("$jalviewDir/$packageDir")
412 archiveName = rootProject.name+".jar"
420 inputs.dir("$jalviewDir/$classesDir")
421 outputs.file("$jalviewDir/$packageDir/$archiveName")
424 task copyJars(type: Copy) {
425 from fileTree("$jalviewDir/$classesDir").include("**/*.jar").include("*.jar").files
426 into "$jalviewDir/$packageDir"
429 // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well
430 task syncJars(type: Sync) {
431 from fileTree("$jalviewDir/$libDir").include("**/*.jar").include("*.jar").files
432 into "$jalviewDir/$packageDir"
434 include jar.archiveName
439 // order of "cleanPackageDir", "copyJars", "jar" important!
440 jar.mustRunAfter cleanPackageDir
441 syncJars.mustRunAfter cleanPackageDir
442 dependsOn cleanPackageDir
445 outputs.dir("$jalviewDir/$packageDir")
449 dependsOn cleanPackageDir
456 if (JAVA_VERSION.equals("11")) {
457 from ("$jalviewDir/$j11libDir") {
461 mainClassName = shadowJarMainClass
468 getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir
469 getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir
470 getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir
471 getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir
472 getdownLauncher = jalviewDir + '/' + getdown_launcher
473 getdownFilesDir = jalviewDir + '/' + getdown_files_dir
476 task getdownWebsite() {
478 def getdownWebsiteResourceFilenames = []
479 def getdownTextString = ""
480 def getdownResourceDir = project.ext.getdownResourceDir
481 def getdownAppDir = project.ext.getdownAppDir
482 def getdownResourceFilenames = []
484 // go through properties looking for getdown_txt_...
485 def props = project.properties.sort { it.key }
486 if (JAVA_VERSION.equals("11")) {
487 props.put("getdown_txt_java_min_version", getdown_alt_java11_min_version)
489 props.put("getdown_txt_java_min_version", getdown_alt_java8_min_version)
491 props.each{ prop, val ->
492 if (prop.startsWith("getdown_txt_") && val != null) {
493 if (prop.startsWith("getdown_txt_multi_")) {
494 def key = prop.substring(18)
495 val.split(",").each{ v ->
496 def line = key + " = " + v + "\n"
497 getdownTextString += line
500 // file values rationalised
501 if (val.indexOf('/') > -1) {
503 if (val.indexOf('/') == 0) {
506 } else if (val.indexOf('/') > 0) {
507 // relative path (relative to jalviewDir)
508 r = file( jalviewDir + '/' + val )
511 val = getdown_resource_dir + '/' + r.getName()
512 getdownWebsiteResourceFilenames += val
513 getdownResourceFilenames += r.getPath()
516 def line = prop.substring(12) + " = " + val + "\n"
517 getdownTextString += line
522 getdownWebsiteResourceFilenames.each{ filename ->
523 getdownTextString += "resource = "+filename+"\n"
525 getdownResourceFilenames.each{ filename ->
528 into project.ext.getdownResourceDir
533 makeDist.outputs.files.each{ f ->
534 if (f.isDirectory()) {
535 def files = fileTree(dir: f, include: ["*"]).getFiles()
537 } else if (f.exists()) {
541 codeFiles.sort().each{f ->
542 def line = "code = " + getdown_app_dir + '/' + f.getName() + "\n"
543 getdownTextString += line
546 into project.ext.getdownAppDir
550 if (JAVA_VERSION.equals("11")) {
551 def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles()
552 j11libFiles.sort().each{f ->
553 def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n"
554 getdownTextString += line
557 into project.ext.getdownJ11libDir
562 getdownTextString += "code = " + file(getdownLauncher).getName() + "\n"
563 getdownTextString += "class = " + mainClass + "\n"
565 def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt")
566 getdown_txt.write(getdownTextString)
570 into project.ext.getdownFilesDir
575 into project.ext.getdownWebsiteDir
580 into project.ext.getdownFilesDir
584 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.background_image')
585 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.error_background')
586 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.progress_image')
587 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.icon')
588 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.mac_dock_icon')
589 into project.ext.getdownFilesDir + '/' + getdown_resource_dir
593 inputs.dir(jalviewDir + '/' + packageDir)
594 outputs.dir(project.ext.getdownWebsiteDir)
595 outputs.dir(project.ext.getdownFilesDir)
598 task getdownDigest(type: JavaExec) {
599 dependsOn getdownWebsite
600 classpath = files(jalviewDir + '/' + getdown_core)
601 main = "com.threerings.getdown.tools.Digester"
602 args project.ext.getdownWebsiteDir
603 outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt")
607 dependsOn getdownDigest
611 delete project.ext.getdownWebsiteDir
612 delete project.ext.getdownFilesDir
616 def install4jHomeDir = "/opt/install4j"
617 def hostname = "hostname".execute().text.trim()
618 if (hostname.equals("jv-bamboo")) {
619 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
620 } else if (OperatingSystem.current().isMacOsX()) {
621 install4jHomeDir = '/Applications/install4j.app/Contents/Resources/app'
622 if (! file(install4jHomeDir).exists()) {
623 install4jHomeDir = System.getProperty("user.home")+install4jHomeDir
625 } else if (OperatingSystem.current().isLinux()) {
626 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
628 installDir = file(install4jHomeDir)
631 task installers(type: com.install4j.gradle.Install4jTask) {
633 projectFile = "$jalviewDir/$install4jResourceDir/$install4jConf"
634 variables = [majorVersion: version.substring(2, 11), build: 001]
635 destination = "$jalviewDir/$install4jBuildDir"
637 inputs.dir(project.ext.getdownWebsiteDir)
638 outputs.dir("$jalviewDir/$install4jBuildDir")