< prev index next >

src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java

Print this page

        

@@ -88,15 +88,13 @@
             this.args = createArgs(home);
         }
 
         private static List<String> createArgs(Path home) {
             Objects.requireNonNull(home);
-            List<String> javaArgs = new ArrayList<>();
             Path binDir = home.resolve("bin");
             String java = Files.exists(binDir.resolve("java"))? "java" : "java.exe";
-            javaArgs.add(binDir.resolve(java).toString());
-            return Collections.unmodifiableList(javaArgs);
+            return List.of(binDir.resolve(java).toString());
         }
 
         @Override
         public Path getHome() {
             return home;

@@ -168,10 +166,11 @@
     public void storeFiles(ResourcePool files) {
         try {
             // populate release properties up-front. targetOsName
             // field is assigned from there and used elsewhere.
             Properties release = releaseProperties(files);
+            Path bin = root.resolve("bin");
 
             files.entries().forEach(f -> {
                 if (!f.type().equals(ResourcePoolEntry.Type.CLASS_OR_RESOURCE)) {
                     try {
                         accept(f);

@@ -189,11 +188,10 @@
 
             storeFiles(modules, release);
 
             if (Files.getFileStore(root).supportsFileAttributeView(PosixFileAttributeView.class)) {
                 // launchers in the bin directory need execute permission
-                Path bin = root.resolve("bin");
                 if (Files.isDirectory(bin)) {
                     Files.list(bin)
                             .filter(f -> !f.toString().endsWith(".diz"))
                             .filter(f -> Files.isRegularFile(f))
                             .forEach(this::setExecutable);

@@ -207,11 +205,15 @@
                                 || path.getFileName().toString().equals("jexec");
                     }).forEach(this::setExecutable);
                 }
             }
 
+            // If native files are stripped completely, <root>/bin dir won't exist!
+            // So, don't bother generating launcher scripts.
+            if (Files.isDirectory(bin)) {
             prepareApplicationFiles(files, modules);
+            }
         } catch (IOException ex) {
             throw new PluginException(ex);
         }
     }
 

@@ -227,11 +229,11 @@
             props.setProperty("JAVA_VERSION", System.getProperty("java.version"));
         });
 
         this.targetOsName = props.getProperty("OS_NAME");
         if (this.targetOsName == null) {
-            throw new RuntimeException("can't determine target OS from java.base descriptor");
+            throw new PluginException("TargetPlatform attribute is missing for java.base module");
         }
 
         Optional<ResourcePoolEntry> release = pool.findEntry("/java.base/release");
         if (release.isPresent()) {
             try (InputStream is = release.get().content()) {
< prev index next >