Skip to content

Commit eb681cb

Browse files
laeubiHannesWell
andcommitted
Use Sisu/Guice directly for archetype component lookup
to replace plexus container. Co-authored-by: Hannes Wellmann <[email protected]>
1 parent 92ab829 commit eb681cb

File tree

3 files changed

+44
-25
lines changed

3 files changed

+44
-25
lines changed

org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/archetype/ArchetypePlugin.java

+37-20
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Map;
2727
import java.util.stream.Collectors;
2828

29+
import org.osgi.framework.FrameworkUtil;
2930
import org.osgi.service.component.annotations.Activate;
3031
import org.osgi.service.component.annotations.Component;
3132
import org.osgi.service.component.annotations.Deactivate;
@@ -34,22 +35,28 @@
3435
import org.slf4j.LoggerFactory;
3536

3637
import com.google.inject.AbstractModule;
38+
import com.google.inject.Guice;
39+
import com.google.inject.Injector;
40+
import com.google.inject.Key;
3741
import com.google.inject.Module;
42+
import com.google.inject.TypeLiteral;
43+
import com.google.inject.util.Modules;
44+
import com.google.inject.util.Types;
3845

46+
import org.eclipse.aether.RepositorySystem;
3947
import org.eclipse.aether.repository.RemoteRepository;
4048
import org.eclipse.core.runtime.Assert;
4149
import org.eclipse.core.runtime.CoreException;
4250
import org.eclipse.core.runtime.IProgressMonitor;
4351
import org.eclipse.core.runtime.NullProgressMonitor;
4452
import org.eclipse.core.runtime.Status;
53+
import org.eclipse.sisu.space.BeanScanning;
54+
import org.eclipse.sisu.space.BundleClassSpace;
55+
import org.eclipse.sisu.space.ClassSpace;
56+
import org.eclipse.sisu.space.SpaceModule;
57+
import org.eclipse.sisu.wire.WireModule;
4558

46-
import org.codehaus.plexus.ContainerConfiguration;
47-
import org.codehaus.plexus.DefaultContainerConfiguration;
48-
import org.codehaus.plexus.DefaultPlexusContainer;
49-
import org.codehaus.plexus.PlexusConstants;
50-
import org.codehaus.plexus.PlexusContainerException;
51-
import org.codehaus.plexus.classworlds.ClassWorld;
52-
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
59+
import org.codehaus.plexus.logging.LogEnabled;
5360

5461
import org.apache.maven.RepositoryUtils;
5562
import org.apache.maven.archetype.catalog.Archetype;
@@ -59,6 +66,7 @@
5966
import org.apache.maven.archetype.metadata.RequiredProperty;
6067
import org.apache.maven.archetype.source.ArchetypeDataSource;
6168
import org.apache.maven.archetype.source.ArchetypeDataSourceException;
69+
import org.apache.maven.cli.logging.Slf4jLogger;
6270

