--- old/src/share/classes/sun/tools/jar/Main.java 2012-12-23 06:00:55.057411292 -0500 +++ new/src/share/classes/sun/tools/jar/Main.java 2012-12-23 06:00:54.177361762 -0500 @@ -47,7 +47,7 @@ class Main { String program; PrintStream out, err; - String fname, mname, ename; + String fname, mname, ename, pname; String zname = ""; String[] files; String rootjar = null; @@ -184,6 +184,9 @@ if (ename != null) { addMainClass(manifest, ename); } + if (pname != null) { + addProfileName(manifest, pname); + } } OutputStream out; if (fname != null) { @@ -361,6 +364,9 @@ case 'e': ename = args[count++]; break; + case 'p': + pname = args[count++]; + break; default: error(formatMsg("error.illegal.option", String.valueOf(flags.charAt(i)))); @@ -410,7 +416,7 @@ usageError(); return false; } else if (uflag) { - if ((mname != null) || (ename != null)) { + if ((mname != null) || (ename != null) || (pname != null)) { /* just want to update the manifest */ return true; } else { @@ -544,7 +550,7 @@ || (Mflag && isManifestEntry)) { continue; } else if (isManifestEntry && ((newManifest != null) || - (ename != null))) { + (ename != null) || (pname != null))) { foundManifest = true; if (newManifest != null) { // Don't read from the newManifest InputStream, as we @@ -598,7 +604,7 @@ if (updateOk) { updateManifest(m, zos); } - } else if (ename != null) { + } else if (ename != null || pname != null) { updateManifest(new Manifest(), zos); } } @@ -631,6 +637,9 @@ if (ename != null) { addMainClass(m, ename); } + if (pname != null) { + addProfileName(m, pname); + } ZipEntry e = new ZipEntry(MANIFEST_NAME); e.setTime(System.currentTimeMillis()); if (flag0) { @@ -687,6 +696,13 @@ global.put(Attributes.Name.MAIN_CLASS, mainApp); } + private void addProfileName(Manifest m, String profile) { + Attributes global = m.getMainAttributes(); + + // overrides any existing Profile attribute + global.put(Attributes.Name.PROFILE, profile); + } + private boolean isAmbiguousMainClass(Manifest m) { if (ename != null) { Attributes global = m.getMainAttributes();