X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=build.gradle;h=437c43a57da9ae2f762eda3e560913b220cfa434;hb=ce59cf0845b1420b9382d91e4df1de78c00885d1;hp=a917a0df69f19cf79f27888cb6d60b1c220016bc;hpb=816524fc72f16bbd9bdaadfccbd6214bd2acafa2;p=jalview.git
diff --git a/build.gradle b/build.gradle
index a917a0d..437c43a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -51,9 +51,8 @@ plugins {
id 'java'
id 'application'
id 'eclipse'
- id "com.diffplug.spotless" version "6.18.0" //.gradle.spotless" "3.28.0"
- id 'com.github.johnrengelman.shadow' version '8.1.1' // was 4.0.3
id "com.diffplug.gradle.spotless" version "3.28.0"
+ id 'com.github.johnrengelman.shadow' version '6.0.0'
id 'com.install4j.gradle' version '10.0.3'
id 'com.dorongold.task-tree' version '2.1.1' // only needed to display task dependency tree with gradle task1 [task2 ...] taskTree
id 'com.palantir.git-version' version '0.13.0' apply false
@@ -194,7 +193,6 @@ ext {
testDir = string("${jalviewDir}/${bareTestSourceDir}")
classesDir = string("${jalviewDir}/${classes_dir}")
- outputDir = file(classesDir)
// clover
useClover = clover.equals("true")
@@ -1285,15 +1283,15 @@ def mdFileComponents(File mdFile, def dateOnly=false) {
}
if (inFrontMatter) {
def m = null
- if (m == line =~ /^date:\s*(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/) {
+ if (m = line =~ /^date:\s*(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/) {
map["date"] = new Date().parse("yyyy-MM-dd HH:mm:ss", m[0][1])
- } else if (m == line =~ /^date:\s*(\d{4}-\d{2}-\d{2})/) {
+ } else if (m = line =~ /^date:\s*(\d{4}-\d{2}-\d{2})/) {
map["date"] = new Date().parse("yyyy-MM-dd", m[0][1])
- } else if (m == line =~ /^channel:\s*(\S+)/) {
+ } else if (m = line =~ /^channel:\s*(\S+)/) {
map["channel"] = m[0][1]
- } else if (m == line =~ /^version:\s*(\S+)/) {
+ } else if (m = line =~ /^version:\s*(\S+)/) {
map["version"] = m[0][1]
- } else if (m == line =~ /^\s*([^:]+)\s*:\s*(\S.*)/) {
+ } else if (m = line =~ /^\s*([^:]+)\s*:\s*(\S.*)/) {
map[ m[0][1] ] = m[0][2]
}
if (dateOnly && map["date"] != null) {
@@ -1352,7 +1350,7 @@ task hugoTemplates {
def inSection = false
changes.eachLine { line ->
def m = null
- if (m == line =~ /^##([^#].*)$/) {
+ if (m = line =~ /^##([^#].*)$/) {
if (inSection) {
changesHugo += "\n\n"
}
@@ -1362,7 +1360,7 @@ task hugoTemplates {
section = section.replaceAll(/[^a-z0-9_\-]/, "")
changesHugo += "
\n\n"
inSection = true
- } else if (m == line =~ /^(\s*-\s*)(.*?)(
)?\s*$/) {
+ } else if (m = line =~ /^(\s*-\s*)(.*?)(
)?\s*$/) {
def comment = m[0][2].trim()
if (comment != "") {
comment = comment.replaceAll('"', """)
@@ -1432,7 +1430,7 @@ def getMdSections(String content) {
def sectionName = null
content.eachLine { line ->
def m = null
- if (m == line =~ /^##([^#].*)$/) {
+ if (m = line =~ /^##([^#].*)$/) {
if (sectionName != null) {
sections[sectionName] = sectionContent
sectionName = null
@@ -1488,7 +1486,6 @@ task copyHelp(type: Copy) {
}
-/*
task releasesTemplates {
group "help"
description "Recreate whatsNew.html and releases.html from markdown files and templates in help"
@@ -1565,9 +1562,9 @@ task releasesTemplates {
def lm = null
def rContentProcessed = ""
rContent.eachLine { line ->
- if (lm == line =~ /^(\s*-)(\s*)(.*)$/) {
+ if (lm = line =~ /^(\s*-)(\s*)(.*)$/) {
line = "${lm[0][1]}${lm[0][3]}${lm[0][2]}"
- } else if (lm == line =~ /^###([^#]+.*)$/) {
+ } else if (lm = line =~ /^###([^#]+.*)$/) {
line = "_${lm[0][1].trim()}_"
}
rContentProcessed += line + "\n"
@@ -1625,7 +1622,6 @@ task releasesTemplates {
outputs.file(whatsnewHtmlFile)
}
-*/
task copyResources(type: Copy) {
group = "build"
@@ -1687,7 +1683,6 @@ task copyChannelResources(type: Copy) {
task createBuildProperties(type: WriteProperties) {
dependsOn copyResources
- dependsOn copyChannelResources
group = "build"
description = "Create the ${buildProperties} file"
@@ -1711,7 +1706,6 @@ task createBuildProperties(type: WriteProperties) {
task buildIndices(type: JavaExec) {
dependsOn copyHelp
- //dependsOn releasesTemplates
classpath = sourceSets.main.compileClasspath
main = "com.sun.java.help.search.Indexer"
workingDir = "${helpBuildDir}/${help_dir}"
@@ -1739,25 +1733,18 @@ task prepare {
dependsOn buildResources
dependsOn copyDocs
dependsOn copyHelp
- //dependsOn releasesTemplates
+ dependsOn releasesTemplates
dependsOn convertMdFiles
dependsOn buildIndices
}
-// random block of dependencies
compileJava.dependsOn prepare
run.dependsOn compileJava
-//run.dependsOn prepare
-compileTestJava.dependsOn compileJava //
-compileTestJava.dependsOn buildIndices //
-processResources.dependsOn copyChannelResources //
-processResources.dependsOn copyResources //
-processResources.dependsOn createBuildProperties //
-processResources.dependsOn copyDocs //
-processResources.dependsOn convertMdFiles //
-processResources.dependsOn copyHelp //
-processResources.dependsOn buildIndices //
+compileTestJava.dependsOn compileJava
+
+
+
test {
group = "Verification"
description = "Runs all testTaskN tasks)"
@@ -1782,6 +1769,7 @@ task testTask0(type: Test) {
preserveOrder true
useDefaultListeners=true
}
+ timeout = Duration.ofMinutes(15)
}
/* separated tests */
@@ -1794,6 +1782,30 @@ task testTask1(type: Test) {
preserveOrder true
useDefaultListeners=true
}
+ timeout = Duration.ofMinutes(5)
+}
+
+task testTask2(type: Test) {
+ group = "Verification"
+ description = "Tests that need to be isolated from the main test run"
+ useTestNG() {
+ includeGroups name
+ excludeGroups testng_excluded_groups.split(",")
+ preserveOrder true
+ useDefaultListeners=true
+ }
+ timeout = Duration.ofMinutes(5)
+}
+task testTask3(type: Test) {
+ group = "Verification"
+ description = "Tests that need to be isolated from the main test run"
+ useTestNG() {
+ includeGroups name
+ excludeGroups testng_excluded_groups.split(",")
+ preserveOrder true
+ useDefaultListeners=true
+ }
+ timeout = Duration.ofMinutes(5)
}
/* insert more testTaskNs here -- change N to next digit or other string */
@@ -1810,6 +1822,7 @@ task testTaskN(type: Test) {
}
*/
+
/*
* adapted from https://medium.com/@wasyl/pretty-tests-summary-in-gradle-744804dd676c
* to summarise test results from all Test tasks
@@ -1843,10 +1856,16 @@ tasks.withType(Test).matching {t -> t.getName().startsWith("testTask")}.all { te
showExceptions true
showCauses true
showStackTraces true
-
+ if (test_output) {
+ showStandardStreams true
+ }
info.events = [ TestLogEvent.FAILED ]
}
+ if (OperatingSystem.current().isMacOsX()) {
+ testTask.systemProperty "apple.awt.UIElement", "true"
+ testTask.environment "JAVA_TOOL_OPTIONS", "-Dapple.awt.UIElement=true"
+ }
ignoreFailures = true // Always try to run all tests for all modules
@@ -2018,7 +2037,6 @@ private static void printResults(allResults) {
/* END of test tasks results summary */
-/*
task compileLinkCheck(type: JavaCompile) {
options.fork = true
classpath = files("${jalviewDir}/${utils_dir}")
@@ -2053,7 +2071,6 @@ task linkCheck(type: JavaExec) {
inputs.dir(helpBuildDir)
outputs.file(helpLinksCheckerOutFile)
}
-*/
// import the pubhtmlhelp target
@@ -2068,14 +2085,10 @@ task cleanPackageDir(type: Delete) {
}
}
-// block of dependencies
-//compileTestJava.dependsOn compileLinkCheck //
-//copyChannelResources.dependsOn compileLinkCheck //
-//convertMdFiles.dependsOn compileLinkCheck //
jar {
dependsOn prepare
- dependsOn //linkCheck
+ dependsOn linkCheck
manifest {
attributes "Main-Class": main_class,
@@ -2086,7 +2099,7 @@ jar {
}
def outputDir = "${jalviewDir}/${package_dir}"
- outputDir = file(outputDir)
+ destinationDirectory = file(outputDir)
archiveFileName = rootProject.name+".jar"
duplicatesStrategy "EXCLUDE"
@@ -2142,25 +2155,59 @@ task cleanDist {
}
+task launcherJar(type: Jar) {
+ manifest {
+ attributes (
+ "Main-Class": shadow_jar_main_class,
+ "Implementation-Version": JALVIEW_VERSION,
+ "Application-Name": applicationName
+ )
+ }
+}
+
shadowJar {
group = "distribution"
description = "Create a single jar file with all dependency libraries merged. Can be run with java -jar"
if (buildDist) {
dependsOn makeDist
}
- from ("${jalviewDir}/${libDistDir}") {
- include("*.jar")
- }
+
+ def jarFiles = fileTree(dir: "${jalviewDir}/${libDistDir}", include: "*.jar", exclude: "regex.jar").getFiles()
+ def groovyJars = jarFiles.findAll {it1 -> file(it1).getName().startsWith("groovy-swing")}
+ def otherJars = jarFiles.findAll {it2 -> !file(it2).getName().startsWith("groovy-swing")}
+ from groovyJars
+ from otherJars
+
manifest {
- attributes "Implementation-Version": JALVIEW_VERSION,
- "Application-Name": applicationName
+ // shadowJar manifest must inheritFrom another Jar task. Can't set attributes here.
+ inheritFrom(project.tasks.launcherJar.manifest)
+ }
+ // we need to include the groovy-swing Include-Package for it to run in the shadowJar
+ doFirst {
+ def jarFileManifests = []
+ groovyJars.each { jarFile ->
+ def mf = zipTree(jarFile).getFiles().find { it.getName().equals("MANIFEST.MF") }
+ if (mf != null) {
+ jarFileManifests += mf
+ }
+ }
+ manifest {
+ from (jarFileManifests) {
+ eachEntry { details ->
+ if (!details.key.equals("Import-Package")) {
+ details.exclude()
+ }
+ }
+ }
+ }
}
duplicatesStrategy "INCLUDE"
+ // this mainClassName is mandatory but gets ignored due to manifest created in doFirst{}. Set the Main-Class as an attribute in launcherJar instead
mainClassName = shadow_jar_main_class
mergeServiceFiles()
- archiveClassifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION
+ classifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION
minimize()
}
@@ -2211,9 +2258,9 @@ task getdownImages() {
dependsOn getdownImagesProcess
}
-task getdownWebsite() {
+task getdownWebsiteBuild() {
group = "distribution"
- description = "Create the getdown minimal app folder, and website folder for this version of jalview. Website folder also used for offline app installer"
+ description = "Create the getdown minimal app folder, and website folder for this version of jalview. Website folder also used for offline app installer. No digest is created."
dependsOn getdownImages
if (buildDist) {
@@ -2325,7 +2372,7 @@ task getdownWebsite() {
from s
into "${getdownAppBaseDir}/${getdown_wrapper_script_dir}"
}
- getdownTextLines += "resource = ${getdown_wrapper_script_dir}/${script}"
+ getdownTextLines += "xresource = ${getdown_wrapper_script_dir}/${script}"
}
}
@@ -2467,7 +2514,9 @@ task getdownDigestDir(type: JavaExec) {
task getdownDigest(type: JavaExec) {
group = "distribution"
description = "Digest the getdown website folder"
- dependsOn getdownWebsite
+
+ dependsOn getdownWebsiteBuild
+
doFirst {
classpath = files(getdownLauncher)
}
@@ -2500,12 +2549,19 @@ task getdown() {
}
}
+task getdownWebsite {
+ group = "distribution"
+ description = "A task to create the whole getdown channel website dir including digest file"
+
+ dependsOn getdownWebsiteBuild
+ dependsOn getdownDigest
+}
task getdownArchiveBuild() {
group = "distribution"
description = "Put files in the archive dir to go on the website"
- dependsOn getdownWebsite
+ dependsOn getdownWebsiteBuild
def v = "v${JALVIEW_VERSION_UNDERSCORES}"
def vDir = "${getdownArchiveDir}/${v}"
@@ -2552,6 +2608,14 @@ task getdownArchiveBuild() {
}
}
+ // the wrapper scripts dir
+ if ( file("${getdownAppBaseDir}/${getdown_wrapper_script_dir}").exists() ) {
+ copy {
+ from "${getdownAppBaseDir}/${getdown_wrapper_script_dir}"
+ into "${getdownFullArchiveDir}/${getdown_wrapper_script_dir}"
+ }
+ }
+
getdownArchiveTxt.write(getdownArchiveTextLines.join("\n"))
def vLaunchJvl = file(getdownVersionLaunchJvl)
@@ -3015,6 +3079,7 @@ task sourceDist(type: Tar) {
into project.name
def EXCLUDE_FILES=[
+ "dist/*",
"build/*",
"bin/*",
"test-output/",