6371
import org.eclipse.m2e.core.embedder.IMaven;
6472
import org.eclipse.m2e.core.embedder.IMavenExecutionContext;
@@ -95,30 +103,40 @@ public class ArchetypePlugin {
95103

96104
private Map<String, ArchetypeDataSource> archetypeDataSourceMap;
97105

98-
private DefaultPlexusContainer container;
99-
100106
public ArchetypePlugin() {
101107
this.configFile = new File(MavenPluginActivator.getDefault().getStateLocation().toFile(),
102108
M2EUIPluginActivator.PREFS_ARCHETYPES);
103109
this.writer = new ArchetypeCatalogsWriter();
104110
}
105111

106112
@Activate
107-
void activate() throws PlexusContainerException, ComponentLookupException {
108-
final Module logginModule = new AbstractModule() {
113+
void activate() {
114+
Module localBindings = new AbstractModule() {
109115
@Override
110116
protected void configure() {
111117
bind(ILoggerFactory.class).toInstance(LoggerFactory.getILoggerFactory());
118+
try {
119+
bind(RepositorySystem.class).toInstance(MavenPluginActivator.getDefault().getRepositorySystem());
120+
} catch(CoreException ex) {
121+
ex.printStackTrace();
122+
}
112123
}
113124
};
114-
final ContainerConfiguration cc = new DefaultContainerConfiguration() //
115-
.setClassWorld(new ClassWorld("plexus.core", ArchetypeArtifactManager.class.getClassLoader())) //$NON-NLS-1$
116-
.setClassPathScanning(PlexusConstants.SCANNING_INDEX) //
117-
.setAutoWiring(true) //
118-
.setName("plexus"); //$NON-NLS-1$
119-
container = new DefaultPlexusContainer(cc, logginModule);
120-
archetypeArtifactManager = container.lookup(ArchetypeArtifactManager.class);
121-
archetypeDataSourceMap = container.lookupMap(ArchetypeDataSource.class);
125+
ClassSpace space = new BundleClassSpace(FrameworkUtil.getBundle(ArchetypeArtifactManager.class));
126+
WireModule wireModule = new WireModule(new SpaceModule(space, BeanScanning.INDEX));
127+
Injector injector = Guice.createInjector(Modules.override(wireModule).with(localBindings));
128+
@SuppressWarnings("unchecked")
129+
TypeLiteral<Map<String, ArchetypeDataSource>> mapOfDataSourcesType = (TypeLiteral<Map<String, ArchetypeDataSource>>) TypeLiteral
130+
.get(Types.mapOf(String.class, ArchetypeDataSource.class));
131+
archetypeArtifactManager = injector.getInstance(ArchetypeArtifactManager.class);
132+
archetypeDataSourceMap = injector.getInstance(Key.get(mapOfDataSourcesType));
133+
134+
if(archetypeArtifactManager instanceof LogEnabled logEnabled) {
135+
logEnabled.enableLogging(new Slf4jLogger(LoggerFactory.getLogger(archetypeArtifactManager.getClass())));
136+
}
137+
archetypeDataSourceMap.values().stream().filter(LogEnabled.class::isInstance).map(LogEnabled.class::cast)
138+
.forEach(d -> d.enableLogging(new Slf4jLogger(LoggerFactory.getLogger(d.getClass()))));
139+
122140
addArchetypeCatalogFactory(
123141
new ArchetypeCatalogFactory.InternalCatalogFactory(archetypeDataSourceMap.get("internal-catalog")));
124142
addArchetypeCatalogFactory(
@@ -136,7 +154,6 @@ protected void configure() {
136154
@Deactivate
137155
void shutdown() throws IOException {
138156
saveCatalogs();
139-
container.dispose();
140157
}
141158

142159
public LocalCatalogFactory newLocalCatalogFactory(String path, String description, boolean editable,

org.eclipse.m2e.maven.runtime/pom.xml

+6-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
</parent>
2222

2323
<artifactId>org.eclipse.m2e.maven.runtime</artifactId>
24-
<version>3.9.900-SNAPSHOT</version>
24+
<version>3.9.901-SNAPSHOT</version>
2525
<packaging>jar</packaging>
2626

2727
<name>M2E Embedded Maven Runtime (includes Incubating components)</name>
@@ -140,7 +140,7 @@
140140
<dependency>
141141
<groupId>org.slf4j</groupId>
142142
<artifactId>slf4j-api</artifactId>
143-
<version>2.0.16</version>
143+
<version>2.0.17</version><!--$NO-MVN-MAN-VER$-->
144144
<scope>provided</scope>
145145
</dependency>
146146
<dependency>
@@ -202,8 +202,10 @@
202202
org.slf4j.*;version="[1.7.31,3.0.0)",\
203203
javax.inject;version="[1.0.0,2.0.0)",\
204204
javax.annotation;version="[1.2.0,2.0.0)", \
205-
org.apache.commons.cli;version="[1.4.0,2.0.0)", \
206-
org.apache.commons.codec*
205+
org.apache.commons.cli;version="[1.4.0,2.0.0)",\
206+
org.apache.commons.codec*,\
207+
org.osgi.*,\
208+
207209
Require-Bundle: \
208210
com.google.guava;bundle-version="32.2.1"
209211

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
<dependency>
100100
<groupId>org.eclipse.m2e</groupId>
101101
<artifactId>org.eclipse.m2e.maven.runtime</artifactId>
102-
<version>3.9.900-SNAPSHOT</version>
102+
<version>3.9.901-SNAPSHOT</version>
103103
</dependency>
104104
</dependencies>
105105

0 commit comments

Comments
 (0)