JAL-3225 Classpath now made in eclipse.classpath.file.whenMerged and recognised by...
authorBen Soares <bsoares@dundee.ac.uk>
Thu, 6 Jun 2019 14:06:58 +0000 (15:06 +0100)
committerBen Soares <bsoares@dundee.ac.uk>
Thu, 6 Jun 2019 14:06:58 +0000 (15:06 +0100)
build.gradle

index a7c7f18..b07ea37 100644 (file)
@@ -1,6 +1,10 @@
 import org.apache.tools.ant.filters.ReplaceTokens
 //import org.apache.tools.ant.filters.ReplaceRegexp
 import org.gradle.internal.os.OperatingSystem
+import org.gradle.plugins.ide.eclipse.model.*
+
+
+import groovy.transform.ExternalizeMethods
 
 buildscript {
   dependencies {
@@ -48,20 +52,18 @@ def compile_target_compatibility
 
 ext {
   // where the getdown channel will be built.
-  // TODO: consider allowing this expression to  be overrriden by -P arg
+  // TODO: consider allowing this expression to  be overridden by -P arg
   getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir + '/' + JAVA_VERSION
   getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir
   getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir
   getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir
   getdownLauncher = jalviewDir + '/' + getdown_launcher
   getdownFilesDir = jalviewDir + '/' + getdown_files_dir + '/' + JAVA_VERSION + '/'
-  def getdownChannel = getdown_channel_name
-  if (getdown_channel_name.equals("COMMIT")) {
-    getdownChannel = getGitHash()
-  }
-  getdown_app_base = getdown_channel_base+"/"+getdownChannel+"/"+JAVA_VERSION+"/"
+  getdown_app_base = getdown_channel_base+"/"+getdown_channel_name+"/"+JAVA_VERSION+"/"
   modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"])
   modules_runtimeClasspath = modules_compileClasspath
+  gitHash = ""
+  gitBranch = ""
 }
 
 def JAVA_INTEGER_VERSION
@@ -149,8 +151,8 @@ sourceSets {
     } else {
       compileClasspath += files(sourceSets.main.java.outputDir)
     }
-    compileClasspath += sourceSets.main.compileClasspath
-    compileClasspath += files( sourceSets.main.resources.srcDirs)
+    //compileClasspath += sourceSets.main.compileClasspath
+    //compileClasspath += files( sourceSets.main.resources.srcDirs)
     compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
     compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
 
@@ -190,7 +192,6 @@ eclipse {
         removeThese += it
       }
     }
-    containers 'org.eclipse.buildship.core.gradleclasspathcontainer'
 
     minusConfigurations += removeThese
     plusConfigurations = [ ]
@@ -209,31 +210,11 @@ eclipse {
           }
         }
         cp.entries.removeAll(removeTheseToo)
-      }
-
-      withXml {
-        def node = it.asNode()
-        def srcTestAttributes
-        node.children().each{ cpe ->
-          def attributes = cpe.attributes()
-          if (attributes.get("kind") == "src" && attributes.get("path") == "test") {
-            srcTestAttributes = cpe.find { a -> a.name() == "attributes" }
-            return
-          }
-        }
-        def addTestAttribute = true
-        srcTestAttributes.each{a ->
-          if (a.name() == "attribute" && a.attributes().getAt("name") == "test") {
-            addTestAttribute = false
-          }
-        }
-        if (addTestAttribute) {
-          srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"]))
-        }
-
-        node.appendNode('classpathentry', [kind:"output", path:"bin/main"])
-        node.appendNode('classpathentry', [kind:"lib", path:helpParentDir])
-        node.appendNode('classpathentry', [kind:"lib", path:resourceDir])
+        
+        cp.entries += new Output("bin/main")
+        cp.entries += new Library(fileReference(helpParentDir))
+        cp.entries += new Library(fileReference(resourceDir))
+        
         HashMap<String, Boolean> addedLibPath = new HashMap<>();
         def allPaths = sourceSets.test.compileClasspath + sourceSets.main.compileClasspath
         sourceSets.main.compileClasspath.each{
@@ -241,7 +222,6 @@ eclipse {
           //no longer want to add outputDir as eclipse is using its own output dir in bin/main
           if (it.isDirectory() || ! it.exists()) {
             // don't add dirs to classpath
-            //println("Not adding directory "+it)
             return
           }
           def itPath = it.toString()
@@ -252,36 +232,69 @@ eclipse {
             //println("Not adding duplicate entry "+itPath)
           } else {
             //println("Adding entry "+itPath)
-            node.appendNode('classpathentry', [kind:"lib", path:itPath])
+            cp.entries += new Library(fileReference(itPath))
             addedLibPath.put(itPath, true)
           }
         }
+
         sourceSets.test.compileClasspath.each{
           //if ((it.isDirectory() || ! it.exists()) && ! (it.equals(sourceSets.main.java.outputDir))) {
           //no longer want to add outputDir as eclipse is using its own output dir in bin/main
           if (it.isDirectory() || ! it.exists()) {
             // don't add dirs to classpath
-            //println("Not adding directory "+it)
-            return
+            return false // groovy "break" in .each loop
           }
           def itPath = it.toString()
           if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
             itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
           }
           if (addedLibPath.get(itPath)) {
-            //println("Not adding duplicate entry "+itPath)
+            // don't duplicate
           } else {
-            //println("Adding entry "+itPath)
-            node.appendNode('classpathentry', [kind:"lib", path:itPath])
-            .appendNode('attributes')
-            .appendNode('attribute', [name:"test", value:"true"])
+            def lib = new Library(fileReference(itPath))
+            // this doesn't work... yet.  Adding test=true attribute using withXml below
+            //def attrs = new Node(null, 'attributes', ["test":"true"])
+            //lib.appendNode(attrs) //
+            cp.entries += lib
             addedLibPath.put(itPath, true)
           }
         }
-      }
+      }  
 
