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"
183 into "$jalviewDir/$classesDir"
190 dependsOn syncResources
195 //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir
198 dependsOn compileJava
200 includeGroups testngGroups
202 workingDir = jalviewDir
203 //systemProperties 'clover.jar' System.properties.clover.jar
206 task buildIndices(type: JavaExec) {
208 classpath = sourceSets.main.compileClasspath
209 main = "com.sun.java.help.search.Indexer"
210 workingDir = "$jalviewDir/$classesDir/$helpDir"
213 inputs.dir("$workingDir/$argDir")
215 outputs.dir("$jalviewDir/$classesDir/doc")
216 outputs.dir("$jalviewDir/$classesDir/help")
217 outputs.file("$workingDir/JavaHelpSearch/DOCS")
218 outputs.file("$workingDir/JavaHelpSearch/DOCS.TAB")
219 outputs.file("$workingDir/JavaHelpSearch/OFFSETS")
220 outputs.file("$workingDir/JavaHelpSearch/POSITIONS")
221 outputs.file("$workingDir/JavaHelpSearch/SCHEMA")
222 outputs.file("$workingDir/JavaHelpSearch/TMAP")
225 task compileLinkCheck(type: JavaCompile) {
227 classpath = files("$jalviewDir/$utilsDir")
228 destinationDir = file("$jalviewDir/$utilsDir")
229 source = fileTree(dir: "$jalviewDir/$utilsDir", include: ["HelpLinksChecker.java", "BufferedLineReader.java"])
231 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.class")
232 outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class")
235 task linkCheck(type: JavaExec) {
236 dependsOn prepare, compileLinkCheck
237 classpath = files("$jalviewDir/$utilsDir")
238 main = "HelpLinksChecker"
239 workingDir = "$jalviewDir"
240 args = [ "$classesDir/$helpDir", "-nointernet" ]
243 standardOutput new FileOutputStream("$jalviewDir/$utilsDir/HelpLinksChecker.out")
246 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.out")
249 task cleanPackageDir(type: Delete) {
250 delete fileTree("$jalviewDir/$packageDir").include("*.jar")
255 dependsOn buildIndices
256 dependsOn createBuildProperties
259 attributes "Main-Class": mainClass,
260 "Permissions": "all-permissions",
261 "Application-Name": "Jalview Desktop",
262 "Codebase": application_codebase
265 destinationDir = file("$jalviewDir/$packageDir")
266 archiveName = rootProject.name+".jar"
274 inputs.dir("$jalviewDir/$classesDir")
275 outputs.file("$jalviewDir/$packageDir/$archiveName")
278 task copyJars(type: Copy) {
279 from fileTree("$jalviewDir/$classesDir").include("**/*.jar").include("*.jar").files
280 into "$jalviewDir/$packageDir"
283 // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well
284 task syncJars(type: Sync) {
285 from fileTree("$jalviewDir/$libDir").include("**/*.jar").include("*.jar").files
286 into "$jalviewDir/$packageDir"
288 include jar.archiveName
293 // order of "cleanPackageDir", "copyJars", "jar" important!
294 jar.mustRunAfter cleanPackageDir
295 syncJars.mustRunAfter cleanPackageDir
296 dependsOn cleanPackageDir
299 outputs.dir("$jalviewDir/$packageDir")
303 dependsOn cleanPackageDir
310 if (JAVA_VERSION.equals("11")) {
311 from ("$jalviewDir/$j11libDir") {
315 mainClassName = shadowJarMainClass
322 getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir
323 getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir
324 getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir
325 getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir
326 getdownLauncher = jalviewDir + '/' + getdown_launcher
327 getdownFilesDir = jalviewDir + '/' + getdown_files_dir
330 task getdownWebsite() {
332 def getdownWebsiteResourceFilenames = []
333 def getdownTextString = ""
334 def getdownResourceDir = project.ext.getdownResourceDir
335 def getdownAppDir = project.ext.getdownAppDir
336 def getdownResourceFilenames = []
338 // go through properties looking for getdown_txt_...
339 def props = project.properties.sort { it.key }
340 if (JAVA_VERSION.equals("11")) {
341 props.put("getdown_txt_java_min_version", getdown_alt_java11_min_version)
343 props.put("getdown_txt_java_min_version", getdown_alt_java8_min_version)
345 props.each{ prop, val ->
346 if (prop.startsWith("getdown_txt_") && val != null) {
347 if (prop.startsWith("getdown_txt_multi_")) {
348 def key = prop.substring(18)
349 val.split(",").each{ v ->
350 def line = key + " = " + v + "\n"
351 getdownTextString += line
354 // file values rationalised
355 if (val.indexOf('/') > -1) {
357 if (val.indexOf('/') == 0) {
360 } else if (val.indexOf('/') > 0) {
361 // relative path (relative to jalviewDir)
362 r = file( jalviewDir + '/' + val )
365 val = getdown_resource_dir + '/' + r.getName()
366 getdownWebsiteResourceFilenames += val
367 getdownResourceFilenames += r.getPath()
370 def line = prop.substring(12) + " = " + val + "\n"
371 getdownTextString += line
376 getdownWebsiteResourceFilenames.each{ filename ->
377 getdownTextString += "resource = "+filename+"\n"
379 getdownResourceFilenames.each{ filename ->
382 into project.ext.getdownResourceDir
387 makeDist.outputs.files.each{ f ->
388 if (f.isDirectory()) {
389 def files = fileTree(dir: f, include: ["*"]).getFiles()
391 } else if (f.exists()) {
395 codeFiles.sort().each{f ->
396 def line = "code = " + getdown_app_dir + '/' + f.getName() + "\n"
397 getdownTextString += line
400 into project.ext.getdownAppDir
404 if (JAVA_VERSION.equals("11")) {
405 def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles()
406 j11libFiles.sort().each{f ->
407 def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n"
408 getdownTextString += line
411 into project.ext.getdownJ11libDir
416 getdownTextString += "code = " + file(getdownLauncher).getName() + "\n"
417 getdownTextString += "class = " + mainClass + "\n"
419 def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt")
420 getdown_txt.write(getdownTextString)
424 into project.ext.getdownFilesDir
429 into project.ext.getdownWebsiteDir
434 into project.ext.getdownFilesDir
438 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.background_image')
439 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.error_background')
440 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.progress_image')
441 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.icon')
442 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.mac_dock_icon')
443 into project.ext.getdownFilesDir + '/' + getdown_resource_dir
447 inputs.dir(jalviewDir + '/' + packageDir)
448 outputs.dir(project.ext.getdownWebsiteDir)
449 outputs.dir(project.ext.getdownFilesDir)
452 task getdownDigest(type: JavaExec) {
453 dependsOn getdownWebsite
454 classpath = files(jalviewDir + '/' + getdown_core)
455 main = "com.threerings.getdown.tools.Digester"
456 args project.ext.getdownWebsiteDir
457 outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt")
461 dependsOn getdownDigest
465 delete project.ext.getdownWebsiteDir
466 delete project.ext.getdownFilesDir
470 def install4jHomeDir = "/opt/install4j"
471 def hostname = "hostname".execute().text.trim()
472 if (hostname.equals("jv-bamboo")) {
473 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
474 } else if (OperatingSystem.current().isMacOsX()) {
475 install4jHomeDir = '/Applications/install4j.app/Contents/Resources/app'
476 if (! file(install4jHomeDir).exists()) {
477 install4jHomeDir = System.getProperty("user.home")+install4jHomeDir
479 } else if (OperatingSystem.current().isLinux()) {
480 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
482 installDir = file(install4jHomeDir)
485 task installers(type: com.install4j.gradle.Install4jTask) {
487 projectFile = "$jalviewDir/$install4jResourceDir/$install4jConf"
488 variables = [majorVersion: version.substring(2, 11), build: 001]
489 destination = "$jalviewDir/$install4jBuildDir"
491 inputs.dir(project.ext.getdownWebsiteDir)
492 outputs.dir("$jalviewDir/$install4jBuildDir")