[MJAVADOC] Improve split package issue with Manifest base modules.
diff --git a/src/it/projects/MJAVADOC-568_manifest-splitpackage/mojo/pom.xml b/src/it/projects/MJAVADOC-568_manifest-splitpackage/mojo/pom.xml
index 5032cc5..67b08dc 100644
--- a/src/it/projects/MJAVADOC-568_manifest-splitpackage/mojo/pom.xml
+++ b/src/it/projects/MJAVADOC-568_manifest-splitpackage/mojo/pom.xml
@@ -53,9 +53,15 @@
<version>3.6.0</version>
</dependency>
<dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>3.6.0</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.6.0</version>
+ <optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins.javadoc.it</groupId>
diff --git a/src/it/projects/MJAVADOC-568_manifest-splitpackage/mojo/src/main/java/mojo/TestcaseMojo.java b/src/it/projects/MJAVADOC-568_manifest-splitpackage/mojo/src/main/java/mojo/TestcaseMojo.java
index e50c6fb..998be61 100644
--- a/src/it/projects/MJAVADOC-568_manifest-splitpackage/mojo/src/main/java/mojo/TestcaseMojo.java
+++ b/src/it/projects/MJAVADOC-568_manifest-splitpackage/mojo/src/main/java/mojo/TestcaseMojo.java
@@ -23,6 +23,8 @@
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
/**
* This is also a comment.
@@ -30,6 +32,10 @@
@Mojo(name = "my-mojo", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true)
public class TestcaseMojo extends AbstractMojo
{
+
+ @Parameter( defaultValue="${project}", readonly=true, required = true )
+ private MavenProject project;
+
public Testcase createTestcase()
{
return null;
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 3fc50bf..3177dc5 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
@@ -4949,6 +4949,8 @@
ResolvePathResult mainResolvePathResult = null;
+ Map<String, Collection<Path>> patchModules = new HashMap<>();
+
Path moduleSourceDir = null;
if ( supportModulePath && !allModuleDescriptors.isEmpty() )
{
@@ -5008,9 +5010,7 @@
additionalModules.add( result.getModuleDescriptor().name() );
- addArgIfNotEmpty( arguments, "--patch-module", result.getModuleDescriptor().name() + '='
- + JavadocUtil.quotedPathArgument( getSourcePath( projectSourcepaths.getValue() ) ),
- false, false );
+ patchModules.put( result.getModuleDescriptor().name(), projectSourcepaths.getValue() );
Path modulePath = moduleSourceDir.resolve( result.getModuleDescriptor().name() );
if ( !Files.isDirectory( modulePath ) )
@@ -5072,11 +5072,21 @@
}
}
+ final ModuleNameSource mainModuleNameSource;
+ if ( mainResolvePathResult != null )
+ {
+ mainModuleNameSource = mainResolvePathResult.getModuleNameSource();
+ }
+ else
+ {
+ mainModuleNameSource = null;
+ }
+
if ( supportModulePath
- && ( isAggregator() || ( mainResolvePathResult != null
- && ( ModuleNameSource.MODULEDESCRIPTOR.equals( mainResolvePathResult.getModuleNameSource() )
- || ModuleNameSource.MANIFEST.equals( mainResolvePathResult.getModuleNameSource() ) ) ) )
- && !isTest() )
+ && !isTest()
+ && ( isAggregator()
+ || ModuleNameSource.MODULEDESCRIPTOR.equals( mainModuleNameSource )
+ || ModuleNameSource.MANIFEST.equals( mainModuleNameSource ) ) )
{
List<File> pathElements = new ArrayList<>( getPathElements() );
File artifactFile = getArtifactFile( project );
@@ -5088,9 +5098,11 @@
ResolvePathsRequest<File> request =
ResolvePathsRequest.ofFiles( pathElements );
+ String mainModuleName = null;
if ( mainResolvePathResult != null )
{
request.setModuleDescriptor( mainResolvePathResult.getModuleDescriptor() );
+ mainModuleName = mainResolvePathResult.getModuleDescriptor().name();
}
request.setAdditionalModules( additionalModules );
@@ -5101,26 +5113,34 @@
Set<File> modulePathElements = new HashSet<>( result.getModulepathElements().keySet() ) ;
- Set<File> directDependencyArtifactFiles = new HashSet<>( project.getDependencyArtifacts().size() );
- for ( Artifact depArt : project.getDependencyArtifacts() )
- {
- directDependencyArtifactFiles.add( depArt.getFile() );
- }
-
Collection<File> classPathElements = new ArrayList<>( result.getClasspathElements().size() );
+
for ( File file : result.getClasspathElements() )
{
- if ( directDependencyArtifactFiles.contains( file )
- || ( file.isDirectory() && new File( file, "module-info.class" ).exists() ) )
+ if ( file.isDirectory() && new File( file, "module-info.class" ).exists() )
{
modulePathElements.add( file );
}
+ else if ( ModuleNameSource.MANIFEST.equals( mainModuleNameSource ) )
+ {
+ ModuleNameSource depModuleNameSource =
+ locationManager.resolvePath( ResolvePathRequest.ofFile( file ) ).getModuleNameSource();
+ if ( ModuleNameSource.MODULEDESCRIPTOR.equals( depModuleNameSource )
+ || ModuleNameSource.MANIFEST.equals( depModuleNameSource ) )
+ {
+ modulePathElements.add( file );
+ }
+ else
+ {
+ patchModules.get( mainModuleName ).add( file.toPath() );
+ }
+ }
else
{
classPathElements.add( file );
}
}
-
+
String classpath = StringUtils.join( classPathElements.iterator(), File.pathSeparator );
addArgIfNotEmpty( arguments, "--class-path", JavadocUtil.quotedPathArgument( classpath ), false,
false );
@@ -5145,7 +5165,14 @@
String classpath = StringUtils.join( getPathElements().iterator(), File.pathSeparator );
addArgIfNotEmpty( arguments, "-classpath", JavadocUtil.quotedPathArgument( classpath ) , false, false );
}
-
+
+ for ( Entry<String, Collection<Path>> entry : patchModules.entrySet() )
+ {
+ addArgIfNotEmpty( arguments, "--patch-module", entry.getKey() + '='
+ + JavadocUtil.quotedPathArgument( getSourcePath( entry.getValue() ) ),
+ false, false );
+ }
+
if ( StringUtils.isNotEmpty( doclet ) )
{
addArgIfNotEmpty( arguments, "-doclet", JavadocUtil.quotedArgument( doclet ) );