< 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 >