Skip to content

Commit 48b1fb4

Browse files
committed
[TP] Update to Archetype 3.3.1 and unify archetypes OSGi metadata
- Adapt to API changes in archetype-common - Updating to Archetype 3.3. allows to remove the 'maven-artifact-transfer' dependency.
1 parent 92a6765 commit 48b1fb4

File tree

5 files changed

+52
-75
lines changed

5 files changed

+52
-75
lines changed

m2e-core-tests

org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-SymbolicName: org.eclipse.m2e.core.ui;singleton:=true
4-
Bundle-Version: 2.1.0.qualifier
4+
Bundle-Version: 2.1.100.qualifier
55
Bundle-RequiredExecutionEnvironment: JavaSE-21
66
Bundle-Name: %Bundle-Name
77
Bundle-Vendor: %Bundle-Vendor
@@ -48,7 +48,6 @@ Import-Package: org.apache.maven.archetype.catalog;provider=m2e;version="[3.2.1,
4848
org.apache.maven.archetype.exception;provider=m2e;version="[3.2.1,4.0.0)",
4949
org.apache.maven.archetype.metadata;provider=m2e;version="[3.2.1,4.0.0)",
5050
org.apache.maven.archetype.source;provider=m2e;version="[3.2.1,4.0.0)",
51-
org.apache.maven.shared.transfer.artifact;provider=m2e;version="[0.13.1,1.0.0)",
5251
org.eclipse.compare.rangedifferencer,
5352
org.eclipse.ltk.core.refactoring,
5453
org.slf4j;version="[1.7.0,3.0.0)"

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

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
package org.eclipse.m2e.core.ui.internal.archetype;
1515

16+
import java.io.File;
1617
import java.io.InputStream;
1718
import java.net.URI;
1819
import java.net.URL;
@@ -24,6 +25,7 @@
2425
import org.slf4j.Logger;
2526
import org.slf4j.LoggerFactory;
2627

28+
import org.eclipse.aether.repository.RemoteRepository;
2729
import org.eclipse.core.runtime.CoreException;
2830
import org.eclipse.core.runtime.Status;
2931
import org.eclipse.osgi.util.NLS;
@@ -34,9 +36,6 @@
3436
import org.apache.maven.archetype.source.ArchetypeDataSource;
3537
import org.apache.maven.archetype.source.ArchetypeDataSourceException;
3638
import org.apache.maven.archetype.source.RemoteCatalogArchetypeDataSource;
37-
import org.apache.maven.artifact.repository.ArtifactRepository;
38-
import org.apache.maven.artifact.repository.MavenArtifactRepository;
39-
import org.apache.maven.project.ProjectBuildingRequest;
4039

4140
import org.eclipse.m2e.core.embedder.IMaven;
4241
import org.eclipse.m2e.core.embedder.IMavenExecutionContext;
@@ -111,7 +110,7 @@ public static class InternalCatalogFactory extends ArchetypeCatalogFactory {
111110
@Override
112111
public ArchetypeCatalog getArchetypeCatalog() {
113112
try {
114-
return source.getArchetypeCatalog(null);
113+
return source.getArchetypeCatalog(null, null);
115114
} catch(ArchetypeDataSourceException e) {
116115
return new ArchetypeCatalog();
117116
}
@@ -137,9 +136,8 @@ public static class DefaultLocalCatalogFactory extends ArchetypeCatalogFactory {
137136
@Override
138137
public ArchetypeCatalog getArchetypeCatalog() throws CoreException {
139138
return maven.createExecutionContext().execute((ctx, m) -> {
140-
ProjectBuildingRequest buildingRequest = ctx.newProjectBuildingRequest();
141139
try {
142-
return source.getArchetypeCatalog(buildingRequest);
140+
return source.getArchetypeCatalog(ctx.getRepositorySession(), ArchetypePlugin.getRemoteRepositories(ctx));
143141
} catch(ArchetypeDataSourceException e) {
144142
return new ArchetypeCatalog();
145143
}
@@ -173,14 +171,10 @@ public ArchetypeCatalog getArchetypeCatalog() throws CoreException {
173171
if(catalog == null) {
174172
//local but not embedded catalog
175173
IMavenExecutionContext context = maven.createExecutionContext();
176-
ArtifactRepository localRepository = new MavenArtifactRepository();
177-
localRepository.setUrl(getLocalRepositoryURL());
178-
context.getExecutionRequest().setLocalRepository(localRepository);
174+
context.getExecutionRequest().setLocalRepositoryPath(getLocalRepositoryPath());
179175
return context.execute((ctx, m) -> {
180-
ProjectBuildingRequest buildingRequest = ctx.newProjectBuildingRequest();
181-
buildingRequest.setLocalRepository(localRepository);
182176
try {
183-
return source.getArchetypeCatalog(buildingRequest);
177+
return source.getArchetypeCatalog(ctx.getRepositorySession(), ArchetypePlugin.getRemoteRepositories(ctx));
184178
} catch(ArchetypeDataSourceException e) {
185179
return new ArchetypeCatalog();
186180
}
@@ -189,22 +183,22 @@ public ArchetypeCatalog getArchetypeCatalog() throws CoreException {
189183
return catalog;
190184
}
191185

192-
private String getLocalRepositoryURL() {
186+
private File getLocalRepositoryPath() {
193187
Path path;
194188
try { // First try to use the id as a path, then as a URI else as it is
195189
path = Path.of(getId());
196190
} catch(Exception e1) {
197191
try {
198192
path = Path.of(new URI(getId()));
199193
} catch(Exception e2) {
200-
return getId();
194+
throw new IllegalStateException("Illegal repository path: " + getId());
201195
}
202196
}
203197
path = path.toAbsolutePath();
204198
if(Files.isRegularFile(path)) {
205199
path = path.getParent();
206200
}
207-
return path.toUri().toString();
201+
return path.toFile();
208202
}
209203

210204
private ArchetypeCatalog getEmbeddedCatalog() throws CoreException {
@@ -281,13 +275,12 @@ public ArchetypeCatalog getArchetypeCatalog() throws CoreException {
281275
final String remoteUrl = url;
282276

283277
ArchetypeCatalog catalog = maven.createExecutionContext().execute((ctx, m) -> {
284-
ProjectBuildingRequest buildingRequest = ctx.newProjectBuildingRequest();
285278
try {
286-
ArtifactRepository archeTypeRepo = new MavenArtifactRepository();
287-
archeTypeRepo.setUrl(remoteUrl);
288-
archeTypeRepo.setId(RemoteCatalogArchetypeDataSource.ARCHETYPE_REPOSITORY_ID);
289-
buildingRequest.getRemoteRepositories().add(archeTypeRepo);
290-
return source.getArchetypeCatalog(buildingRequest);
279+
RemoteRepository archeTypeRepo = new RemoteRepository.Builder(
280+
RemoteCatalogArchetypeDataSource.ARCHETYPE_REPOSITORY_ID, "", remoteUrl).build();
281+
List<RemoteRepository> remoteRepositories = new ArrayList<>(ArchetypePlugin.getRemoteRepositories(ctx));
282+
remoteRepositories.add(archeTypeRepo);
283+
return source.getArchetypeCatalog(ctx.getRepositorySession(), remoteRepositories);
291284
} catch(ArchetypeDataSourceException e) {
292285
return new ArchetypeCatalog();
293286
}

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

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import com.google.inject.AbstractModule;
3737
import com.google.inject.Module;
3838

39+
import org.eclipse.aether.repository.RemoteRepository;
3940
import org.eclipse.core.runtime.Assert;
4041
import org.eclipse.core.runtime.CoreException;
4142
import org.eclipse.core.runtime.IProgressMonitor;
@@ -50,17 +51,17 @@
5051
import org.codehaus.plexus.classworlds.ClassWorld;
5152
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
5253

54+
import org.apache.maven.RepositoryUtils;
5355
import org.apache.maven.archetype.catalog.Archetype;
5456
import org.apache.maven.archetype.common.ArchetypeArtifactManager;
5557
import org.apache.maven.archetype.exception.UnknownArchetype;
5658
import org.apache.maven.archetype.metadata.ArchetypeDescriptor;
5759
import org.apache.maven.archetype.metadata.RequiredProperty;
5860
import org.apache.maven.archetype.source.ArchetypeDataSource;
5961
import org.apache.maven.archetype.source.ArchetypeDataSourceException;
60-
import org.apache.maven.artifact.repository.ArtifactRepository;
61-
import org.apache.maven.project.ProjectBuildingRequest;
6262

6363
import org.eclipse.m2e.core.embedder.IMaven;
64+
import org.eclipse.m2e.core.embedder.IMavenExecutionContext;
6465
import org.eclipse.m2e.core.internal.MavenPluginActivator;
6566
import org.eclipse.m2e.core.project.IArchetype;
6667
import org.eclipse.m2e.core.ui.internal.M2EUIPluginActivator;
@@ -114,6 +115,7 @@ protected void configure() {
114115
.setClassWorld(new ClassWorld("plexus.core", ArchetypeArtifactManager.class.getClassLoader())) //$NON-NLS-1$
115116
.setClassPathScanning(PlexusConstants.SCANNING_INDEX) //
116117
.setAutoWiring(true) //
118+
.setJSR250Lifecycle(true) //
117119
.setName("plexus"); //$NON-NLS-1$
118120
container = new DefaultPlexusContainer(cc, logginModule);
119121
archetypeArtifactManager = container.lookup(ArchetypeArtifactManager.class);
@@ -219,36 +221,33 @@ public List<RequiredProperty> getRequiredProperties(IArchetype archetype, IProgr
219221
final String artifactId = archetype.getArtifactId();
220222
final String version = archetype.getVersion();
221223

222-
final List<ArtifactRepository> repositories = new ArrayList<>(maven.getArtifactRepositories());
223-
224224
return maven.createExecutionContext().execute((context, monitor1) -> {
225-
ArtifactRepository localRepository = context.getLocalRepository();
226-
if(archetypeArtifactManager.isFileSetArchetype(groupId, artifactId, version, null, localRepository, repositories,
227-
context.newProjectBuildingRequest())) {
228-
ArchetypeDescriptor descriptor;
229-
try {
230-
descriptor = archetypeArtifactManager.getFileSetArchetypeDescriptor(groupId, artifactId, version, null,
231-
localRepository, repositories, context.newProjectBuildingRequest());
232-
} catch(UnknownArchetype ex) {
233-
throw new CoreException(Status.error("UnknownArchetype", ex));
225+
try {
226+
File archetypeFile = archetypeArtifactManager.getArchetypeFile(groupId, artifactId, version,
227+
getRemoteRepositories(context), context.getRepositorySession());
228+
if(archetypeArtifactManager.isFileSetArchetype(archetypeFile)) {
229+
ArchetypeDescriptor descriptor = archetypeArtifactManager.getFileSetArchetypeDescriptor(archetypeFile);
230+
return descriptor.getRequiredProperties();
234231
}
235-
return descriptor.getRequiredProperties();
232+
return null;
233+
} catch(UnknownArchetype ex) {
234+
throw new CoreException(Status.error("UnknownArchetype", ex));
236235
}
237-
return null;
238236
}, monitor);
239237
}
240238

241239
public void updateLocalCatalog(Archetype archetype) throws CoreException {
242240
maven.createExecutionContext().execute((ctx, m) -> {
243-
ProjectBuildingRequest request = ctx.newProjectBuildingRequest();
244241
try {
245242
ArchetypeDataSource source = archetypeDataSourceMap.get("catalog");
246-
247-
source.updateCatalog(request, archetype);
243+
source.updateCatalog(ctx.getRepositorySession(), archetype);
248244
} catch(ArchetypeDataSourceException e) {
249245
}
250246
return null;
251247
}, null);
252248
}
253249

250+
static List<RemoteRepository> getRemoteRepositories(IMavenExecutionContext ctx) throws CoreException {
251+
return RepositoryUtils.toRepos(ctx.getExecutionRequest().getRemoteRepositories());
252+
}
254253
}

target-platform/target-platform.target

Lines changed: 19 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -133,60 +133,46 @@
133133
</repository>
134134
</repositories>
135135
</location>
136-
<location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" label="Maven-archetype Common" missingManifest="generate" type="Maven">
136+
<location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" label="Maven-archetype" missingManifest="generate" type="Maven">
137137
<dependencies>
138138
<dependency>
139139
<groupId>org.apache.maven.archetype</groupId>
140140
<artifactId>archetype-common</artifactId>
141-
<version>3.2.1</version>
141+
<version>3.3.1</version>
142142
<type>jar</type>
143143
</dependency>
144-
</dependencies>
145-
<instructions><![CDATA[
146-
Bundle-Name: M2Eclipse's ${mvnArtifactId}
147-
version: ${version_cleanup;${mvnVersion}}
148-
Bundle-SymbolicName: org.eclipse.m2e.archetype.common
149-
# Change the following value to '${version}' once the next minor version of archetype is availble
150-
Bundle-Version: ${versionmask;==;${version}}.104
151-
Bundle-Vendor: Eclipse.org - m2e
152-
Eclipse-ExtensibleAPI: true
153-
Export-Package: META-INF.plexus;-noimport:=true;x-internal:=true, \
154-
org.apache.maven.archetype.*;provider=m2e;mandatory:=provider;version="${version}";x-friends:="org.eclipse.m2e.core.ui"
155-
Require-Bundle: org.eclipse.m2e.maven.runtime;bundle-version="[3.8.0,4.0.0)",com.ibm.icu
156-
Import-Package: org.jdom2*
157-
]]></instructions>
158-
</location>
159-
<location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" label="Maven-archetype" missingManifest="generate" type="Maven">
160-
<dependencies>
161144
<dependency>
162145
<groupId>org.apache.maven.archetype</groupId>
163146
<artifactId>archetype-catalog</artifactId>
164-
<version>3.2.1</version>
147+
<version>3.3.1</version>
165148
<type>jar</type>
166149
</dependency>
167150
<dependency>
168151
<groupId>org.apache.maven.archetype</groupId>
169152
<artifactId>archetype-descriptor</artifactId>
170-
<version>3.2.1</version>
171-
<type>jar</type>
172-
</dependency>
173-
<dependency>
174-
<groupId>org.apache.maven.shared</groupId>
175-
<artifactId>maven-artifact-transfer</artifactId>
176-
<version>0.13.1</version>
153+
<version>3.3.1</version>
177154
<type>jar</type>
178155
</dependency>
179156
</dependencies>
180157
<instructions><![CDATA[
181-
Bundle-Name: M2Eclipse's ${mvnArtifactId}
158+
# Create OSGi metadata with only the use-cases of m2e in mind, potentially preventing other use-cases due to reduced dependencies.
159+
isHostBundle: ${is;${mvnArtifactId};archetype-common}
182160
version: ${version_cleanup;${mvnVersion}}
161+
Bundle-Name: M2Eclipse's ${mvnArtifactId}
183162
Bundle-SymbolicName: org.eclipse.m2e.archetype.${replacestring;${mvnArtifactId};archetype-}
184-
# Change the following value to '${version}' once the next minor version of archetype is availble
185-
Bundle-Version: ${version}.2
163+
Bundle-Version: ${version}
186164
Bundle-Vendor: Eclipse.org - m2e
187-
Fragment-Host: org.eclipse.m2e.archetype.common;bundle-version="${range;[===,+);3.2.104}"
188-
Export-Package: org.apache.maven.*;-noimport:=true;provider=m2e;mandatory:=provider;version="${version}";x-friends:="org.eclipse.m2e.core.ui"
189-
Import-Package: !*
165+
Fragment-Host: org.eclipse.m2e.archetype.common;bundle-version="${range;[===,===];${version}}"
166+
-removeheaders ${if;isHostBundle;Fragment-Host;}
167+
Eclipse-ExtensibleAPI: true
168+
Require-Bundle: \
169+
org.eclipse.m2e.maven.runtime;bundle-version="[3.8.0,4.0.0)", \
170+
com.ibm.icu
171+
Import-Package: org.jdom2*
172+
Export-Package: \
173+
META-INF.plexus;-noimport:=true;x-internal:=true, \
174+
org.apache.maven.archetype.*;provider=m2e;mandatory:=provider;version="${version}";x-friends:="org.eclipse.m2e.core.ui", \
175+
org.apache.maven.*;-noimport:=true;provider=m2e;mandatory:=provider;version="${version}";x-friends:="org.eclipse.m2e.core.ui"
190176
]]></instructions>
191177
</location>
192178
<location type="Target" uri="file:${project_loc:/m2e-core}/target-platform/m2e-runtimes.target"/>

0 commit comments

Comments
 (0)