#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

`` +

``

``

86

`+

`

``

87

`+

`

``

88

`+

`

``

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

`` +

``

``

117

`+

`

``

118

`+

`

``

119

`+

`

``

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

`}

`