Skip to content

Commit 11badb7

Browse files
authored
Fix for polyglot when in lib/ext (#319)
Originally polyglot worked when loaded via .mvn/extensions.xml but not when created custom distro (put in lib/ext). Reason was simple, as Maven core beans were not overridden when in "flat space", that causes lib/ext, unlike mvn extensions. To make it work from lib/ext (when components are placed into maven core), following is needed: * DefaultProjectBuilder is "default" bean, hence we need to override it (using priority) * DefaultModelProcessor is trickier, it uses custom name (despite class name being Default) and uses Typed annotation. Essentially same thing, using priority makes polyglot component "prevail" as otherwise they are same ranked (non-default custom named components). * finally, do not extend component but use JSR330 capability to inject "exact" bean and just compose (possible as all used methods are public on replaced bean as well).
1 parent e9c3211 commit 11badb7

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

polyglot-common/src/main/java/org/sonatype/maven/polyglot/TeslaModelProcessor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
3333
import org.codehaus.plexus.util.FileUtils;
3434
import org.codehaus.plexus.util.IOUtil;
35+
import org.eclipse.sisu.Priority;
3536
import org.slf4j.Logger;
3637
import org.slf4j.LoggerFactory;
3738
import org.codehaus.plexus.util.ReaderFactory;
@@ -46,6 +47,7 @@
4647
//@Component(role = ModelProcessor.class, hint = "tesla-polyglot")
4748
@Singleton
4849
@Named
50+
@Priority(10)
4951
public class TeslaModelProcessor implements ModelProcessor {
5052

5153
private static final String DEFAULT_POM_FILE = "pom.xml";

polyglot-common/src/main/java/org/sonatype/maven/polyglot/TeslaProjectBuilder.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,37 +12,48 @@
1212
import org.apache.maven.model.building.ModelProblem;
1313
import org.apache.maven.model.building.ModelSource;
1414
import org.apache.maven.project.*;
15+
import org.eclipse.sisu.Priority;
16+
17+
import static java.util.Objects.requireNonNull;
1518

1619
@Singleton
1720
@Named
18-
public class TeslaProjectBuilder extends DefaultProjectBuilder {
21+
@Priority(10)
22+
public class TeslaProjectBuilder implements ProjectBuilder {
23+
24+
private final TeslaModelProcessor teslaModelProcessor;
25+
26+
private final DefaultProjectBuilder defaultProjectBuilder;
1927

2028
@Inject
21-
private TeslaModelProcessor teslaModelProcessor; // Must be named differently than the one in the superclass
29+
public TeslaProjectBuilder(TeslaModelProcessor teslaModelProcessor, DefaultProjectBuilder defaultProjectBuilder) {
30+
this.teslaModelProcessor = requireNonNull(teslaModelProcessor);
31+
this.defaultProjectBuilder = requireNonNull(defaultProjectBuilder);
32+
}
2233

2334
@Override
2435
public ProjectBuildingResult build(File pomFile, ProjectBuildingRequest request) throws ProjectBuildingException {
25-
return convert(super.build(pomFile, request));
36+
return convert(defaultProjectBuilder.build(pomFile, request));
2637
}
2738

2839
@Override
2940
public ProjectBuildingResult build(ModelSource modelSource, ProjectBuildingRequest request) throws ProjectBuildingException {
30-
return convert(super.build(modelSource, request));
41+
return convert(defaultProjectBuilder.build(modelSource, request));
3142
}
3243

3344
@Override
3445
public ProjectBuildingResult build(Artifact artifact, ProjectBuildingRequest request) throws ProjectBuildingException {
35-
return convert(super.build(artifact, request));
46+
return convert(defaultProjectBuilder.build(artifact, request));
3647
}
3748

3849
@Override
3950
public ProjectBuildingResult build(Artifact artifact, boolean allowStubModel, ProjectBuildingRequest request) throws ProjectBuildingException {
40-
return convert(super.build(artifact, allowStubModel, request));
51+
return convert(defaultProjectBuilder.build(artifact, allowStubModel, request));
4152
}
4253

4354
@Override
4455
public List<ProjectBuildingResult> build(List<File> pomFiles, boolean recursive, ProjectBuildingRequest request) throws ProjectBuildingException {
45-
List<ProjectBuildingResult> results = super.build(pomFiles, recursive, request);
56+
List<ProjectBuildingResult> results = defaultProjectBuilder.build(pomFiles, recursive, request);
4657
return results.stream().map(this::convert).collect(Collectors.toList());
4758
}
4859

0 commit comments

Comments
 (0)