JAL-4373 Fix Main-Class and other attribute settings in the shadowJar manifest. It...
authorBen Soares <b.soares@dundee.ac.uk>
Fri, 19 Jan 2024 16:11:14 +0000 (16:11 +0000)
committerBen Soares <b.soares@dundee.ac.uk>
Fri, 19 Jan 2024 16:11:14 +0000 (16:11 +0000)
build.gradle

index 3b81404..3ed6c56 100644 (file)
@@ -2150,6 +2150,16 @@ 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"
@@ -2163,6 +2173,10 @@ shadowJar {
   from groovyJars
   from otherJars
 
+  manifest {
+    // 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 = []
@@ -2172,9 +2186,7 @@ shadowJar {
         jarFileManifests += mf
       }
     }
-
     manifest {
-      attributes "Implementation-Version": JALVIEW_VERSION, "Application-Name": applicationName
       from (jarFileManifests) {
         eachEntry { details ->
           if (!details.key.equals("Import-Package")) {
@@ -2187,6 +2199,7 @@ shadowJar {
 
   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()
   classifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION