#787 Get all versions in multi-release JAR · classgraph/classgraph@07d9fff (original) (raw)
1
1
`package io.github.classgraph.features;
`
2
2
``
3
3
`import static org.assertj.core.api.Assertions.assertThat;
`
``
4
`+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
`
4
5
``
5
6
`import java.lang.reflect.Constructor;
`
6
7
`import java.lang.reflect.Method;
`
`@@ -79,4 +80,56 @@ public void multiReleaseVersioningOfResources() throws Exception {
`
79
80
` }
`
80
81
` }
`
81
82
` }
`
``
83
+
``
84
`+
/**
`
``
85
`` +
- Loading all versions of multi release class and text resources with
enableMultiReleaseVersions.
``
``
86
`+
`
``
87
`+
- @throws Exception
`
``
88
`+
- the exception
`
``
89
`+
*/
`
``
90
`+
@Test
`
``
91
`+
public void enableMultiReleaseVersions() throws Exception {
`
``
92
`+
// Multi-release jar sections are ignored by ClassGraph if JDK<9
`
``
93
`+
if (VersionFinder.JAVA_MAJOR_VERSION >= 9) {
`
``
94
`+
try (ScanResult scanResult = new ClassGraph()
`
``
95
`+
.overrideClassLoaders(new URLClassLoader(new URL[] { jarURL })).enableMultiReleaseVersions()
`
``
96
`+
.scan()) {
`
``
97
`+
final ResourceList java8ClassResource = scanResult.getResourcesWithPath("mrj/Cls.class");
`
``
98
`+
assertThat(java8ClassResource).hasSize(1);
`
``
99
`+
final ResourceList java9ClassResource = scanResult.getResourcesWithPath("META-INF/versions/9/mrj/Cls.class");
`
``
100
`+
assertThat(java9ClassResource).hasSize(1);
`
``
101
`+
assertThat(java8ClassResource.get(0).load()).isNotEqualTo(java9ClassResource.get(0).load());
`
``
102
+
``
103
`+
final ResourceList java8Resource = scanResult.getResourcesWithPath("resource.txt");
`
``
104
`+
assertThat(java8Resource.size()).isEqualTo(1);
`
``
105
`+
java8Resource.forEachByteArrayThrowingIOException(
`
``
106
`+
(resource, byteArray) -> assertThat(new String(byteArray).trim()).isEqualTo("8"));
`
``
107
`+
final ResourceList java9Resource = scanResult.getResourcesWithPath("META-INF/versions/9/resource.txt");
`
``
108
`+
assertThat(java9Resource.size()).isEqualTo(1);
`
``
109
`+
java9Resource.forEachByteArrayThrowingIOException(
`
``
110
`+
(resource, byteArray) -> assertThat(new String(byteArray).trim()).isEqualTo("9"));
`
``
111
`+
}
`
``
112
`+
}
`
``
113
`+
}
`
``
114
+
``
115
`+
/**
`
``
116
`` +
enableMultiReleaseVersionsdoes not make sense with class info and should disable it.
``
``
117
`+
`
``
118
`+
- @throws Exception
`
``
119
`+
- the exception
`
``
120
`+
*/
`
``
121
`+
@Test
`
``
122
`+
public void enableMultiReleaseVersionsWithClassInfo() throws Exception {
`
``
123
`+
// Multi-release jar sections are ignored by ClassGraph if JDK<9
`
``
124
`+
if (VersionFinder.JAVA_MAJOR_VERSION >= 9) {
`
``
125
`+
try (ScanResult scanResult = new ClassGraph()
`
``
126
`+
.overrideClassLoaders(new URLClassLoader(new URL[] { jarURL })).enableAllInfo()
`
``
127
`+
.enableMultiReleaseVersions().scan()) {
`
``
128
`+
final ResourceList java8ClassResource = scanResult.getResourcesWithPath("mrj/Cls.class");
`
``
129
`+
assertThat(java8ClassResource).hasSize(1);
`
``
130
`+
assertThatThrownBy(() -> scanResult.getClassInfo("mrj.Cls"))
`
``
131
`+
.isInstanceOfAny(IllegalArgumentException.class);
`
``
132
`+
}
`
``
133
`+
}
`
``
134
`+
}
`
82
135
`}
`