2929import java .io .OutputStream ;
3030import java .nio .charset .StandardCharsets ;
3131import java .nio .file .Files ;
32- import java .nio .file .Path ;
3332import java .util .Collection ;
3433import java .util .LinkedHashMap ;
3534import java .util .List ;
3635import java .util .Map ;
36+ import java .util .Optional ;
3737import java .util .jar .JarEntry ;
3838import java .util .jar .JarInputStream ;
3939import java .util .jar .JarOutputStream ;
4242import java .util .zip .ZipEntry ;
4343import java .util .zip .ZipException ;
4444
45+ import static de .jjohannes .gradle .javamodules .FilePathToModuleCoordinates .gaCoordinatesFromFilePathMatch ;
46+ import static de .jjohannes .gradle .javamodules .FilePathToModuleCoordinates .versionFromFilePath ;
47+
4548/**
4649 * An artifact transform that applies additional information to Jars without module information.
4750 * The transformation fails the build if a Jar does not contain information and no extra information
@@ -97,12 +100,12 @@ public void transform(TransformOutputs outputs) {
97100 private ModuleSpec findModuleSpec (File originalJar ) {
98101 Map <String , ModuleSpec > moduleSpecs = getParameters ().getModuleSpecs ().get ();
99102
100- String gaCoordinates = gaCoordinatesFromFilePath (originalJar .toPath ());
101- String originalJarName = originalJar .getName ();
102-
103- if (moduleSpecs .containsKey (gaCoordinates )) {
104- return moduleSpecs .get (gaCoordinates );
103+ Optional <String > gaCoordinates = moduleSpecs .keySet ().stream ().filter (ga -> gaCoordinatesFromFilePathMatch (originalJar .toPath (), ga )).findFirst ();
104+ if (gaCoordinates .isPresent ()) {
105+ return moduleSpecs .get (gaCoordinates .get ());
105106 }
107+
108+ String originalJarName = originalJar .getName ();
106109 if (moduleSpecs .containsKey (originalJarName )) {
107110 return moduleSpecs .get (originalJarName );
108111 }
@@ -112,38 +115,7 @@ private ModuleSpec findModuleSpec(File originalJar) {
112115
113116 private boolean willBeMerged (File originalJar , Collection <ModuleSpec > modules ) {
114117 return modules .stream ().anyMatch (module -> module .getMergedJars ().stream ().anyMatch (toMerge ->
115- toMerge .equals (gaCoordinatesFromFilePath (originalJar .toPath ())) || toMerge .equals (originalJar .getName ())));
116- }
117-
118- /**
119- * Attempts to parse 'group' and 'name' coordinates from a path like:
120- * .gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.36/6c62681a2f655b49963a5983b8b0950a6120ae14/slf4j-api-1.7.36.jar
121- */
122- @ Nullable
123- private String gaCoordinatesFromFilePath (Path path ) {
124- String version = versionFromFilePath (path );
125- if (version == null ) {
126- return null ;
127- }
128-
129- String group = path .getName (path .getNameCount () - 5 ).toString ();
130- String name = path .getName (path .getNameCount () - 4 ).toString ();
131-
132- return group + ":" + name ;
133- }
134-
135- @ Nullable
136- private String versionFromFilePath (Path path ) {
137- if (path .getNameCount () < 5 ) {
138- return null ;
139- }
140-
141- String version = path .getName (path .getNameCount () - 3 ).toString ();
142- if (!path .getFileName ().toString ().contains (version )) {
143- return null ;
144- }
145-
146- return version ;
118+ gaCoordinatesFromFilePathMatch (originalJar .toPath (), toMerge ) || toMerge .equals (originalJar .getName ())));
147119 }
148120
149121 private boolean isModule (File jar ) {
0 commit comments