diff --git a/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/AbstractFilesArtifactResolver.java b/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/AbstractFilesArtifactResolver.java index 4bfdf628..a7c044ee 100644 --- a/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/AbstractFilesArtifactResolver.java +++ b/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/AbstractFilesArtifactResolver.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Optional; import java.util.function.Predicate; +import java.util.regex.Pattern; import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; @@ -42,7 +43,7 @@ public abstract class AbstractFilesArtifactResolver extends ArtifactResolver { private static final Logger log = LoggerFactory.getLogger(AbstractFilesArtifactResolver.class); - + private final AFReleaseId releaseId; private ClassLoader classLoader; private List jarRepository; private List effectivePoms; @@ -53,7 +54,8 @@ public abstract class AbstractFilesArtifactResolver extends ArtifactResolver { this.classLoader = classLoader; this.jarRepository = new ArrayList<>(); this.effectivePoms = new ArrayList<>(); - init(releaseId); + this.releaseId = releaseId; + init(); } public boolean isLoaded() { @@ -61,7 +63,7 @@ public boolean isLoaded() { } // initialize in jar repository - private void init(AFReleaseId releaseId) { + protected void init() { jarRepository = buildResources(name -> isInJarStructuredFolder(name, "jar")); effectivePoms = buildResources(name -> isInJarStructuredFolder(name, "pom")); pomParser = buildPomParser(releaseId); @@ -99,7 +101,13 @@ private boolean isInJarStructuredFolder(String name, String type) { } private PomParser buildPomParser(AFReleaseId releaseId) { - List url = effectivePoms.stream().filter(e -> e.getFile().endsWith(toFile(releaseId, "pom"))).collect(toList()); + final String pomName = toFile(releaseId, "pom"); + List url = effectivePoms.stream().filter(e -> e.getFile().endsWith(pomName)).collect(toList()); + if (url.isEmpty() && releaseId.getVersion().endsWith("-SNAPSHOT")) { + url = effectivePoms.stream().filter(e -> { + return Pattern.compile(toFileSnapshotRegex(releaseId, "pom")).matcher(e.getFile()).find(); + }).collect(toList()); + } if (url.isEmpty()) { return null; } @@ -171,6 +179,10 @@ private String toFile(AFReleaseId releaseId, String type) { return releaseId.getArtifactId() + "-" + releaseId.getVersion() + "." + type; } + private String toFileSnapshotRegex(AFReleaseId releaseId, String type) { + return releaseId.getArtifactId() + "-" + releaseId.getVersion().replace("-SNAPSHOT", ".*") + "." + type + "$"; + } + @Override public List getArtifactDependecies(String artifactName) { AFReleaseId releaseId = new AFReleaseIdImpl(artifactName); diff --git a/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/ExplodedJarArtifactResolver.java b/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/ExplodedJarArtifactResolver.java index 65cf81a3..89be1121 100644 --- a/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/ExplodedJarArtifactResolver.java +++ b/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/ExplodedJarArtifactResolver.java @@ -39,7 +39,6 @@ public class ExplodedJarArtifactResolver extends AbstractFilesArtifactResolver { private static final Logger log = LoggerFactory.getLogger(ExplodedJarArtifactResolver.class); - ExplodedJarArtifactResolver(ClassLoader classLoader, AFReleaseId releaseId) { super(classLoader, releaseId); } diff --git a/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/InJarArtifactResolver.java b/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/InJarArtifactResolver.java index a28b92f1..8067bfb3 100644 --- a/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/InJarArtifactResolver.java +++ b/kie-soup-maven-utils/kie-soup-maven-integration/src/main/java/org/appformer/maven/integration/InJarArtifactResolver.java @@ -33,10 +33,8 @@ public class InJarArtifactResolver extends AbstractFilesArtifactResolver { private static final Logger log = LoggerFactory.getLogger(InJarArtifactResolver.class); - InJarArtifactResolver(ClassLoader classLoader, AFReleaseId releaseId) { super(classLoader, releaseId); - } @Override diff --git a/kie-soup-maven-utils/kie-soup-maven-integration/src/test/java/org/appformer/maven/integration/ArtifactResolverTest.java b/kie-soup-maven-utils/kie-soup-maven-integration/src/test/java/org/appformer/maven/integration/ArtifactResolverTest.java new file mode 100644 index 00000000..3a9b0375 --- /dev/null +++ b/kie-soup-maven-utils/kie-soup-maven-integration/src/test/java/org/appformer/maven/integration/ArtifactResolverTest.java @@ -0,0 +1,64 @@ +package org.appformer.maven.integration; + +import junit.framework.TestCase; +import org.appformer.maven.support.AFReleaseId; +import org.appformer.maven.support.AFReleaseIdImpl; +import org.junit.Assert; +import org.mockito.Mockito; + +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.function.Predicate; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +public class ArtifactResolverTest extends TestCase { + + class MyInJarArtifactResolver extends InJarArtifactResolver { + + MyInJarArtifactResolver(ClassLoader classLoader, AFReleaseId releaseId) { + super(classLoader, releaseId); + } + + @Override + protected Optional tryInStructuredJar(AFReleaseId releaseId) { + return super.tryInStructuredJar(releaseId); + } + } + + public void testInJarResolverSnapshotLocal() { + ClassLoader classLoader = getClass().getClassLoader(); + AFReleaseId releaseId = new AFReleaseIdImpl("org.jbpm", "kjar", "1.0.0-SNAPSHOT", "jar"); + + + ArrayList urlArrayList = new ArrayList(); + urlArrayList.add(classLoader.getResource("BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-SNAPSHOT.pom")); + + InJarArtifactResolver inJarArtifactResolver = new InJarArtifactResolver(classLoader, releaseId); + InJarArtifactResolver spy = Mockito.spy(inJarArtifactResolver); + doReturn(urlArrayList).when(spy).buildResources(any()); + + spy.init(); + + verify(spy).getURL(endsWith("BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-SNAPSHOT.pom")); + } + + public void testInJarResolverSnapshotExternal() { + ClassLoader classLoader = getClass().getClassLoader(); + AFReleaseId releaseId = new AFReleaseIdImpl("org.jbpm", "kjar", "1.0.0-SNAPSHOT", "jar"); + + InJarArtifactResolver inJarArtifactResolver = new InJarArtifactResolver(classLoader, releaseId ); + InJarArtifactResolver spy = Mockito.spy(inJarArtifactResolver); + + ArrayList urlArrayList = new ArrayList(); + urlArrayList.add(classLoader.getResource("BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-20240717-143315-1.pom")); + doReturn(urlArrayList).when(spy).buildResources(any()); + + spy.init(); + + verify(spy).getURL(endsWith("BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-20240717-143315-1.pom")); + } +} \ No newline at end of file diff --git a/kie-soup-maven-utils/kie-soup-maven-integration/src/test/resources/BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-20240717-143315-1.pom b/kie-soup-maven-utils/kie-soup-maven-integration/src/test/resources/BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-20240717-143315-1.pom new file mode 100644 index 00000000..d6862941 --- /dev/null +++ b/kie-soup-maven-utils/kie-soup-maven-integration/src/test/resources/BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-20240717-143315-1.pom @@ -0,0 +1,11 @@ + + + 4.0.0 + + org.jbpm + kjar + 1.0.0-SNAPSHOT + jar + + + diff --git a/kie-soup-maven-utils/kie-soup-maven-integration/src/test/resources/BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-SNAPSHOT.pom b/kie-soup-maven-utils/kie-soup-maven-integration/src/test/resources/BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-SNAPSHOT.pom new file mode 100644 index 00000000..d6862941 --- /dev/null +++ b/kie-soup-maven-utils/kie-soup-maven-integration/src/test/resources/BOOT-INF/classes/KIE-INF/lib/kjar-1.0.0-SNAPSHOT.pom @@ -0,0 +1,11 @@ + + + 4.0.0 + + org.jbpm + kjar + 1.0.0-SNAPSHOT + jar + + +