71 + "}\n";
72 final private String java10 = java8.replace("8", "10");
73 final String readme8 = "This is the root readme file";
74 final String readme9 = "This is the version nine readme file";
75 final String readme10 = "This is the version ten readme file";
76 private Map<String,byte[]> rootClasses;
77 private Map<String,byte[]> version9Classes;
78 private Map<String,byte[]> version10Classes;
79
80 public void buildUnversionedJar() throws IOException {
81 JarBuilder jb = new JarBuilder("unversioned.jar");
82 jb.addEntry("README", readme8.getBytes());
83 jb.addEntry("version/Main.java", main.getBytes());
84 jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
85 jb.addEntry("version/Version.java", java8.getBytes());
86 jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
87 jb.build();
88 }
89
90 public void buildMultiReleaseJar() throws IOException {
91 buildCustomMultiReleaseJar("multi-release.jar", "true");
92 }
93
94 public void buildCustomMultiReleaseJar(String filename, String multiReleaseValue) throws IOException {
95 JarBuilder jb = new JarBuilder(filename);
96 jb.addAttribute("Multi-Release", multiReleaseValue);
97 jb.addEntry("README", readme8.getBytes());
98 jb.addEntry("version/Main.java", main.getBytes());
99 jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
100 jb.addEntry("version/Version.java", java8.getBytes());
101 jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
102 jb.addEntry("META-INF/versions/9/README", readme9.getBytes());
103 jb.addEntry("META-INF/versions/9/version/Version.java", java9.getBytes());
104 jb.addEntry("META-INF/versions/9/version/PackagePrivate.java", ppjava9.getBytes());
105 jb.addEntry("META-INF/versions/9/version/Version.class", version9Classes.get("version.Version"));
106 jb.addEntry("META-INF/versions/9/version/PackagePrivate.class", version9Classes.get("version.PackagePrivate"));
107 jb.addEntry("META-INF/versions/10/README", readme10.getBytes());
108 jb.addEntry("META-INF/versions/10/version/Version.java", java10.getBytes());
109 jb.addEntry("META-INF/versions/10/version/Version.class", version10Classes.get("version.Version"));
110 jb.build();
111 }
112
113 public void buildShortMultiReleaseJar() throws IOException {
114 JarBuilder jb = new JarBuilder("short-multi-release.jar");
115 jb.addAttribute("Multi-Release", "true");
116 jb.addEntry("README", readme8.getBytes());
117 jb.addEntry("version/Main.java", main.getBytes());
118 jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
119 jb.addEntry("version/Version.java", java8.getBytes());
120 jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
121 jb.addEntry("META-INF/versions/9/README", readme9.getBytes());
122 jb.addEntry("META-INF/versions/9/version/Version.java", java9.getBytes());
123 jb.addEntry("META-INF/versions/9/version/PackagePrivate.java", ppjava9.getBytes());
124 // no entry for META-INF/versions/9/version/Version.class
125 jb.addEntry("META-INF/versions/9/version/PackagePrivate.class", version9Classes.get("version.PackagePrivate"));
126 jb.addEntry("META-INF/versions/10/README", readme10.getBytes());
127 jb.addEntry("META-INF/versions/10/version/Version.java", java10.getBytes());
128 jb.addEntry("META-INF/versions/10/version/Version.class", version10Classes.get("version.Version"));
129 jb.build();
130 }
131
132 public void buildSignedMultiReleaseJar() throws Exception {
133 String testsrc = System.getProperty("test.src",".");
134 String testdir = findTestDir(testsrc);
135 String keystore = testdir + "/sun/security/tools/jarsigner/JarSigning.keystore";
136
137 // jarsigner -keystore keystore -storepass "bbbbbb"
138 // -signedJar signed-multi-release.jar multi-release.jar b
139
140 char[] password = "bbbbbb".toCharArray();
141 KeyStore ks = KeyStore.getInstance(new File(keystore), password);
142 PrivateKey pkb = (PrivateKey)ks.getKey("b", password);
143 CertPath cp = CertificateFactory.getInstance("X.509")
144 .generateCertPath(Arrays.asList(ks.getCertificateChain("b")));
145 JarSigner js = new JarSigner.Builder(pkb, cp).build();
146 try (ZipFile in = new ZipFile("multi-release.jar");
147 FileOutputStream os = new FileOutputStream("signed-multi-release.jar"))
148 {
149 js.sign(in, os);
|
71 + "}\n";
72 final private String java10 = java8.replace("8", "10");
73 final String readme8 = "This is the root readme file";
74 final String readme9 = "This is the version nine readme file";
75 final String readme10 = "This is the version ten readme file";
76 private Map<String,byte[]> rootClasses;
77 private Map<String,byte[]> version9Classes;
78 private Map<String,byte[]> version10Classes;
79
80 public void buildUnversionedJar() throws IOException {
81 JarBuilder jb = new JarBuilder("unversioned.jar");
82 jb.addEntry("README", readme8.getBytes());
83 jb.addEntry("version/Main.java", main.getBytes());
84 jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
85 jb.addEntry("version/Version.java", java8.getBytes());
86 jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
87 jb.build();
88 }
89
90 public void buildMultiReleaseJar() throws IOException {
91 JarBuilder jb = customMultiReleaseJar("multi-release.jar", "true");
92 addEntries(jb);
93 jb.build();
94 }
95
96 private JarBuilder customMultiReleaseJar(String filename, String multiReleaseValue)
97 throws IOException {
98 JarBuilder jb = new JarBuilder(filename);
99 jb.addAttribute("Multi-Release", multiReleaseValue);
100 return jb;
101 }
102
103 public void buildCustomMultiReleaseJar(String filename, String multiReleaseValue,
104 Map<String, String> extraAttributes) throws IOException {
105 JarBuilder jb = new JarBuilder(filename);
106 extraAttributes.entrySet()
107 .forEach(entry -> jb.addAttribute(entry.getKey(), entry.getValue()));
108 jb.addAttribute("Multi-Release", multiReleaseValue);
109 jb.build();
110 }
111
112 private void addEntries(JarBuilder jb) {
113 jb.addEntry("README", readme8.getBytes());
114 jb.addEntry("version/Main.java", main.getBytes());
115 jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
116 jb.addEntry("version/Version.java", java8.getBytes());
117 jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
118 jb.addEntry("META-INF/versions/9/README", readme9.getBytes());
119 jb.addEntry("META-INF/versions/9/version/Version.java", java9.getBytes());
120 jb.addEntry("META-INF/versions/9/version/PackagePrivate.java", ppjava9.getBytes());
121 jb.addEntry("META-INF/versions/9/version/Version.class", version9Classes.get("version.Version"));
122 jb.addEntry("META-INF/versions/9/version/PackagePrivate.class", version9Classes.get("version.PackagePrivate"));
123 jb.addEntry("META-INF/versions/10/README", readme10.getBytes());
124 jb.addEntry("META-INF/versions/10/version/Version.java", java10.getBytes());
125 jb.addEntry("META-INF/versions/10/version/Version.class", version10Classes.get("version.Version"));
126 }
127
128 public void buildSignedMultiReleaseJar() throws Exception {
129 String testsrc = System.getProperty("test.src",".");
130 String testdir = findTestDir(testsrc);
131 String keystore = testdir + "/sun/security/tools/jarsigner/JarSigning.keystore";
132
133 // jarsigner -keystore keystore -storepass "bbbbbb"
134 // -signedJar signed-multi-release.jar multi-release.jar b
135
136 char[] password = "bbbbbb".toCharArray();
137 KeyStore ks = KeyStore.getInstance(new File(keystore), password);
138 PrivateKey pkb = (PrivateKey)ks.getKey("b", password);
139 CertPath cp = CertificateFactory.getInstance("X.509")
140 .generateCertPath(Arrays.asList(ks.getCertificateChain("b")));
141 JarSigner js = new JarSigner.Builder(pkb, cp).build();
142 try (ZipFile in = new ZipFile("multi-release.jar");
143 FileOutputStream os = new FileOutputStream("signed-multi-release.jar"))
144 {
145 js.sign(in, os);
|