Skip to content
This repository was archived by the owner on Aug 27, 2022. It is now read-only.
/ lanai Public archive

Commit 5e83cb6

Browse files
author
Jim Laskey
committedMay 6, 2020
8241602: jlink does not produce reproducible jimage files
Reviewed-by: alanb, ihse
1 parent 72704aa commit 5e83cb6

File tree

4 files changed

+103
-0
lines changed

4 files changed

+103
-0
lines changed
 

‎src/jdk.jlink/share/classes/jdk/tools/jlink/internal/DirArchive.java

+16
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,20 @@ public void open() throws IOException {
153153
private static String getPathName(Path path) {
154154
return path.toString().replace(File.separatorChar, '/');
155155
}
156+
157+
@Override
158+
public int hashCode() {
159+
return Objects.hash(dirPath, moduleName);
160+
}
161+
162+
@Override
163+
public boolean equals(Object obj) {
164+
if (obj instanceof DirArchive) {
165+
DirArchive other = (DirArchive)obj;
166+
return Objects.equals(dirPath, other.dirPath) &&
167+
Objects.equals(moduleName, other.moduleName);
168+
}
169+
170+
return false;
171+
}
156172
}

‎src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JarArchive.java

+17
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,21 @@ public void open() throws IOException {
133133
protected JarFile getJarFile() {
134134
return jarFile;
135135
}
136+
137+
@Override
138+
public int hashCode() {
139+
return Objects.hash(file, moduleName, version);
140+
}
141+
142+
@Override
143+
public boolean equals(Object obj) {
144+
if (obj instanceof JarArchive) {
145+
JarArchive other = (JarArchive)obj;
146+
return Objects.equals(file, other.file) &&
147+
Objects.equals(moduleName, other.moduleName) &&
148+
Objects.equals(version, other.version);
149+
}
150+
151+
return false;
152+
}
136153
}

‎src/jdk.jlink/share/classes/jdk/tools/jlink/internal/JmodArchive.java

+16
Original file line numberDiff line numberDiff line change
@@ -174,4 +174,20 @@ private Entry toEntry(JmodFile.Entry entry) {
174174

175175
return new JmodEntry(path, resourceName, type, entry);
176176
}
177+
178+
@Override
179+
public int hashCode() {
180+
return Objects.hash(file, moduleName);
181+
}
182+
183+
@Override
184+
public boolean equals(Object obj) {
185+
if (obj instanceof JmodArchive) {
186+
JmodArchive other = (JmodArchive)obj;
187+
return Objects.equals(file, other.file) &&
188+
Objects.equals(moduleName, other.moduleName);
189+
}
190+
191+
return false;
192+
}
177193
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
import java.nio.file.Files;
25+
import java.nio.file.Path;
26+
import java.nio.file.Paths;
27+
import java.util.spi.ToolProvider;
28+
29+
/*
30+
* @test
31+
* @summary Make sure that jimages are consistent when created by jlink.
32+
* @bug 8241602
33+
* @modules jdk.jlink
34+
* java.se
35+
* @run main JLinkReproducible2Test
36+
*/
37+
public class JLinkReproducible2Test {
38+
static final ToolProvider JLINK_TOOL = ToolProvider.findFirst("jlink")
39+
.orElseThrow(() ->
40+
new RuntimeException("jlink tool not found")
41+
);
42+
43+
public static void main(String[] args) throws Exception {
44+
Path image1 = Paths.get("./image1");
45+
Path image2 = Paths.get("./image2");
46+
47+
JLINK_TOOL.run(System.out, System.err, "--add-modules", "java.se", "--output", image1.toString());
48+
JLINK_TOOL.run(System.out, System.err, "--add-modules", "java.se", "--output", image2.toString());
49+
50+
if (Files.mismatch(image1.resolve("lib").resolve("modules"), image2.resolve("lib").resolve("modules")) != -1L) {
51+
new RuntimeException("jlink producing inconsistent result");
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)
This repository has been archived.