< prev index next >

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

Print this page




  39 import java.io.OutputStreamWriter;
  40 import java.io.UncheckedIOException;
  41 import java.io.Writer;
  42 import java.lang.module.ModuleDescriptor;
  43 import java.nio.charset.StandardCharsets;
  44 import java.nio.file.Files;
  45 import java.nio.file.Path;
  46 import java.nio.file.StandardOpenOption;
  47 import java.nio.file.attribute.PosixFileAttributeView;
  48 import java.nio.file.attribute.PosixFilePermission;
  49 import java.util.ArrayList;
  50 import java.util.Collections;
  51 import java.util.HashSet;
  52 import java.util.List;
  53 import java.util.Map;
  54 import java.util.Objects;
  55 import java.util.Optional;
  56 import java.util.Properties;
  57 import java.util.Set;
  58 import jdk.tools.jlink.internal.BasicImageWriter;
  59 import jdk.tools.jlink.internal.plugins.FileCopierPlugin;
  60 import jdk.tools.jlink.internal.plugins.FileCopierPlugin.SymImageFile;
  61 import jdk.tools.jlink.internal.ExecutableImage;
  62 import jdk.tools.jlink.plugin.ResourcePool;
  63 import jdk.tools.jlink.plugin.ResourcePoolEntry;
  64 import jdk.tools.jlink.plugin.ResourcePoolModule;
  65 import jdk.tools.jlink.plugin.PluginException;
  66 
  67 /**
  68  *
  69  * Default Image Builder. This builder creates the default runtime image layout.
  70  */
  71 public final class DefaultImageBuilder implements ImageBuilder {
  72 
  73     /**
  74      * The default java executable Image.
  75      */
  76     static final class DefaultExecutableImage implements ExecutableImage {
  77 
  78         private final Path home;
  79         private final List<String> args;


 167             i++;
 168         }
 169         props.setProperty("MODULES", builder.toString());
 170     }
 171 
 172     @Override
 173     public void storeFiles(ResourcePool files) {
 174         try {
 175             files.entries().forEach(f -> {
 176                 if (!f.type().equals(ResourcePoolEntry.Type.CLASS_OR_RESOURCE)) {
 177                     try {
 178                         accept(f);
 179                     } catch (IOException ioExp) {
 180                         throw new UncheckedIOException(ioExp);
 181                     }
 182                 }
 183             });
 184             files.moduleView().modules().forEach(m -> {
 185                 // Only add modules that contain packages
 186                 if (!m.packages().isEmpty()) {
 187                     // Skip the fake module used by FileCopierPlugin when copying files.
 188                     if (m.name().equals(FileCopierPlugin.FAKE_MODULE)) {
 189                         return;
 190                     }
 191                     modules.add(m.name());
 192                 }
 193             });
 194             storeFiles(modules, releaseProperties(files));
 195 
 196             if (Files.getFileStore(root).supportsFileAttributeView(PosixFileAttributeView.class)) {
 197                 // launchers in the bin directory need execute permission
 198                 Path bin = root.resolve("bin");
 199                 if (Files.isDirectory(bin)) {
 200                     Files.list(bin)
 201                             .filter(f -> !f.toString().endsWith(".diz"))
 202                             .filter(f -> Files.isRegularFile(f))
 203                             .forEach(this::setExecutable);
 204                 }
 205 
 206                 // jspawnhelper is in lib or lib/<arch>
 207                 Path lib = root.resolve("lib");
 208                 if (Files.isDirectory(lib)) {
 209                     Files.find(lib, 2, (path, attrs) -> {
 210                         return path.getFileName().toString().equals("jspawnhelper")




  39 import java.io.OutputStreamWriter;
  40 import java.io.UncheckedIOException;
  41 import java.io.Writer;
  42 import java.lang.module.ModuleDescriptor;
  43 import java.nio.charset.StandardCharsets;
  44 import java.nio.file.Files;
  45 import java.nio.file.Path;
  46 import java.nio.file.StandardOpenOption;
  47 import java.nio.file.attribute.PosixFileAttributeView;
  48 import java.nio.file.attribute.PosixFilePermission;
  49 import java.util.ArrayList;
  50 import java.util.Collections;
  51 import java.util.HashSet;
  52 import java.util.List;
  53 import java.util.Map;
  54 import java.util.Objects;
  55 import java.util.Optional;
  56 import java.util.Properties;
  57 import java.util.Set;
  58 import jdk.tools.jlink.internal.BasicImageWriter;

  59 import jdk.tools.jlink.internal.plugins.FileCopierPlugin.SymImageFile;
  60 import jdk.tools.jlink.internal.ExecutableImage;
  61 import jdk.tools.jlink.plugin.ResourcePool;
  62 import jdk.tools.jlink.plugin.ResourcePoolEntry;
  63 import jdk.tools.jlink.plugin.ResourcePoolModule;
  64 import jdk.tools.jlink.plugin.PluginException;
  65 
  66 /**
  67  *
  68  * Default Image Builder. This builder creates the default runtime image layout.
  69  */
  70 public final class DefaultImageBuilder implements ImageBuilder {
  71 
  72     /**
  73      * The default java executable Image.
  74      */
  75     static final class DefaultExecutableImage implements ExecutableImage {
  76 
  77         private final Path home;
  78         private final List<String> args;


 166             i++;
 167         }
 168         props.setProperty("MODULES", builder.toString());
 169     }
 170 
 171     @Override
 172     public void storeFiles(ResourcePool files) {
 173         try {
 174             files.entries().forEach(f -> {
 175                 if (!f.type().equals(ResourcePoolEntry.Type.CLASS_OR_RESOURCE)) {
 176                     try {
 177                         accept(f);
 178                     } catch (IOException ioExp) {
 179                         throw new UncheckedIOException(ioExp);
 180                     }
 181                 }
 182             });
 183             files.moduleView().modules().forEach(m -> {
 184                 // Only add modules that contain packages
 185                 if (!m.packages().isEmpty()) {




 186                     modules.add(m.name());
 187                 }
 188             });
 189             storeFiles(modules, releaseProperties(files));
 190 
 191             if (Files.getFileStore(root).supportsFileAttributeView(PosixFileAttributeView.class)) {
 192                 // launchers in the bin directory need execute permission
 193                 Path bin = root.resolve("bin");
 194                 if (Files.isDirectory(bin)) {
 195                     Files.list(bin)
 196                             .filter(f -> !f.toString().endsWith(".diz"))
 197                             .filter(f -> Files.isRegularFile(f))
 198                             .forEach(this::setExecutable);
 199                 }
 200 
 201                 // jspawnhelper is in lib or lib/<arch>
 202                 Path lib = root.resolve("lib");
 203                 if (Files.isDirectory(lib)) {
 204                     Files.find(lib, 2, (path, attrs) -> {
 205                         return path.getFileName().toString().equals("jspawnhelper")


< prev index next >