This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch pr-459 in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git
commit 36b9deff3bc38534b9d5db5a946c9c2785c6c4f2 Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Mon Oct 6 20:51:03 2025 +0200 rebase --- pom.xml | 3 +- .../dependency/analyze/AbstractAnalyzeMojo.java | 112 +++++++++++---------- .../analyze/TestAnalyzeIndirectDependency.java | 35 +++---- .../plugins/dependency/testUtils/TestLog.java | 15 +-- 4 files changed, 84 insertions(+), 81 deletions(-) diff --git a/pom.xml b/pom.xml index 92d1825e..30291e1d 100644 --- a/pom.xml +++ b/pom.xml @@ -96,7 +96,7 @@ under the License. <slf4jVersion>1.7.36</slf4jVersion> <jettyVersion>9.4.58.v20250814</jettyVersion> <jettyVersion>9.4.57.v20241219</jettyVersion> - <johnzonVersion>2.0.1</johnzonVersion> + <johnzonVersion>1.2.21</johnzonVersion> <glassfishVersion>2.0.1</glassfishVersion> <mockito.version>4.11.0</mockito.version> <plexus-archiver.version>4.10.1</plexus-archiver.version> @@ -337,6 +337,7 @@ under the License. <groupId>org.apache.johnzon</groupId> <artifactId>johnzon-core</artifactId> <version>${johnzonVersion}</version> + <classifier>jakarta</classifier> <scope>test</scope> </dependency> <dependency> diff --git a/src/main/java/org/apache/maven/plugins/dependency/analyze/AbstractAnalyzeMojo.java b/src/main/java/org/apache/maven/plugins/dependency/analyze/AbstractAnalyzeMojo.java index 9ffdabdf..2c39d927 100644 --- a/src/main/java/org/apache/maven/plugins/dependency/analyze/AbstractAnalyzeMojo.java +++ b/src/main/java/org/apache/maven/plugins/dependency/analyze/AbstractAnalyzeMojo.java @@ -37,9 +37,6 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.stream.Stream; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.plugin.AbstractMojo; @@ -54,6 +51,9 @@ import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzerExce import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.ModuleVisitor; import org.objectweb.asm.Type; @@ -472,16 +472,16 @@ public abstract class AbstractAnalyzeMojo extends AbstractMojo { // todo: enhance analyzer (dependency) to do it since it already visits classes // will save some time - private Set<String> scanForSpiUsage(final Set<Artifact> usedDeclared, - final Map<Artifact, Set<String>> usedUndeclaredWithClasses) { + private Set<String> scanForSpiUsage( + final Set<Artifact> usedDeclared, final Map<Artifact, Set<String>> usedUndeclaredWithClasses) { return Stream.concat( - usedDeclared.stream().flatMap(this::findUsedSpi), - usedUndeclaredWithClasses.keySet().stream().flatMap(this::findUsedSpi)) + usedDeclared.stream().flatMap(this::findUsedSpi), + usedUndeclaredWithClasses.keySet().stream().flatMap(this::findUsedSpi)) .collect(toSet()); } private Stream<String> findUsedSpi(final Artifact artifact) { - try (final JarFile jar = new JarFile(artifact.getFile())) { + try (JarFile jar = new JarFile(artifact.getFile())) { return list(jar.entries()).stream() .filter(entry -> entry.getName().endsWith(".class")) .flatMap(entry -> { @@ -492,39 +492,43 @@ public abstract class AbstractAnalyzeMojo extends AbstractMojo { return Stream.empty(); } final Set<String> spi = new HashSet<>(); - classReader.accept(new ClassVisitor(ASM9) { - @Override - public MethodVisitor visitMethod(final int access, - final String name, - final String descriptor, - final String signature, - final String[] exceptions) { - return new MethodVisitor(ASM9) { - private Type lastType = null; - + classReader.accept( + new ClassVisitor(ASM9) { @Override - public void visitLdcInsn(final Object value) { - if (value instanceof Type) { - lastType = (Type) value; - } + public MethodVisitor visitMethod( + final int access, + final String name, + final String descriptor, + final String signature, + final String[] exceptions) { + return new MethodVisitor(ASM9) { + private Type lastType = null; + + @Override + public void visitLdcInsn(final Object value) { + if (value instanceof Type) { + lastType = (Type) value; + } + } + + @Override + public void visitMethodInsn( + final int opcode, + final String owner, + final String name, + final String descriptor, + final boolean isInterface) { + if (opcode == INVOKESTATIC + && Objects.equals(owner, "java/util/ServiceLoader") + && Objects.equals(name, "load")) { + spi.add(lastType.getClassName()); + } + lastType = null; + } + }; } - - @Override - public void visitMethodInsn(final int opcode, - final String owner, - final String name, - final String descriptor, - final boolean isInterface) { - if (opcode == INVOKESTATIC && - Objects.equals(owner, "java/util/ServiceLoader") && - Objects.equals(name, "load")) { - spi.add(lastType.getClassName()); - } - lastType = null; - } - }; - } - }, 0); + }, + 0); return spi.stream(); }) .collect(toList()) // materialize before closing the jar @@ -544,7 +548,7 @@ public abstract class AbstractAnalyzeMojo extends AbstractMojo { // TODO: enhance to ensure there is a single binding else just log a warning for all // and maybe even handle version? private boolean isSlf4jBinding(final Artifact artifact) { - try (final JarFile file = new JarFile(artifact.getFile())) { + try (JarFile file = new JarFile(artifact.getFile())) { return file.getEntry("org/slf4j/impl/StaticLoggerBinder.class") != null; } catch (final IOException e) { return false; @@ -553,7 +557,7 @@ public abstract class AbstractAnalyzeMojo extends AbstractMojo { private boolean hasUsedSPIImpl(final Set<String> usedSpi, final Artifact artifact) { final Set<String> spi; - try (final JarFile file = new JarFile(artifact.getFile())) { + try (JarFile file = new JarFile(artifact.getFile())) { spi = list(file.entries()).stream() .filter(it -> it.getName().startsWith("META-INF/services/") && !it.isDirectory()) .map(it -> it.getName().substring("META-INF/services/".length())) @@ -562,19 +566,21 @@ public abstract class AbstractAnalyzeMojo extends AbstractMojo { // java >= 9 final JarEntry moduleEntry = file.getJarEntry("module-info.class"); if (moduleEntry != null) { - try (final InputStream in = file.getInputStream(moduleEntry)) { + try (InputStream in = file.getInputStream(moduleEntry)) { final ClassReader cr = new ClassReader(in); - cr.accept(new ClassVisitor(ASM9) { - @Override - public ModuleVisitor visitModule(String name, int access, String version) { - return new ModuleVisitor(ASM9) { + cr.accept( + new ClassVisitor(ASM9) { @Override - public void visitProvide(final String service, final String[] providers) { - spi.add(service.replace('/', '.')); + public ModuleVisitor visitModule(String name, int access, String version) { + return new ModuleVisitor(ASM9) { + @Override + public void visitProvide(final String service, final String[] providers) { + spi.add(service.replace('/', '.')); + } + }; } - }; - } - }, 0); + }, + 0); } } } catch (final IOException e) { @@ -693,8 +699,8 @@ public abstract class AbstractAnalyzeMojo extends AbstractMojo { } private List<Artifact> filterDependencies(Set<Artifact> artifacts, String[] excludes) { - ArtifactFilter filter = new StrictPatternExcludesArtifactFilter(excludes == null ? - Collections.emptyList() :Arrays.asList(excludes)); + ArtifactFilter filter = new StrictPatternExcludesArtifactFilter( + excludes == null ? Collections.emptyList() : Arrays.asList(excludes)); List<Artifact> result = new ArrayList<>(); for (Iterator<Artifact> it = artifacts.iterator(); it.hasNext(); ) { diff --git a/src/test/java/org/apache/maven/plugins/dependency/analyze/TestAnalyzeIndirectDependency.java b/src/test/java/org/apache/maven/plugins/dependency/analyze/TestAnalyzeIndirectDependency.java index 09f6ff78..dc2882d8 100644 --- a/src/test/java/org/apache/maven/plugins/dependency/analyze/TestAnalyzeIndirectDependency.java +++ b/src/test/java/org/apache/maven/plugins/dependency/analyze/TestAnalyzeIndirectDependency.java @@ -18,6 +18,14 @@ */ package org.apache.maven.plugins.dependency.analyze; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.HashSet; + import jakarta.json.spi.JsonProvider; import org.apache.johnzon.core.JsonProviderImpl; import org.apache.maven.artifact.Artifact; @@ -43,14 +51,6 @@ import org.junit.jupiter.api.io.TempDir; import org.slf4j.LoggerFactory; import org.slf4j.impl.SimpleLoggerFactory; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; -import java.util.HashSet; - import static java.util.Arrays.asList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.tomitribe.util.JarLocation.jarLocation; @@ -69,7 +69,7 @@ class TestAnalyzeIndirectDependency { final String resource = JsonpMain.class.getName().replace('.', '/') + ".class"; final Path target = base.resolve(resource); Files.createDirectories(target.getParent()); - try (final InputStream is = Thread.currentThread() + try (InputStream is = Thread.currentThread() .getContextClassLoader() .getResourceAsStream(resource)) { Files.copy(is, target, StandardCopyOption.REPLACE_EXISTING); @@ -94,7 +94,7 @@ class TestAnalyzeIndirectDependency { final String resource = Slf4jMain.class.getName().replace('.', '/') + ".class"; final Path target = base.resolve(resource); Files.createDirectories(target.getParent()); - try (final InputStream is = Thread.currentThread() + try (InputStream is = Thread.currentThread() .getContextClassLoader() .getResourceAsStream(resource)) { Files.copy(is, target, StandardCopyOption.REPLACE_EXISTING); @@ -104,11 +104,13 @@ class TestAnalyzeIndirectDependency { artifact("org.slf4j", "slf4j-simple", slf4jVersion, SimpleLoggerFactory.class))); } - private String exec(final Path work, final IOConsumer<Path> classesFiller, final Artifact... artifacts) throws Exception { + private String exec(final Path work, final IOConsumer<Path> classesFiller, final Artifact... artifacts) + throws Exception { final Path classes = Files.createDirectories(work.resolve("target/classes")); final Build build = new Build(); build.setOutputDirectory(classes.toString()); - build.setTestOutputDirectory(Files.createDirectories(work.resolve("target/test-classes")).toString()); + build.setTestOutputDirectory( + Files.createDirectories(work.resolve("target/test-classes")).toString()); final MavenProject project = new MavenProject(); project.setGroupId("g"); @@ -147,18 +149,17 @@ class TestAnalyzeIndirectDependency { configuration.addChild("ignoredPackagings", "pom"); configuration.addChild("outputDirectory", project.getBuild().getOutputDirectory()); - new BasicComponentConfigurator() - .configureComponent(mojo, configuration, evaluator, null); + new BasicComponentConfigurator().configureComponent(mojo, configuration, evaluator, null); mojo.execute(); return log.toString().trim(); } - private DefaultArtifact artifact(final String groupId, final String artifactId, final String slf4jVersion, final Class<?> marker) { + private DefaultArtifact artifact( + final String groupId, final String artifactId, final String slf4jVersion, final Class<?> marker) { final DefaultArtifact artifact = new DefaultArtifact( - groupId, artifactId, slf4jVersion, - "compile", "jar", "", new DefaultArtifactHandler()); + groupId, artifactId, slf4jVersion, "compile", "jar", "", new DefaultArtifactHandler()); artifact.setFile(jarLocation(marker)); return artifact; } diff --git a/src/test/java/org/apache/maven/plugins/dependency/testUtils/TestLog.java b/src/test/java/org/apache/maven/plugins/dependency/testUtils/TestLog.java index 80e73223..58b58e44 100644 --- a/src/test/java/org/apache/maven/plugins/dependency/testUtils/TestLog.java +++ b/src/test/java/org/apache/maven/plugins/dependency/testUtils/TestLog.java @@ -18,11 +18,11 @@ */ package org.apache.maven.plugins.dependency.testUtils; -import org.apache.maven.plugin.logging.Log; - import java.io.PrintWriter; import java.io.StringWriter; +import org.apache.maven.plugin.logging.Log; + public class TestLog implements Log { private final StringBuilder sb = new StringBuilder(); @@ -116,8 +116,7 @@ public class TestLog implements Log { error.printStackTrace(pWriter); - System.err.println( - "[error] " + content.toString() + System.lineSeparator() + System.lineSeparator() + sWriter); + System.err.println("[error] " + content.toString() + System.lineSeparator() + System.lineSeparator() + sWriter); } /** @@ -166,11 +165,7 @@ public class TestLog implements Log { } private void print(String prefix, CharSequence content) { - sb.append("[") - .append(prefix) - .append("] ") - .append(content.toString()) - .append(System.lineSeparator()); + sb.append("[").append(prefix).append("] ").append(content.toString()).append(System.lineSeparator()); } private void print(String prefix, Throwable error) { @@ -205,4 +200,4 @@ public class TestLog implements Log { public String getContent() { return sb.toString(); } -} \ No newline at end of file +}