src/jdk.jpackage/share/classes/jdk/jpackage/internal/StandardBundlerParam.java
branchJDK-8200758-branch
changeset 58305 d42b1f6960aa
parent 58302 718bd56695b3
child 58360 fd45b7e2c027
--- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/StandardBundlerParam.java	Tue Sep 24 13:57:28 2019 -0400
+++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/StandardBundlerParam.java	Tue Sep 24 14:05:49 2019 -0400
@@ -27,7 +27,10 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.io.StringReader;
+import java.lang.module.ModuleDescriptor;
+import java.lang.module.ModuleDescriptor.Version;
+import java.lang.module.ModuleFinder;
+import java.lang.module.ModuleReference;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -36,13 +39,10 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Properties;
 import java.util.ResourceBundle;
 import java.util.Set;
 import java.util.HashSet;
@@ -51,7 +51,6 @@
 import java.util.jar.Attributes;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -258,7 +257,7 @@
             new StandardBundlerParam<>(
                     Arguments.CLIOptions.VERSION.getId(),
                     String.class,
-                    params -> DEFAULT_VERSION,
+                    params -> getDefaultAppVersion(params),
                     (s, p) -> s
             );
 
@@ -756,4 +755,30 @@
 
         return result;
     }
+
+    static String getDefaultAppVersion(Map<String, ? super Object> params) {
+        String appVersion = DEFAULT_VERSION;
+        boolean hasModule = params.containsKey(MODULE.getID());
+        if (hasModule) {
+            List<Path> modulePath = MODULE_PATH.fetchFrom(params);
+            if (!modulePath.isEmpty()) {
+                ModuleFinder finder = ModuleFinder.of(modulePath.toArray(new Path[0]));
+                String mainModule = JLinkBundlerHelper.getMainModule(params);
+                Optional<ModuleReference> omref = finder.find(mainModule);
+                if (omref.isPresent()) {
+                    ModuleDescriptor descriptor = omref.get().descriptor();
+                    Optional<Version> oversion = descriptor.version();
+                    if (oversion.isPresent()) {
+                        Log.verbose(MessageFormat.format(I18N.getString(
+                                "message.module-version"),
+                                oversion.get().toString(),
+                                mainModule));
+                        appVersion = oversion.get().toString();
+                    }
+                }
+            }
+        }
+
+        return appVersion;
+    }
 }