-    }
-  }
+      // withXml changes ignored by buildship, these add the "test=true" attribute
+      withXml {
+        def node = it.asNode()
+        
+        def srcTestAttributes
+        node.children().each{ cpe ->
+          def attributes = cpe.attributes()
+          if (attributes.get("kind") == "src" && attributes.get("path") == "test") {
+            srcTestAttributes = cpe.find { a -> a.name() == "attributes" }
+            return
+          }
+        }
+        def addTestAttribute = true
+        srcTestAttributes.each{a ->
+          if (a.name() == "attribute" && a.attributes().getAt("name") == "test") {
+            addTestAttribute = false
+          }
+        }
+        if (addTestAttribute) {
+          srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"]))
+        }
+
+        node.children().each{ cpe ->
+          def attributes = cpe.attributes()
+          if (attributes.get("kind") == "lib" && attributes.get("path").startsWith("utils/")) {
+            cpe.appendNode('attributes')
+                .appendNode('attribute', [name:"test", value:"true"])
+          }
+        }
+      } // withXML
+    } // file
+
+    containers 'org.eclipse.buildship.core.gradleclasspathcontainer'
+  } // classpath
 
   jdt {
     // for the IDE, use java 11 compatibility
@@ -292,7 +305,7 @@ eclipse {
     file {
       withProperties { props ->
         def jalview_prefs = new Properties()
-        def ins = new FileInputStream(eclipse_extra_jdt_prefs_file)
+        def ins = new FileInputStream(jalviewDirAbsolutePath+"/"+eclipse_extra_jdt_prefs_file)
         jalview_prefs.load(ins)
         ins.close()
         jalview_prefs.forEach { t, v ->
@@ -303,8 +316,10 @@ eclipse {
       }
     }
   }
-
-}
+  
+  synchronizationTasks eclipseClasspath
+  autoBuildTasks eclipseClasspath
+} 
 
 task cloverInstr() {
   // only instrument source, we build test classes as normal
@@ -323,7 +338,7 @@ task cloverInstr() {
     com.atlassian.clover.CloverInstr.mainImpl(args)
   }
 }
-
+  
 
 task cloverReport {
   group = "Verification"
@@ -402,36 +417,40 @@ def getDate(format) {
   return date.format(format)
 }
 
-def getGitHash() {
-  def stdout = new ByteArrayOutputStream()
-  exec {
-    commandLine "git", "rev-parse", "--short", "HEAD"
-    standardOutput = stdout
-    workingDir = jalviewDir
+task setGitHash(type: Exec) {
+  workingDir = jalviewDir
+  commandLine "git", "rev-parse", "--short", "HEAD"
+  standardOutput = new ByteArrayOutputStream()
+  project.ext.gitHash = {
+    return standardOutput.toString().trim()
   }
-  return stdout.toString().trim()
 }
 
-def getGitBranch() {
-  def stdout = new ByteArrayOutputStream()
-  exec {
-    commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
-    standardOutput = stdout
-    workingDir = jalviewDir
+task setGitBranch(type: Exec) {
+  workingDir = jalviewDir
+  commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
+  standardOutput = new ByteArrayOutputStream()
+  project.ext.gitBranch = {
+    return standardOutput.toString().trim()
   }
-  return stdout.toString().trim()
+}
+
+task setGitVals {
+  dependsOn setGitHash
+  dependsOn setGitBranch
 }
 
 task createBuildProperties(type: WriteProperties) {
+  dependsOn setGitVals
   inputs.dir("$jalviewDir/$sourceDir")
   inputs.dir("$jalviewDir/$resourceDir")
   outputFile "$classes/$buildPropertiesFile"
-  /* taking time/date specific comment out to allow better incremental builds */
+  // taking time specific comment out to allow better incremental builds
   //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss")
   comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
   property "BUILD_DATE", getDate("dd MMMM yyyy")
   property "VERSION", JALVIEW_VERSION
-  property "INSTALLATION", INSTALLATION+" git-commit:"+getGitHash()+" ["+getGitBranch()+"]"
+  property "INSTALLATION", INSTALLATION+" git-commit:"+project.ext.gitHash+" ["+project.ext.gitBranch+"]"
   outputs.file(outputFile)
   outputs.dir("$classes")
 }