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 //compileClasspath += fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"])
47 runtimeClasspath = compileClasspath
52 srcDirs "$jalviewDir/$testSourceDir"
53 outputDir = file("$jalviewDir/$testOutputDir")
57 srcDirs = sourceSets.main.resources.srcDirs
60 compileClasspath = sourceSets.main.compileClasspath
61 compileClasspath += files( sourceSets.test.java.outputDir )
62 compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
64 runtimeClasspath = compileClasspath
68 compileClasspath = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"])
70 runtimeClasspath = compileClasspath
78 if (JAVA_VERSION.equals("1.8")) {
79 sourceCompatibility = 1.8
80 targetCompatibility = 1.8
81 } else if (JAVA_VERSION.equals("11")) {
82 sourceCompatibility = 11
83 targetCompatibility = 11
85 options.compilerArgs = [
86 '--module-path', sourceSets.modules.compileClasspath.asPath,
87 '--add-modules', j11modules
95 delete sourceSets.main.java.outputDir
99 delete sourceSets.test.java.outputDir
102 def getDate(format) {
103 def date = new Date()
104 //return date.format("dd MMMM yyyy")
105 return date.format(format)
109 def stdout = new ByteArrayOutputStream()
111 commandLine "git", "rev-parse", "--short", "HEAD"
112 standardOutput = stdout
113 workingDir = jalviewDir
115 return stdout.toString().trim()
119 def stdout = new ByteArrayOutputStream()
121 commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
122 standardOutput = stdout
123 workingDir = jalviewDir
125 return stdout.toString().trim()
128 task createBuildProperties(type: WriteProperties) {
129 inputs.dir("$jalviewDir/$sourceDir")
130 inputs.dir("$jalviewDir/$resourceDir")
131 outputFile "$jalviewDir/$classesDir/$buildPropertiesFile"
132 /* taking time/date specific comment out to allow better incremental builds */
133 //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss")
134 comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
135 property "BUILD_DATE", getDate("dd MMMM yyyy")
136 property "VERSION", JALVIEW_VERSION
137 property "INSTALLATION", INSTALLATION+" git-commit:"+getGitHash()+" ["+getGitBranch()+"]"
138 outputs.file(outputFile)
139 outputs.dir("$jalviewDir/$classesDir")
142 task syncDocs(type: Sync) {
143 def syncDir = "$jalviewDir/$classesDir/$docDir"
144 from fileTree("$jalviewDir/$docDir")
149 def helpFile = "$jalviewDir/$classesDir/$helpDir/help.jhm"
150 task syncHelp(type: Sync) {
151 inputs.files("$jalviewDir/$helpDir")
152 outputs.files(helpFile)
154 def syncDir = "$jalviewDir/$classesDir/$helpDir"
155 from fileTree("$jalviewDir/$helpDir")
159 task copyHelp(type: Copy) {
160 def inputDir = "$jalviewDir/$helpDir"
161 def outputDir = "$jalviewDir/$classesDir/$helpDir"
164 filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': "USING_FILTER"])
166 outputs.files(helpFile)
167 outputs.dir(outputDir)
170 task syncLib(type: Sync) {
171 def syncDir = "$jalviewDir/$classesDir/$libDir"
172 from fileTree("$jalviewDir/$libDir")
176 task syncResources(type: Sync) {
177 from "$jalviewDir/$resourceDir"
179 into "$jalviewDir/$classesDir"
186 dependsOn syncResources
191 //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir
194 dependsOn compileJava
196 includeGroups testngGroups
198 workingDir = jalviewDir
199 //systemProperties 'clover.jar' System.properties.clover.jar
202 task buildIndices(type: JavaExec) {
204 classpath = sourceSets.main.compileClasspath
205 main = "com.sun.java.help.search.Indexer"
206 workingDir = "$jalviewDir/$classesDir/$helpDir"
209 inputs.dir("$workingDir/$argDir")
211 outputs.dir("$jalviewDir/$classesDir/doc")
212 outputs.dir("$jalviewDir/$classesDir/help")
213 outputs.file("$workingDir/JavaHelpSearch/DOCS")
214 outputs.file("$workingDir/JavaHelpSearch/DOCS.TAB")
215 outputs.file("$workingDir/JavaHelpSearch/OFFSETS")
216 outputs.file("$workingDir/JavaHelpSearch/POSITIONS")
217 outputs.file("$workingDir/JavaHelpSearch/SCHEMA")
218 outputs.file("$workingDir/JavaHelpSearch/TMAP")
221 task compileLinkCheck(type: JavaCompile) {
223 classpath = files("$jalviewDir/$utilsDir")
224 destinationDir = file("$jalviewDir/$utilsDir")
225 source = fileTree(dir: "$jalviewDir/$utilsDir", include: ["HelpLinksChecker.java", "BufferedLineReader.java"])
227 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.class")
228 outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class")
231 task linkCheck(type: JavaExec) {
232 dependsOn prepare, compileLinkCheck
233 classpath = files("$jalviewDir/$utilsDir")
234 main = "HelpLinksChecker"
235 workingDir = "$jalviewDir"
236 args = [ "$classesDir/$helpDir", "-nointernet" ]
239 standardOutput new FileOutputStream("$jalviewDir/$utilsDir/HelpLinksChecker.out")
242 outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.out")
245 task cleanPackageDir(type: Delete) {
246 delete fileTree("$jalviewDir/$packageDir").include("*.jar")
251 dependsOn buildIndices
252 dependsOn createBuildProperties
255 attributes "Main-Class": mainClass,
256 "Permissions": "all-permissions",
257 "Application-Name": "Jalview Desktop",
258 "Codebase": application_codebase
261 destinationDir = file("$jalviewDir/$packageDir")
262 archiveName = rootProject.name+".jar"
270 inputs.dir("$jalviewDir/$classesDir")
271 outputs.file("$jalviewDir/$packageDir/$archiveName")
274 task copyJars(type: Copy) {
275 from fileTree("$jalviewDir/$classesDir").include("**/*.jar").include("*.jar").files
276 into "$jalviewDir/$packageDir"
279 // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well
280 task syncJars(type: Sync) {
281 from fileTree("$jalviewDir/$libDir").include("**/*.jar").include("*.jar").files
282 into "$jalviewDir/$packageDir"
284 include jar.archiveName
289 // order of "cleanPackageDir", "copyJars", "jar" important!
290 jar.mustRunAfter cleanPackageDir
291 syncJars.mustRunAfter cleanPackageDir
292 dependsOn cleanPackageDir
295 outputs.dir("$jalviewDir/$packageDir")
299 dependsOn cleanPackageDir
306 if (JAVA_VERSION.equals("11")) {
307 from ("$jalviewDir/$j11libDir") {
311 mainClassName = shadowJarMainClass
318 getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir
319 getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir
320 getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir
321 getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir
322 getdownLauncher = jalviewDir + '/' + getdown_launcher
323 getdownFilesDir = jalviewDir + '/' + getdown_files_dir
326 task getdownWebsite() {
328 def getdownWebsiteResourceFilenames = []
329 def getdownTextString = ""
330 def getdownResourceDir = project.ext.getdownResourceDir
331 def getdownAppDir = project.ext.getdownAppDir
332 def getdownResourceFilenames = []
334 // go through properties looking for getdown_txt_...
335 def props = project.properties.sort { it.key }
336 if (JAVA_VERSION.equals("11")) {
337 props.put("getdown_txt_java_min_version", getdown_alt_java11_min_version)
339 props.put("getdown_txt_java_min_version", getdown_alt_java8_min_version)
341 props.each{ prop, val ->
342 if (prop.startsWith("getdown_txt_") && val != null) {
343 // file values rationalised
344 if (val.indexOf('/') > -1) {
346 if (val.indexOf('/') == 0) {
349 } else if (val.indexOf('/') > 0) {
350 // relative path (relative to jalviewDir)
351 r = file( jalviewDir + '/' + val )
354 val = getdown_resource_dir + '/' + r.getName()
355 getdownWebsiteResourceFilenames += val
356 getdownResourceFilenames += r.getPath()
359 def line = prop.substring(12) + " = " + val + "\n"
360 getdownTextString += line
364 getdownWebsiteResourceFilenames.each{ filename ->
365 getdownTextString += "resource = "+filename+"\n"
367 getdownResourceFilenames.each{ filename ->
370 into project.ext.getdownResourceDir
375 makeDist.outputs.files.each{ f ->
376 if (f.isDirectory()) {
377 def files = fileTree(dir: f, include: ["*"]).getFiles()
379 } else if (f.exists()) {
383 codeFiles.sort().each{f ->
384 def line = "code = " + getdown_app_dir + '/' + f.getName() + "\n"
385 getdownTextString += line
388 into project.ext.getdownAppDir
392 if (JAVA_VERSION.equals("11")) {
393 def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles()
394 j11libFiles.sort().each{f ->
395 def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n"
396 getdownTextString += line
399 into project.ext.getdownJ11libDir
404 getdownTextString += "code = " + file(getdownLauncher).getName() + "\n"
405 getdownTextString += "class = " + mainClass + "\n"
407 def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt")
408 getdown_txt.write(getdownTextString)
412 into project.ext.getdownFilesDir
417 into project.ext.getdownWebsiteDir
422 into project.ext.getdownFilesDir
426 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.background_image')
427 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.error_background')
428 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.progress_image')
429 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.icon')
430 from jalviewDir + '/' + project.getProperty('getdown_txt_ui.mac_dock_icon')
431 into project.ext.getdownFilesDir + '/' + getdown_resource_dir
435 inputs.dir(jalviewDir + '/' + packageDir)
436 outputs.dir(project.ext.getdownWebsiteDir)
437 outputs.dir(project.ext.getdownFilesDir)
440 task getdownDigest(type: JavaExec) {
441 dependsOn getdownWebsite
442 classpath = files(jalviewDir + '/' + getdown_core)
443 main = "com.threerings.getdown.tools.Digester"
444 args project.ext.getdownWebsiteDir
445 outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt")
449 dependsOn getdownDigest
453 delete project.ext.getdownWebsiteDir
454 delete project.ext.getdownFilesDir
458 def install4jHomeDir = "/opt/install4j"
459 def hostname = "hostname".execute().text.trim()
460 if (hostname.equals("jv-bamboo")) {
461 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
462 } else if (OperatingSystem.current().isMacOsX()) {
463 install4jHomeDir = '/Applications/install4j.app/Contents/Resources/app'
464 if (! file(install4jHomeDir).exists()) {
465 install4jHomeDir = System.getProperty("user.home")+install4jHomeDir
467 } else if (OperatingSystem.current().isLinux()) {
468 install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j"
470 installDir = file(install4jHomeDir)
473 task installers(type: com.install4j.gradle.Install4jTask) {
475 projectFile = "$jalviewDir/$install4jResourceDir/$install4jConf"
476 variables = [majorVersion: version.substring(2, 11), build: 001]
477 destination = "$jalviewDir/$install4jBuildDir"
479 inputs.dir(project.ext.getdownWebsiteDir)
480 outputs.dir("$jalviewDir/$install4jBuildDir")