--- old/modules/jdk.packager/src/main/java/jdk/packager/builders/mac/MacAppImageBuilder.java 2017-01-23 15:43:11.000000000 -0800 +++ new/modules/jdk.packager/src/main/java/jdk/packager/builders/mac/MacAppImageBuilder.java 2017-01-23 15:43:11.000000000 -0800 @@ -741,7 +741,7 @@ // sign all dylibs and jars Files.walk(appLocation) - // while we are searching let's fix permissions + // fix permissions .peek(path -> { try { Set pfp = Files.getPosixFilePermissions(path); @@ -762,37 +762,40 @@ //noinspection ThrowableResultOfMethodCallIgnored if (toThrow.get() != null) return; - List args = new ArrayList<>(); - args.addAll(Arrays.asList("codesign", - "-s", signingIdentity, // sign with this key - "--prefix", identifierPrefix, // use the identifier as a prefix - "-vvvv")); - if (entitlementsFile != null && - (p.toString().endsWith(".jar") - || p.toString().endsWith(".dylib"))) { - args.add("--entitlements"); - args.add(entitlementsFile); // entitlements - } else if (inheritedEntitlements != null && Files.isExecutable(p)) { - args.add("--entitlements"); - args.add(inheritedEntitlements); // inherited entitlements for executable processes - } - if (keyChain != null && !keyChain.isEmpty()) { - args.add("--keychain"); - args.add(keyChain); - } - args.add(p.toString()); - - try { - Set oldPermissions = Files.getPosixFilePermissions(p); - File f = p.toFile(); - f.setWritable(true, true); - - ProcessBuilder pb = new ProcessBuilder(args); - IOUtils.exec(pb, VERBOSE.fetchFrom(params)); + // If p is a symlink then skip the signing process. + if (!Files.isSymbolicLink(p)) { + List args = new ArrayList<>(); + args.addAll(Arrays.asList("codesign", + "-s", signingIdentity, // sign with this key + "--prefix", identifierPrefix, // use the identifier as a prefix + "-vvvv")); + if (entitlementsFile != null && + (p.toString().endsWith(".jar") + || p.toString().endsWith(".dylib"))) { + args.add("--entitlements"); + args.add(entitlementsFile); // entitlements + } else if (inheritedEntitlements != null && Files.isExecutable(p)) { + args.add("--entitlements"); + args.add(inheritedEntitlements); // inherited entitlements for executable processes + } + if (keyChain != null && !keyChain.isEmpty()) { + args.add("--keychain"); + args.add(keyChain); + } + args.add(p.toString()); - Files.setPosixFilePermissions(p, oldPermissions); - } catch (IOException ioe) { - toThrow.set(ioe); + try { + Set oldPermissions = Files.getPosixFilePermissions(p); + File f = p.toFile(); + f.setWritable(true, true); + + ProcessBuilder pb = new ProcessBuilder(args); + IOUtils.exec(pb, VERBOSE.fetchFrom(params)); + + Files.setPosixFilePermissions(p, oldPermissions); + } catch (IOException ioe) { + toThrow.set(ioe); + } } });