8159004: jlink attempts to create launcher scripts when root/bin dir does not exist

Reviewed-by: jlaskey, alanb
This commit is contained in:
Athijegannathan Sundararajan 2016-08-29 21:09:36 +05:30
parent 1bc574a534
commit 10cbe0678a

@ -90,11 +90,9 @@ public final class DefaultImageBuilder implements ImageBuilder {
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
@ -170,6 +168,7 @@ public final class DefaultImageBuilder implements ImageBuilder {
// 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)) {
@ -191,7 +190,6 @@ public final class DefaultImageBuilder implements ImageBuilder {
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"))
@ -209,7 +207,11 @@ public final class DefaultImageBuilder implements ImageBuilder {
}
}
prepareApplicationFiles(files, modules);
// 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);
}
@ -229,7 +231,7 @@ public final class DefaultImageBuilder implements ImageBuilder {
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");