This is an automated email from the ASF dual-hosted git repository.

olamy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-javadoc-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new 76826c86 [MJAVADOC-822] skippedModules should be more scalable and 
support regex (#336)
76826c86 is described below

commit 76826c865a684c2bac489baad3bc3ccf28dc66e5
Author: Olivier Lamy <ol...@apache.org>
AuthorDate: Sat Nov 16 12:09:45 2024 +1000

    [MJAVADOC-822] skippedModules should be more scalable and support regex 
(#336)
    
    Signed-off-by: Olivier Lamy <ol...@apache.org>
---
 .../b/{ => e1}/pom.xml                             | 10 ++-------
 .../e1/src/main/java/a/b/e/E1.java}                | 25 +++++----------------
 .../b/pom.xml                                      |  1 +
 .../MJAVADOC-636-aggregate_module_skipped/pom.xml  |  2 +-
 .../verify.groovy                                  |  1 +
 .../maven/plugins/javadoc/AbstractJavadocMojo.java | 26 ++++++++++++++++++----
 6 files changed, 33 insertions(+), 32 deletions(-)

diff --git a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/pom.xml 
b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/pom.xml
similarity index 87%
copy from src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/pom.xml
copy to src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/pom.xml
index f463f5ab..6c2f1a76 100644
--- a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/pom.xml
+++ b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/pom.xml
@@ -25,15 +25,9 @@
 
   <parent>
     <groupId>org.apache.maven.plugins.javadoc.it</groupId>
-    <artifactId>mjavadoc636</artifactId>
+    <artifactId>mjavadoc636b</artifactId>
     <version>1.0-SNAPSHOT</version>
   </parent>
-  <artifactId>mjavadoc636b</artifactId>
-  <packaging>pom</packaging>
-
-  <modules>
-    <module>c</module>
-    <module>e</module>
-  </modules>
+  <artifactId>mjavadoc636e1</artifactId>
 
 </project>
diff --git 
a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/verify.groovy 
b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/src/main/java/a/b/e/E1.java
similarity index 64%
copy from src/it/projects/MJAVADOC-636-aggregate_module_skipped/verify.groovy
copy to 
src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/src/main/java/a/b/e/E1.java
index d7aaec71..5fbb7d5e 100644
--- a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/verify.groovy
+++ 
b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/src/main/java/a/b/e/E1.java
@@ -1,3 +1,5 @@
+package a.b.e;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -17,22 +19,7 @@
  * under the License.
  */
 
-import java.util.jar.*
-
-def aggregatedJavadoc = new File( basedir, 
'target/mjavadoc636-1.0-SNAPSHOT-javadoc.jar');
-
-assert aggregatedJavadoc.exists()
-
-def jar = new JarFile(aggregatedJavadoc)
-
-def files = new ArrayList()
-
-for (JarEntry file in jar.entries()){
-  files.add(file.getName())
-}
-
-assert !files.contains("a/b/e/E.html")
-assert !files.contains("a/b/c/d/D1.html")
-assert files.contains("a/b/c/d/D2.html")
-assert files.contains("a/f/F.html")
-
+public interface E1
+{
+    
+}
\ No newline at end of file
diff --git a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/pom.xml 
b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/pom.xml
index f463f5ab..c84ce659 100644
--- a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/pom.xml
+++ b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/pom.xml
@@ -34,6 +34,7 @@
   <modules>
     <module>c</module>
     <module>e</module>
+    <module>e1</module>
   </modules>
 
 </project>
diff --git a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/pom.xml 
b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/pom.xml
index d8a280ba..69731b7a 100644
--- a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/pom.xml
+++ b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/pom.xml
@@ -54,7 +54,7 @@
           <artifactId>maven-javadoc-plugin</artifactId>
           <version>@project.version@</version>
           <configuration>
-            <skippedModules>mjavadoc636e,mjavadoc636d1</skippedModules>
+            <skippedModules>mjavadoc636e.*,mjavadoc636d1</skippedModules>
           </configuration>
         </plugin>
       </plugins>
diff --git 
a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/verify.groovy 
b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/verify.groovy
index d7aaec71..702c13c7 100644
--- a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/verify.groovy
+++ b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/verify.groovy
@@ -32,6 +32,7 @@ for (JarEntry file in jar.entries()){
 }
 
 assert !files.contains("a/b/e/E.html")
+assert !files.contains("a/b/e/E1.html")
 assert !files.contains("a/b/c/d/D1.html")
 assert files.contains("a/b/c/d/D2.html")
 assert files.contains("a/f/F.html")
diff --git 
a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java 
b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
index 5c545aa3..9e63b7e8 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
@@ -52,6 +52,7 @@ import java.util.Optional;
 import java.util.Properties;
 import java.util.Set;
 import java.util.StringTokenizer;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.BooleanUtils;
@@ -1210,7 +1211,7 @@ public abstract class AbstractJavadocMojo extends 
AbstractMojo {
      * <br/>
      * <b>Note</b>: if {@link #detectOfflineLinks} is defined, the offline 
links between the project modules are
      * automatically added if the goal is calling in a non-aggregator way.
-     * @see OfflineLink.
+     * @see OfflineLink
      * @see <a 
href="https://docs.oracle.com/en/java/javase/17/docs/specs/man/javadoc.html#additional-options-provided-by-the-standard-doclet";>Doclet
 option linkoffline</a>
      */
     @Parameter(property = "offlineLinks")
@@ -1642,7 +1643,7 @@ public abstract class AbstractJavadocMojo extends 
AbstractMojo {
 
     /**
      * <p>
-     * Comma separated list of modules (artifactId) to not add in aggregated 
javadoc
+     * Comma separated list of modules (can be regular expression) in the 
format ([group:]artifactId) to not add in aggregated javadoc
      * </p>
      *
      * @since 3.2.0
@@ -1650,6 +1651,11 @@ public abstract class AbstractJavadocMojo extends 
AbstractMojo {
     @Parameter(property = "maven.javadoc.skippedModules")
     private String skippedModules;
 
+    /**
+     * List built once from the parameter {@link #skippedModules}
+     */
+    private List<Pattern> patternsToSkip;
+
     /**
      * Timestamp for reproducible output archive entries, either formatted as 
ISO 8601
      * <code>yyyy-MM-dd'T'HH:mm:ssXXX</code> or as an int representing seconds 
since the epoch (like
@@ -6043,8 +6049,20 @@ public abstract class AbstractJavadocMojo extends 
AbstractMojo {
         if (this.skippedModules == null || this.skippedModules.isEmpty()) {
             return false;
         }
-        List<String> modulesToSkip = 
Arrays.asList(StringUtils.split(this.skippedModules, ','));
-        return modulesToSkip.contains(mavenProject.getArtifactId());
+        if (this.patternsToSkip == null) {
+            this.patternsToSkip = 
Arrays.stream(StringUtils.split(this.skippedModules, ','))
+                    .map(String::trim)
+                    // we are expecting something such [groupdId:]artifactId 
so if no groupId we want to match any
+                    // groupId
+                    .map(s -> !s.contains(":") ? ".*:" + s : s)
+                    .map(Pattern::compile)
+                    .collect(Collectors.toList());
+        }
+        Optional<Pattern> found = this.patternsToSkip.stream()
+                .filter(pattern -> pattern.matcher(mavenProject.getGroupId() + 
":" + mavenProject.getArtifactId())
+                        .matches())
+                .findAny();
+        return found.isPresent() || isSkippedJavadoc(mavenProject);
     }
 
     /**

Reply via email to