diff --git a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/pom.xml b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/pom.xml
new file mode 100644
index 000000000..6c2f1a76a
--- /dev/null
+++ b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/pom.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ 4.0.0
+
+
+ org.apache.maven.plugins.javadoc.it
+ mjavadoc636b
+ 1.0-SNAPSHOT
+
+ mjavadoc636e1
+
+
diff --git a/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/src/main/java/a/b/e/E1.java b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/src/main/java/a/b/e/E1.java
new file mode 100644
index 000000000..5fbb7d5ea
--- /dev/null
+++ b/src/it/projects/MJAVADOC-636-aggregate_module_skipped/b/e1/src/main/java/a/b/e/E1.java
@@ -0,0 +1,25 @@
+package a.b.e;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+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 f463f5ab0..c84ce6591 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 @@
c
e
+ e1
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 d8a280ba9..69731b7a1 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 @@
maven-javadoc-plugin
@project.version@
- mjavadoc636e,mjavadoc636d1
+ mjavadoc636e.*,mjavadoc636d1
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 d7aaec711..702c13c7b 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 5c545aa32..9e63b7e81 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.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 {
*
* Note: 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 Doclet option linkoffline
*/
@Parameter(property = "offlineLinks")
@@ -1642,7 +1643,7 @@ public abstract class AbstractJavadocMojo extends AbstractMojo {
/**
*
- * 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
*
*
* @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 patternsToSkip;
+
/**
* Timestamp for reproducible output archive entries, either formatted as ISO 8601
* yyyy-MM-dd'T'HH:mm:ssXXX
or as an int representing seconds since the epoch (like
@@ -6043,8 +6049,20 @@ protected boolean isSkippedModule(MavenProject mavenProject) {
if (this.skippedModules == null || this.skippedModules.isEmpty()) {
return false;
}
- List 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 found = this.patternsToSkip.stream()
+ .filter(pattern -> pattern.matcher(mavenProject.getGroupId() + ":" + mavenProject.getArtifactId())
+ .matches())
+ .findAny();
+ return found.isPresent() || isSkippedJavadoc(mavenProject);
}
/**