This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new fbe2163e82 Check extension pages with strict option fbe2163e82 is described below commit fbe2163e82b1393fc59e73c812e34d6e8fd31ec0 Author: Peter Palaga <ppal...@redhat.com> AuthorDate: Mon Dec 19 16:15:24 2022 +0100 Check extension pages with strict option --- pom.xml | 3 + .../quarkus/maven/AbstractExtensionListMojo.java | 64 +++++++++++++++++++++- .../quarkus/maven/CheckExtensionPagesMojo.java | 12 +++- 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d8f8d03445..dd8abeca96 100644 --- a/pom.xml +++ b/pom.xml @@ -220,6 +220,9 @@ <!-- maven-release-plugin --> <tagNameFormat>@{project.version}</tagNameFormat> + + <!-- camel-quarkus-maven-plugin --> + <camel-quarkus.extension.finder.strict>true</camel-quarkus.extension.finder.strict> </properties> <modules> diff --git a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/AbstractExtensionListMojo.java b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/AbstractExtensionListMojo.java index 4fde01d781..7ded60b17c 100644 --- a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/AbstractExtensionListMojo.java +++ b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/AbstractExtensionListMojo.java @@ -17,13 +17,25 @@ package org.apache.camel.quarkus.maven; import java.io.File; +import java.io.IOException; +import java.io.Reader; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.nio.file.Path; +import java.util.Collection; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.maven.model.Model; +import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugins.annotations.Parameter; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.l2x6.maven.utils.MavenSourceTree; public abstract class AbstractExtensionListMojo extends AbstractMojo { @@ -73,11 +85,61 @@ public abstract class AbstractExtensionListMojo extends AbstractMojo { } Stream<ExtensionModule> findExtensions() { + return findExtensions(true); + } + + /** + * @param strict if {@code true} only Maven modules are considered that are reachable over a {@code <module>} + * element from the root module; otherwise also unreachable modules will be returned. + * @return + */ + Stream<ExtensionModule> findExtensions(boolean strict) { getSkipArtifactIdBases(); - return CqUtils.findExtensions( + final Stream<ExtensionModule> strictModulesStream = CqUtils.findExtensions( getRootModuleDirectory(), getTree().getModulesByGa().values(), artifactIdBase -> !skipArtifactIdBasePatterns.matchesAny(artifactIdBase)); + if (strict) { + return strictModulesStream; + } else { + final Collection<ExtensionModule> strictModules = strictModulesStream + .collect(Collectors.toCollection(LinkedHashSet::new)); + final Set<ExtensionModule> result = new TreeSet<>(); + strictModules.stream() + .map(module -> module.getExtensionDir().getParent()) + .distinct() + .forEach(extensionDir -> { + + try (Stream<Path> files = Files.list(extensionDir)) { + files + .filter(Files::isDirectory) + .map(extensionDirectory -> extensionDirectory.resolve("runtime/pom.xml")) + .filter(Files::isRegularFile) + .forEach(runtimePomXmlPath -> { + String artifactId = null; + try (Reader r = Files.newBufferedReader(runtimePomXmlPath, StandardCharsets.UTF_8)) { + final MavenXpp3Reader rxppReader = new MavenXpp3Reader(); + final Model model = rxppReader.read(r); + artifactId = model.getArtifactId(); + } catch (IOException | XmlPullParserException e) { + throw new RuntimeException("Could not read " + runtimePomXmlPath); + } + if (!artifactId.startsWith("camel-quarkus-")) { + throw new IllegalStateException( + "Should start with 'camel-quarkus-': " + artifactId); + } + final String artifactIdBase = artifactId.substring("camel-quarkus-".length()); + if (!skipArtifactIdBasePatterns.matchesAny(artifactIdBase)) { + result.add(new ExtensionModule(runtimePomXmlPath.getParent().getParent(), + artifactIdBase)); + } + }); + } catch (IOException e) { + throw new RuntimeException("Could not list " + extensionDir, e); + } + }); + return result.stream(); + } } PatternSet getSkipArtifactIdBases() { diff --git a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CheckExtensionPagesMojo.java b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CheckExtensionPagesMojo.java index 9e342bd354..c835153e9b 100644 --- a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CheckExtensionPagesMojo.java +++ b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CheckExtensionPagesMojo.java @@ -70,6 +70,16 @@ public class CheckExtensionPagesMojo extends AbstractDocGeneratorMojo { @Parameter(property = "camel.version") String camelVersion; + /** + * If {@code true} only extension Maven modules are considered to exist which are reachable through a chain of + * {@code <module>} elements from the root Maven module; otherwise it is enough for an extension to be considered + * existent if its {@code runtime/pom.xml} exists although it is not reachable through {@code <module>} elements. + * + * @since 2.16.0 + */ + @Parameter(property = "camel-quarkus.extension.finder.strict", defaultValue = "true") + boolean strict; + /** * The path to the navigation document. */ @@ -145,7 +155,7 @@ public class CheckExtensionPagesMojo extends AbstractDocGeneratorMojo { final Set<String> artifactIdBases = new HashSet<>(); final Set<CamelQuarkusExtension> extensions = new TreeSet<>(Comparator.comparing(e -> e.getName().get())); - findExtensions() + findExtensions(strict) .forEach(ext -> { final String artifactIdBase = ext.getArtifactIdBase(); artifactIdBases.add(artifactIdBase);