This is an automated email from the ASF dual-hosted git repository.
ppalaga pushed a commit to branch 2.13.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/2.13.x by this push:
new a7ec34e649 Check extension pages with strict option
a7ec34e649 is described below
commit a7ec34e649dc0ed62b3f6a2e3c3b1be2107f2924
Author: Peter Palaga <[email protected]>
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 2c59b6b21d..a8082beb1d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -223,6 +223,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);