1 import org.apache.tools.ant.filters.ReplaceTokens
2 import org.gradle.internal.os.OperatingSystem
7 //classpath files("$gradlePluginsDir/gradle-macappbundle-2.3.0-patched-2.3.0.jar")
14 id 'com.github.johnrengelman.shadow' version '4.0.3'
15 id 'com.install4j.gradle' version '7.0.9'
26 mainClassName = launcherClass
32 srcDirs "$jalviewDir/$sourceDir"
33 outputDir = file("$jalviewDir/$classesDir")
37 srcDirs "$jalviewDir/$resourceDir"
38 srcDirs "$jalviewDir/$libDir"
41 jar.destinationDir = file("$jalviewDir/$packageDir")
43 compileClasspath = files(sourceSets.main.java.outputDir)
44 compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
45 if (JAVA_VERSION.equals("1.8")) {
46 print("ADDING J11LIBS TO CLASSPATH")
47 compileClasspath += fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"])
50 runtimeClasspath = compileClasspath
55 srcDirs "$jalviewDir/$testSourceDir"
56 outputDir = file("$jalviewDir/$testOutputDir")
60 srcDirs = sourceSets.main.resources.srcDirs
63 compileClasspath = sourceSets.main.compileClasspath
64 compileClasspath += files( sourceSets.test.java.outputDir )
65 compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
67 runtimeClasspath = compileClasspath
71 compileClasspath = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"])
73 runtimeClasspath = compileClasspath
81 if (JAVA_VERSION.equals("1.8")) {
82 sourceCompatibility = 1.8
83 targetCompatibility = 1.8
84 } else if (JAVA_VERSION.equals("11")) {
85 sourceCompatibility = 11
86 targetCompatibility = 11
88 options.compilerArgs = [
89 '--module-path', sourceSets.modules.compileClasspath.asPath,
90 '--add-modules', j11modules
93 print ("Setting target compatibility to "+targetCompatibility+"\n")
99 delete sourceSets.main.java.outputDir
103 delete sourceSets.test.java.outputDir
106 def getDate(format) {
107 def date = new Date()
108 //return date.format("dd MMMM yyyy")
109 return date.format(format)
113 def stdout = new ByteArrayOutputStream()
115 commandLine "git", "rev-parse", "--short", "HEAD"
116 standardOutput = stdout
117 workingDir = jalviewDir
119 return stdout.toString().trim()
123 def stdout = new ByteArrayOutputStream()
125 commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
126 standardOutput = stdout
127 workingDir = jalviewDir
129 return stdout.toString().trim()
132 task createBuildProperties(type: WriteProperties) {
133 inputs.dir("$jalviewDir/$sourceDir")
134 inputs.dir("$jalviewDir/$resourceDir")
135 outputFile "$jalviewDir/$classesDir/$buildPropertiesFile"
136 /* taking time/date specific comment out to allow better incremental builds */
137 //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss")
138 comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
139 property "BUILD_DATE", getDate("dd MMMM yyyy")
140 property "VERSION", JALVIEW_VERSION
141 property "INSTALLATION", INSTALLATION+" git-commit:"+getGitHash()+" ["+getGitBranch()+"]"
142 outputs.file(outputFile)
143 outputs.dir("$jalviewDir/$classesDir")
146 task syncDocs(type: Sync) {
147 def syncDir = "$jalviewDir/$classesDir/$docDir"
148 from fileTree("$jalviewDir/$docDir")
153 def helpFile = "$jalviewDir/$classesDir/$helpDir/help.jhm"
154 task syncHelp(type: Sync) {
155 inputs.files("$jalviewDir/$helpDir")
156 outputs.files(helpFile)
158 def syncDir = "$jalviewDir/$classesDir/$helpDir"
159 from fileTree("$jalviewDir/$helpDir")
163 task copyHelp(type: Copy) {
164 def inputDir = "$jalviewDir/$helpDir"
165 def outputDir = "$jalviewDir/$classesDir/$helpDir"
168 filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': "USING_FILTER"])
170 outputs.files(helpFile)
171 outputs.dir(outputDir)
174 task syncLib(type: Sync) {
175 def syncDir = "$jalviewDir/$classesDir/$libDir"
176 from fileTree("$jalviewDir/$libDir")
180 task syncResources(type: Sync) {
181 from "$jalviewDir/$resourceDir"
184 into "$jalviewDir/$classesDir"
191 dependsOn syncResources
196 //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir
199 dependsOn compileJava
201 includeGroups testngGroups
203 workingDir = jalviewDir
204 //systemProperties 'clover.jar' System.properties.clover.jar
207 task buildIndices(type: JavaExec) {
209 classpath = sourceSets.main.compileClasspath
210 main = "com.sun.java.help.search.Indexer"
211 workingDir = "$jalviewDir/$classesDir/$helpDir"
214 inputs.dir("$workingDir/$argDir")
216 outputs.dir("$jalviewDir/$classesDir/doc")
217 outputs.dir("$jalviewDir/$classesDir/help")
218 outputs.file("$workingDir/JavaHelpSearch/DOCS")
219 outputs.file("$workingDir/JavaHelpSearch/DOCS.TAB")
220 outputs.file("$workingDir/JavaHelpSearch/OFFSETS")
221 outputs.file("$workingDir/JavaHelpSearch/POSITIONS")
222 outputs.file("$workingDir/JavaHelpSearch/SCHEMA")
223 outputs.file("$workingDir/JavaHelpSearch/TMAP")
226 task compileLinkCheck(type: JavaCompile) {
228 classpath = files("$jalviewDir/$utilsDir")
229 destinationDir = file("$jalviewDir/$utilsDir")
230 source = fileTree(dir: "$jalviewDir/$utilsDir", include: ["HelpLinksChecker.java", "BufferedLineReader.java"])
232 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.class")
233 outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class")
236 task linkCheck(type: JavaExec) {
237 dependsOn prepare, compileLinkCheck
238 classpath = files("$jalviewDir/$utilsDir")
239 main = "HelpLinksChecker"
240 workingDir = "$jalviewDir"
241 args = [ "$classesDir/$helpDir", "-nointernet" ]
244 standardOutput new FileOutputStream("$jalviewDir/$utilsDir/HelpLinksChecker.out")
247 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.out")
250 task cleanPackageDir(type: Delete) {
251 delete fileTree("$jalviewDir/$packageDir").include("*.jar")
256 dependsOn buildIndices
257 dependsOn createBuildProperties
260 attributes "Main-Class": mainClass,
261 "Permissions": "all-permissions",
262 "Application-Name": "Jalview Desktop",
263 "Codebase": application_codebase
266 destinationDir = file("$jalviewDir/$packageDir")
267 archiveName = rootProject.name+".jar"
275 inputs.dir("$jalviewDir/$classesDir")
276 outputs.file("$jalviewDir/$packageDir/$archiveName")
279 task copyJars(type: Copy) {
280 from fileTree("$jalviewDir/$classesDir").include("**/*.jar").include("*.jar").files
281 into "$jalviewDir/$packageDir"
284 // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well
285 task syncJars(type: Sync) {
286 from fileTree("$jalviewDir/$libDir").include("**/*.jar").include("*.jar").files
287 into "$jalviewDir/$packageDir"
289 include jar.archiveName
294 // order of "cleanPackageDir", "copyJars", "jar" important!
295 jar.mustRunAfter cleanPackageDir
296 syncJars.mustRunAfter cleanPackageDir
297 dependsOn cleanPackageDir
300 outputs.dir("$jalviewDir/$packageDir")
304 dependsOn cleanPackageDir
311 if (JAVA_VERSION.equals("11")) {
312 from ("$jalviewDir/$j11libDir") {
316 mainClassName = shadowJarMainClass
323 getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir
324 getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir
325 getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir
326 getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir
327 getdownLauncher = jalviewDir + '/' + getdown_launcher
328 getdownFilesDir = jalviewDir + '/' + getdown_files_dir
331 task getdownWebsite() {
333 def getdownWebsiteResourceFilenames = []
334 def getdownTextString = ""
335 def getdownResourceDir = project.ext.getdownResourceDir
336 def getdownAppDir = project.ext.getdownAppDir
337 def getdownResourceFilenames = []
339 // go through properties looking for getdown_txt_...
340 def props = project.properties.sort { it.key }
341 if (JAVA_VERSION.equals("11")) {
342 props.put("getdown_txt_java_min_version", getdown_alt_java11_min_version)
344 props.put("getdown_txt_java_min_version", getdown_alt_java8_min_version)
346 props.each{ prop, val ->
347 if (prop.startsWith("getdown_txt_") && val != null) {
348 if (prop.startsWith("getdown_txt_multi_")) {
349 def key = prop.substring(18)
350 val.split(",").each{ v ->
351 def line = key + " = " + v + "\n"
352 getdownTextString += line
355 // file values rationalised
356 if (val.indexOf('/') > -1) {
358 if (val.indexOf('/') == 0) {
361 } else if (val.indexOf('/') > 0) {
362 // relative path (relative to jalviewDir)
363 r = file( jalviewDir + '/' + val )
366 val = getdown_resource_dir + '/' + r.getName()
367 getdownWebsiteResourceFilenames += val
368 getdownResourceFilenames += r.getPath()
371 def line = prop.substring(12) + " = " + val + "\n"
372 getdownTextString += line
377 getdownWebsiteResourceFilenames.each{ filename ->
378 getdownTextString += "resource = "+filename+"\n"
380 getdownResourceFilenames.each{ filename ->
383 into project.ext.getdownResourceDir
388 makeDist.outputs.files.each{ f ->
389 if (f.isDirectory()) {
390 def files = fileTree(dir: f, include: ["*"]).getFiles()
392 } else if (f.exists()) {
396 codeFiles.sort().each{f ->
397 def line = "code = " + getdown_app_dir + '/' + f.getName() + "\n"
398 getdownTextString += line
401 into project.ext.getdownAppDir
405 if (JAVA_VERSION.equals("11")) {
406 def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles()
407 j11libFiles.sort().each{f ->
408 def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n"
409 getdownTextString += line
412 into project.ext.getdownJ11libDir
417 getdownTextString += "code = " + file(getdownLauncher).getName() + "\n"
418 getdownTextString += "class = " + mainClass + "\n"
420 def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt")
421 getdown_txt.write(getdownTextString)
425 into project.ext.getdownFilesDir
430 into project.ext.getdownWebsiteDir
435 into project.ext.getdownFilesDir
439 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.background_image')
440 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.error_background')
441 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.progress_image')
442 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.icon')
443 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.mac_dock_icon')
444 into project.ext.getdownFilesDir + '/' + getdown_resource_dir
448 inputs.dir(jalviewDir + '/' + packageDir)
449 outputs.dir(project.ext.getdownWebsiteDir)
450 outputs.dir(project.ext.getdownFilesDir)
453 task getdownDigest(type: JavaExec) {
454 dependsOn getdownWebsite
455 classpath = files(jalviewDir + '/' + getdown_core)
456 main = "com.threerings.getdown.tools.Digester"
457 args project.ext.getdownWebsiteDir
458 outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt")
462 dependsOn getdownDigest
466 delete project.ext.getdownWebsiteDir
467 delete project.ext.getdownFilesDir
471 def install4jHomeDir = "/opt/install4j"
472 def hostname = "hostname".execute().text.trim()
473 if (hostname.equals("jv-bamboo")) {
474 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
475 } else if (OperatingSystem.current().isMacOsX()) {
476 install4jHomeDir = '/Applications/install4j.app/Contents/Resources/app'
477 if (! file(install4jHomeDir).exists()) {
478 install4jHomeDir = System.getProperty("user.home")+install4jHomeDir
480 } else if (OperatingSystem.current().isLinux()) {
481 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
483 installDir = file(install4jHomeDir)
486 task installers(type: com.install4j.gradle.Install4jTask) {
488 projectFile = "$jalviewDir/$install4jResourceDir/$install4jConf"
489 variables = [majorVersion: version.substring(2, 11), build: 001]
490 destination = "$jalviewDir/$install4jBuildDir"
492 inputs.dir(project.ext.getdownWebsiteDir)
493 outputs.dir("$jalviewDir/$install4jBuildDir")