This is an automated email from the ASF dual-hosted git repository. michaelo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-shared-jar.git
The following commit(s) were added to refs/heads/master by this push: new 6d4cb41 [MSHARED-1411] Allow access the root entries if it is a multi-release JAR file 6d4cb41 is described below commit 6d4cb413fdd52850520a163b5d2f1f06100c53c9 Author: Gabriel Belingueres <belingue...@gmail.com> AuthorDate: Fri Jun 14 05:33:36 2024 +0200 [MSHARED-1411] Allow access the root entries if it is a multi-release JAR file This closes #40 --- src/main/java/org/apache/maven/shared/jar/JarData.java | 17 +++++++++++++++++ .../maven/shared/jar/classes/JarClassesAnalysis.java | 16 +++++++++------- .../maven/shared/jar/classes/JarVersionedRuntime.java | 4 ++++ .../shared/jar/classes/JarClassesAnalyzerTest.java | 12 +++++++++--- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/apache/maven/shared/jar/JarData.java b/src/main/java/org/apache/maven/shared/jar/JarData.java index de2781f..d6f6b1c 100644 --- a/src/main/java/org/apache/maven/shared/jar/JarData.java +++ b/src/main/java/org/apache/maven/shared/jar/JarData.java @@ -77,6 +77,11 @@ public final class JarData { */ private final List<JarEntry> entries; + /** + * The JAR entries of the root content, when it is a multi-release JAR + */ + private List<JarEntry> rootEntries; + /** * Information about the JAR's identifying features. */ @@ -109,6 +114,14 @@ public final class JarData { return entries; } + public List<JarEntry> getRootEntries() { + return rootEntries; + } + + public void setRootEntries(List<JarEntry> rootEntries) { + this.rootEntries = rootEntries; + } + public Manifest getManifest() { return manifest; } @@ -153,6 +166,10 @@ public final class JarData { return entries.size(); } + public int getNumRootEntries() { + return rootEntries.size(); + } + public int getNumClasses() { return jarClasses.getClassNames().size(); } diff --git a/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java b/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java index bd9cb22..1c6663f 100644 --- a/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java +++ b/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java @@ -61,8 +61,8 @@ public class JarClassesAnalysis { private final Logger logger = LoggerFactory.getLogger(getClass()); /** - * Constant representing the classes in the root of a Multi-Release JAR file. - * Meaning outside of any given META-INF/versions/NN/... entry. + * Constant representing the root content of a Multi-Release JAR file, thus outside of + * any given META-INF/versions/NN/... entry. */ private static final Integer ROOT = 0; @@ -145,10 +145,12 @@ public class JarClassesAnalysis { runtimeVersionsMap.put(runtimeVersion, new JarVersionedRuntime(runtimeVersionEntryList, classes)); } - JarVersionedRuntime baseJarRelease = runtimeVersionsMap.remove(ROOT); - JarClasses baseJarClasses = baseJarRelease.getJarClasses(); + JarData jarData = jarAnalyzer.getJarData(); - jarAnalyzer.getJarData().setJarClasses(baseJarClasses); + JarVersionedRuntime rootContentVersionedRuntime = runtimeVersionsMap.remove(ROOT); + jarData.setRootEntries(rootContentVersionedRuntime.getEntries()); + JarClasses rootJarClasses = rootContentVersionedRuntime.getJarClasses(); + jarData.setJarClasses(rootJarClasses); // Paranoid? for (Map.Entry<Integer, JarVersionedRuntime> runtimeVersionEntry : runtimeVersionsMap.entrySet()) { @@ -163,9 +165,9 @@ public class JarClassesAnalysis { } } - jarAnalyzer.getJarData().setVersionedRuntimes(new JarVersionedRuntimes(runtimeVersionsMap)); + jarData.setVersionedRuntimes(new JarVersionedRuntimes(runtimeVersionsMap)); - return baseJarClasses; + return rootJarClasses; } private JarClasses analyzeRoot(JarAnalyzer jarAnalyzer) { diff --git a/src/main/java/org/apache/maven/shared/jar/classes/JarVersionedRuntime.java b/src/main/java/org/apache/maven/shared/jar/classes/JarVersionedRuntime.java index f76cd30..6a4b90b 100644 --- a/src/main/java/org/apache/maven/shared/jar/classes/JarVersionedRuntime.java +++ b/src/main/java/org/apache/maven/shared/jar/classes/JarVersionedRuntime.java @@ -48,4 +48,8 @@ public class JarVersionedRuntime { public JarClasses getJarClasses() { return jarClasses; } + + public int getNumEntries() { + return entries.size(); + } } diff --git a/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java b/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java index dc7c1db..3862712 100644 --- a/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java +++ b/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java @@ -152,7 +152,9 @@ class JarClassesAnalyzerTest extends AbstractJarAnalyzerTestCase { @Test void testAnalyzeJarWithOnlyModuleInfoClass() throws Exception { JarData jarData = getJarData("module-info-only-test-0.0.1.jar"); - // root level classes + assertEquals(10, jarData.getNumEntries()); + // root level information + assertEquals(9, jarData.getNumRootEntries()); JarClasses jclass = jarData.getJarClasses(); assertTrue(jclass.getImports().isEmpty()); assertTrue(jclass.getPackages().isEmpty()); @@ -174,15 +176,17 @@ class JarClassesAnalyzerTest extends AbstractJarAnalyzerTestCase { assertEquals("", jarClasses11.getPackages().get(0)); assertEquals(1, jarClasses11.getClassNames().size()); assertTrue(jarClasses11.getMethods().isEmpty()); - assertEquals(1, jarVersionedRuntime11.getEntries().size()); + assertEquals(1, jarVersionedRuntime11.getNumEntries()); assertEntriesContains(jarVersionedRuntime11.getEntries(), "META-INF/versions/11/module-info.class"); } @Test void testAnalyzeMultiReleaseJarVersion() throws Exception { JarData jarData = getJarData("multi-release-test-0.0.1.jar"); + assertEquals(37, jarData.getNumEntries()); + // root level information + assertEquals(19, jarData.getNumRootEntries()); JarClasses jclass = jarData.getJarClasses(); - assertEquals("1.8", jclass.getJdkRevision()); assertFalse(jclass.getImports().isEmpty()); assertEquals(1, jclass.getPackages().size()); @@ -203,6 +207,7 @@ class JarClassesAnalyzerTest extends AbstractJarAnalyzerTestCase { assertEquals(1, jarClasses9.getPackages().size()); assertEquals(1, jarClasses9.getClassNames().size()); assertFalse(jarClasses9.getMethods().isEmpty()); + assertEquals(9, jarVersionedRuntime9.getNumEntries()); assertEntriesContains(jarVersionedRuntime9.getEntries(), "META-INF/versions/9/resource.txt"); JarVersionedRuntime jarVersionedRuntime11 = jarVersionedRuntimes.getJarVersionedRuntime(11); @@ -212,6 +217,7 @@ class JarClassesAnalyzerTest extends AbstractJarAnalyzerTestCase { assertEquals(1, jarClasses11.getPackages().size()); assertEquals(1, jarClasses11.getClassNames().size()); assertFalse(jarClasses11.getMethods().isEmpty()); + assertEquals(9, jarVersionedRuntime11.getNumEntries()); assertEntriesContains(jarVersionedRuntime11.getEntries(), "META-INF/versions/11/resource.txt"); // test ordering