Skip to content

Commit a861bae

Browse files
committed
[MJAVADOC-682] Reactor builds fail when multiple modules with same groupId:artifactId, but different versions
This closes #253
1 parent b47b280 commit a861bae

File tree

4 files changed

+24
-27
lines changed

4 files changed

+24
-27
lines changed

src/it/projects/MJAVADOC-567_aggr-mixed/verify.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def buildLog = new File(basedir,'build.log')
2222
def expectedLines = ['Creating an aggregated report for both named and unnamed modules is not possible.',
2323
'Ensure that every module has a module descriptor or is a jar with a MANIFEST.MF containing an Automatic-Module-Name.',
2424
'Fix the following projects:',
25-
' - testcase:module2']
25+
' - testcase:module2:1.0-SNAPSHOT']
2626

2727
def errorLines = buildLog.readLines()
2828
.dropWhile{ !it.startsWith('[ERROR] Creating') }

src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2192,7 +2192,7 @@ protected Collection<JavadocModule> getSourcePaths() throws MavenReportException
21922192

21932193
if (!sourcePaths.isEmpty()) {
21942194
mappedSourcePaths.add(new JavadocModule(
2195-
ArtifactUtils.versionlessKey(project.getGroupId(), project.getArtifactId()),
2195+
ArtifactUtils.key(project.getGroupId(), project.getArtifactId(), project.getVersion()),
21962196
getClassesFile(project),
21972197
sourcePaths));
21982198
}
@@ -2206,12 +2206,12 @@ private JavadocModule buildJavadocModule(MavenProject project, Collection<Path>
22062206
ResolvePathResult resolvePathResult = getResolvePathResult(classessFile);
22072207
if (resolvePathResult == null) {
22082208
return new JavadocModule(
2209-
ArtifactUtils.versionlessKey(project.getGroupId(), project.getArtifactId()),
2209+
ArtifactUtils.key(project.getGroupId(), project.getArtifactId(), project.getVersion()),
22102210
classessFile,
22112211
sourcePaths);
22122212
} else {
22132213
return new JavadocModule(
2214-
ArtifactUtils.versionlessKey(project.getGroupId(), project.getArtifactId()),
2214+
ArtifactUtils.key(project.getGroupId(), project.getArtifactId(), project.getVersion()),
22152215
classessFile,
22162216
sourcePaths,
22172217
resolvePathResult.getModuleDescriptor(),
@@ -4398,7 +4398,8 @@ private void addJavadocOptions(
43984398
Map<String, MavenProject> reactorKeys = new HashMap<>(aggregatedProjects.size());
43994399
for (MavenProject reactorProject : aggregatedProjects) {
44004400
reactorKeys.put(
4401-
ArtifactUtils.versionlessKey(reactorProject.getGroupId(), reactorProject.getArtifactId()),
4401+
ArtifactUtils.key(
4402+
reactorProject.getGroupId(), reactorProject.getArtifactId(), reactorProject.getVersion()),
44024403
reactorProject);
44034404
}
44044405

@@ -4424,7 +4425,7 @@ private void addJavadocOptions(
44244425
if (moduleDescriptor != null) {
44254426
try {
44264427
allModuleDescriptors.put(
4427-
entry.getGa(),
4428+
entry.getGav(),
44284429
locationManager
44294430
.parseModuleDescriptor(moduleDescriptor)
44304431
.getModuleDescriptor());
@@ -4433,7 +4434,7 @@ private void addJavadocOptions(
44334434
}
44344435
}
44354436
} else {
4436-
allModuleDescriptors.put(entry.getGa(), entry.getModuleDescriptor());
4437+
allModuleDescriptors.put(entry.getGav(), entry.getModuleDescriptor());
44374438
}
44384439
}
44394440
}
@@ -4448,7 +4449,7 @@ private void addJavadocOptions(
44484449
if (supportModulePath && !allModuleDescriptors.isEmpty()) {
44494450
Collection<String> unnamedProjects = new ArrayList<>();
44504451
for (JavadocModule javadocModule : allSourcePaths) {
4451-
MavenProject aggregatedProject = reactorKeys.get(javadocModule.getGa());
4452+
MavenProject aggregatedProject = reactorKeys.get(javadocModule.getGav());
44524453
if (aggregatedProject != null && !"pom".equals(aggregatedProject.getPackaging())) {
44534454
ResolvePathResult result = null;
44544455

@@ -4497,15 +4498,15 @@ private void addJavadocOptions(
44974498
throw new MavenReportException(e.getMessage(), e);
44984499
}
44994500
} else {
4500-
unnamedProjects.add(javadocModule.getGa());
4501+
unnamedProjects.add(javadocModule.getGav());
45014502
}
45024503

45034504
if (aggregatedProject.equals(getProject())) {
45044505
mainResolvePathResult = result;
45054506
}
45064507
} else {
45074508
// todo
4508-
getLog().error("no reactor project: " + javadocModule.getGa());
4509+
getLog().error("no reactor project: " + javadocModule.getGav());
45094510
}
45104511
}
45114512

src/main/java/org/apache/maven/plugins/javadoc/JavadocModule.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
* @since 3.3.0
3232
*/
3333
public class JavadocModule {
34-
private final String ga;
34+
private final String gav;
3535

3636
private final File artifactFile;
3737

@@ -41,25 +41,25 @@ public class JavadocModule {
4141

4242
private final ModuleNameSource moduleNameSource;
4343

44-
public JavadocModule(String ga, File artifactFile, Collection<Path> sourcePaths) {
45-
this(ga, artifactFile, sourcePaths, null, null);
44+
public JavadocModule(String gav, File artifactFile, Collection<Path> sourcePaths) {
45+
this(gav, artifactFile, sourcePaths, null, null);
4646
}
4747

4848
public JavadocModule(
49-
String ga,
49+
String gav,
5050
File artifactFile,
5151
Collection<Path> sourcePaths,
5252
JavaModuleDescriptor moduleDescriptor,
5353
ModuleNameSource moduleNameSource) {
54-
this.ga = ga;
54+
this.gav = gav;
5555
this.artifactFile = artifactFile;
5656
this.sourcePaths = sourcePaths;
5757
this.moduleDescriptor = moduleDescriptor;
5858
this.moduleNameSource = moduleNameSource;
5959
}
6060

61-
public String getGa() {
62-
return ga;
61+
public String getGav() {
62+
return gav;
6363
}
6464

6565
public Collection<Path> getSourcePaths() {

src/main/java/org/apache/maven/plugins/javadoc/resolver/ResourceResolver.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
import org.apache.maven.RepositoryUtils;
4040
import org.apache.maven.artifact.Artifact;
41+
import org.apache.maven.artifact.ArtifactUtils;
4142
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
4243
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
4344
import org.apache.maven.plugins.javadoc.AbstractJavadocMojo;
@@ -102,16 +103,15 @@ public List<JavadocBundle> resolveDependencyJavadocBundles(final SourceResolverC
102103
final Map<String, MavenProject> projectMap = new HashMap<>();
103104
if (config.reactorProjects() != null) {
104105
for (final MavenProject p : config.reactorProjects()) {
105-
projectMap.put(key(p.getGroupId(), p.getArtifactId()), p);
106+
projectMap.put(ArtifactUtils.key(p.getGroupId(), p.getArtifactId(), p.getVersion()), p);
106107
}
107108
}
108109

109110
final List<Artifact> artifacts = config.project().getTestArtifacts();
110111

111112
final List<Artifact> forResourceResolution = new ArrayList<>(artifacts.size());
112113
for (final Artifact artifact : artifacts) {
113-
final String key = key(artifact.getGroupId(), artifact.getArtifactId());
114-
final MavenProject p = projectMap.get(key);
114+
final MavenProject p = projectMap.get(ArtifactUtils.key(artifact));
115115
if (p != null) {
116116
bundles.addAll(resolveBundleFromProject(config, p, artifact));
117117
} else {
@@ -137,14 +137,14 @@ public Collection<JavadocModule> resolveDependencySourcePaths(final SourceResolv
137137
final Map<String, MavenProject> projectMap = new HashMap<>();
138138
if (config.reactorProjects() != null) {
139139
for (final MavenProject p : config.reactorProjects()) {
140-
projectMap.put(key(p.getGroupId(), p.getArtifactId()), p);
140+
projectMap.put(ArtifactUtils.key(p.getGroupId(), p.getArtifactId(), p.getVersion()), p);
141141
}
142142
}
143143

144144
final List<Artifact> artifacts = config.project().getTestArtifacts();
145145

146146
for (final Artifact artifact : artifacts) {
147-
final String key = key(artifact.getGroupId(), artifact.getArtifactId());
147+
final String key = ArtifactUtils.key(artifact);
148148
final MavenProject p = projectMap.get(key);
149149
if (p != null) {
150150
mappedDirs.add(new JavadocModule(key, artifact.getFile(), resolveFromProject(config, p, artifact)));
@@ -269,7 +269,7 @@ private JavadocModule resolveFromArtifact(final SourceResolverConfig config, fin
269269

270270
Collection<Path> sourcePaths = resolveAndUnpack(toResolve, config, SOURCE_VALID_CLASSIFIERS, true);
271271

272-
return new JavadocModule(key(artifact.getGroupId(), artifact.getArtifactId()), artifact.getFile(), sourcePaths);
272+
return new JavadocModule(ArtifactUtils.key(artifact), artifact.getFile(), sourcePaths);
273273
}
274274

275275
private org.eclipse.aether.artifact.Artifact createResourceArtifact(
@@ -377,8 +377,4 @@ private static Collection<Path> resolveFromProject(
377377

378378
return JavadocUtil.pruneDirs(reactorProject, dirs);
379379
}
380-
381-
private static String key(final String gid, final String aid) {
382-
return gid + ":" + aid;
383-
}
384380
}

0 commit comments

Comments
 (0)