Merge branch 'bug/JAL-4373_jvmmemmax_and_jvmmempc_ignored_on_command_line_for_executa...
authorJames Procter <j.procter@dundee.ac.uk>
Tue, 23 Jan 2024 13:39:04 +0000 (13:39 +0000)
committerJames Procter <j.procter@dundee.ac.uk>
Tue, 23 Jan 2024 13:39:04 +0000 (13:39 +0000)
build.gradle
src/jalview/bin/Launcher.java
src/jalview/bin/MemorySetting.java
src/jalview/bin/argparser/Arg.java

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
index 507f501..2a78d8e 100644 (file)
@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.TimeUnit;
 
+import jalview.bin.argparser.Arg;
 import jalview.util.ChannelProperties;
 import jalview.util.LaunchUtils;
 
@@ -35,12 +36,12 @@ import jalview.util.LaunchUtils;
  * A Launcher class for Jalview. This class is used to launch Jalview from the
  * shadowJar when Getdown is not used or available. It attempts to take all the
  * command line arguments to pass on to the jalview.bin.Jalview class, but to
- * insert a -Xmx memory setting to a sensible default, using the -jvmmempc and
+ * insert a -Xmx memory setting to a sensible default, using the --jvmmempc and
  * -jvmmemmax application arguments if specified. If not specified then system
  * properties will be looked for by jalview.bin.MemorySetting. If the user has
- * provided the JVM with a -Xmx setting directly and not set -jvmmempc or
- * -jvmmemmax then this setting will be used and system properties ignored. If
- * -Xmx is set as well as -jvmmempc or -jvmmemmax as argument(s) then the -Xmx
+ * provided the JVM with a -Xmx setting directly and not set --jvmmempc or
+ * --jvmmemmax then this setting will be used and system properties ignored. If
+ * -Xmx is set as well as --jvmmempc or --jvmmemmax as argument(s) then the -Xmx
  * argument will NOT be passed on to the main application launch.
  * 
  * @author bsoares
@@ -62,8 +63,8 @@ public class Launcher
 
   /**
    * main method for jalview.bin.Launcher. This restarts the same JRE's JVM with
-   * the same arguments but with memory adjusted based on extracted -jvmmempc
-   * and -jvmmemmax application arguments. If on a Mac then extra dock:icon and
+   * the same arguments but with memory adjusted based on extracted --jvmmempc
+   * and --jvmmemmax application arguments. If on a Mac then extra dock:icon and
    * dock:name arguments are also set.
    * 
    * @param args
@@ -168,32 +169,24 @@ public class Launcher
       }
       // jvmmempc and jvmmemmax args used to set memory and are not passed on to
       // startClass
-      if (arg.startsWith(
-              "-" + MemorySetting.MAX_HEAPSIZE_PERCENT_PROPERTY_NAME + "="))
+      final String jvmmempcArg = Arg.JVMMEMPC.getName();
+      final String jvmmemmaxArg = Arg.JVMMEMMAX.getName();
+      if (arg.startsWith("-" + jvmmempcArg + "="))
       {
-        jvmmempc = arg.substring(
-                MemorySetting.MAX_HEAPSIZE_PERCENT_PROPERTY_NAME.length()
-                        + 2);
+        jvmmempc = arg.substring(jvmmempcArg.length() + 2);
       }
-      else if (arg.startsWith(
-              "-" + MemorySetting.MAX_HEAPSIZE_PROPERTY_NAME + "="))
+      else if (arg.startsWith("-" + jvmmemmaxArg + "="))
       {
-        jvmmemmax = arg.substring(
-                MemorySetting.MAX_HEAPSIZE_PROPERTY_NAME.length() + 2);
+        jvmmemmax = arg.substring(jvmmemmaxArg.length() + 2);
       }
       // --doubledash versions
-      else if (arg.startsWith("--"
-              + MemorySetting.MAX_HEAPSIZE_PERCENT_PROPERTY_NAME + "="))
+      else if (arg.startsWith("--" + jvmmempcArg + "="))
       {
-        jvmmempc = arg.substring(
-                MemorySetting.MAX_HEAPSIZE_PERCENT_PROPERTY_NAME.length()
-                        + 3);
+        jvmmempc = arg.substring(jvmmempcArg.length() + 3);
       }
-      else if (arg.startsWith(
-              "--" + MemorySetting.MAX_HEAPSIZE_PROPERTY_NAME + "="))
+      else if (arg.startsWith("--" + jvmmemmaxArg + "="))
       {
-        jvmmemmax = arg.substring(
-                MemorySetting.MAX_HEAPSIZE_PROPERTY_NAME.length() + 3);
+        jvmmemmax = arg.substring(jvmmemmaxArg.length() + 3);
       }
       // retain arg
       else
index 7458d55..738d1e7 100644 (file)
@@ -24,6 +24,8 @@ package jalview.bin;
 
 import java.util.Locale;
 
+import jalview.bin.argparser.Arg;
+
 /**
  * Methods to decide on appropriate memory setting for Jalview based on two
  * optionally provided values: jvmmempc - the maximum percentage of total
@@ -37,9 +39,11 @@ import java.util.Locale;
  */
 public class MemorySetting
 {
-  public static final String MAX_HEAPSIZE_PERCENT_PROPERTY_NAME = "jvmmempc";
+  public static final String MAX_HEAPSIZE_PERCENT_PROPERTY_NAME = Arg.JVMMEMPC
+          .getName();
 
-  public static final String MAX_HEAPSIZE_PROPERTY_NAME = "jvmmemmax";
+  public static final String MAX_HEAPSIZE_PROPERTY_NAME = Arg.JVMMEMMAX
+          .getName();
 
   private static final int MAX_HEAPSIZE_PERCENT_DEFAULT = 90; // 90%
 
index 9a05c9f..36f7794 100644 (file)
@@ -311,7 +311,7 @@ public enum Arg
 
   // these last two have no purpose in the normal Jalview application but are
   // used by jalview.bin.Launcher to set memory settings. They are not used by
-  // argparser but are here for Usage statement reasons.
+  // argparser but are here for Usage statement and parsing reasons.
   JVMMEMPC(Type.CONFIG,
           "Limit maximum heap size (memory) to PERCENT% of total physical memory detected. This defaults to 90 if total physical memory can be detected.\n"
                   + "The equals sign (\"=\") separator must be used with no spaces.",