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); } /**