Skip to content

Commit e5dee49

Browse files
HannesWelllaeubi
andcommitted
[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. Co-authored-by: Christoph Läubrich <[email protected]>
1 parent 66b65ce commit e5dee49

File tree

6 files changed

+73
-88
lines changed

6 files changed

+73
-88
lines changed

m2e-core-tests

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,17 @@ Require-Bundle: org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)",
4343
org.eclipse.ui,
4444
org.eclipse.ui.navigator,
4545
org.eclipse.debug.ui
46-
Import-Package: org.apache.maven.archetype.catalog;provider=m2e;version="[3.2.1,4.0.0)",
47-
org.apache.maven.archetype.catalog.io.xpp3;provider=m2e;version="[3.2.1,4.0.0)",
48-
org.apache.maven.archetype.common;provider=m2e;version="[3.2.1,4.0.0)",
49-
org.apache.maven.archetype.exception;provider=m2e;version="[3.2.1,4.0.0)",
50-
org.apache.maven.archetype.metadata;provider=m2e;version="[3.2.1,4.0.0)",
51-
org.apache.maven.archetype.source;provider=m2e;version="[3.2.1,4.0.0)",
52-
org.apache.maven.shared.transfer.artifact;provider=m2e;version="[0.13.1,1.0.0)",
46+
Import-Package: org.apache.maven.archetype.catalog;provider=m2e;version="[3.3.0,4.0.0)",
47+
org.apache.maven.archetype.catalog.io.xpp3;provider=m2e;version="[3.3.0,4.0.0)",
48+
org.apache.maven.archetype.common;provider=m2e;version="[3.3.0,4.0.0)",
49+
org.apache.maven.archetype.downloader;provider=m2e;version="[3.3.0,4.0.0)",
50+
org.apache.maven.archetype.exception;provider=m2e;version="[3.3.0,4.0.0)",
51+
org.apache.maven.archetype.metadata;provider=m2e;version="[3.3.0,4.0.0)",
52+
org.apache.maven.archetype.source;provider=m2e;version="[3.3.0,4.0.0)",
5353
org.eclipse.compare.rangedifferencer,
5454
org.eclipse.ltk.core.refactoring,
5555
org.slf4j;version="[1.7.0,3.0.0)"
5656
Service-Component: OSGI-INF/component.xml,
5757
OSGI-INF/org.eclipse.m2e.core.ui.internal.archetype.ArchetypeGenerator.xml,
5858
OSGI-INF/org.eclipse.m2e.core.ui.internal.archetype.ArchetypePlugin.xml
5959
Automatic-Module-Name: org.eclipse.m2e.core.ui
60-

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

Lines changed: 24 additions & 25 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,11 @@
2425
import org.slf4j.Logger;
2526
import org.slf4j.LoggerFactory;
2627

28+
import org.eclipse.aether.DefaultRepositorySystemSession;
29+
import org.eclipse.aether.repository.LocalRepository;
30+
import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
31+
import org.eclipse.aether.repository.RemoteRepository;
32+
import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
2733
import org.eclipse.core.runtime.CoreException;
2834
import org.eclipse.core.runtime.Status;
2935
import org.eclipse.osgi.util.NLS;
@@ -34,12 +40,8 @@
3440
import org.apache.maven.archetype.source.ArchetypeDataSource;
3541
import org.apache.maven.archetype.source.ArchetypeDataSourceException;
3642
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;
4043

4144
import org.eclipse.m2e.core.embedder.IMaven;
42-
import org.eclipse.m2e.core.embedder.IMavenExecutionContext;
4345
import org.eclipse.m2e.core.internal.Messages;
4446

4547

@@ -111,7 +113,7 @@ public static class InternalCatalogFactory extends ArchetypeCatalogFactory {
111113
@Override
112114
public ArchetypeCatalog getArchetypeCatalog() {
113115
try {
114-
return source.getArchetypeCatalog(null);
116+
return source.getArchetypeCatalog(null, null);
115117
} catch(ArchetypeDataSourceException e) {
116118
return new ArchetypeCatalog();
117119
}
@@ -137,9 +139,8 @@ public static class DefaultLocalCatalogFactory extends ArchetypeCatalogFactory {
137139
@Override
138140
public ArchetypeCatalog getArchetypeCatalog() throws CoreException {
139141
return maven.createExecutionContext().execute((ctx, m) -> {
140-
ProjectBuildingRequest buildingRequest = ctx.newProjectBuildingRequest();
141142
try {
142-
return source.getArchetypeCatalog(buildingRequest);
143+
return source.getArchetypeCatalog(ctx.getRepositorySession(), ArchetypePlugin.getRemoteRepositories(ctx));
143144
} catch(ArchetypeDataSourceException e) {
144145
return new ArchetypeCatalog();
145146
}
@@ -172,39 +173,38 @@ public ArchetypeCatalog getArchetypeCatalog() throws CoreException {
172173
ArchetypeCatalog catalog = getEmbeddedCatalog();
173174
if(catalog == null) {
174175
//local but not embedded catalog
175-
IMavenExecutionContext context = maven.createExecutionContext();
176-
ArtifactRepository localRepository = new MavenArtifactRepository();
177-
localRepository.setUrl(getLocalRepositoryURL());
178-
context.getExecutionRequest().setLocalRepository(localRepository);
179-
return context.execute((ctx, m) -> {
180-
ProjectBuildingRequest buildingRequest = ctx.newProjectBuildingRequest();
181-
buildingRequest.setLocalRepository(localRepository);
176+
File localRepositoryPath = getLocalRepositoryPath();
177+
return maven.createExecutionContext().execute((ctx, m) -> {
182178
try {
183-
return source.getArchetypeCatalog(buildingRequest);
184-
} catch(ArchetypeDataSourceException e) {
179+
var managerFactory = ctx.getComponentLookup().lookup(LocalRepositoryManagerFactory.class);
180+
DefaultRepositorySystemSession session = new DefaultRepositorySystemSession(ctx.getRepositorySession());
181+
session.setLocalRepositoryManager(
182+
managerFactory.newInstance(session, new LocalRepository(localRepositoryPath)));
183+
return source.getArchetypeCatalog(session, List.of());
184+
} catch(ArchetypeDataSourceException | NoLocalRepositoryManagerException e) {
185185
return new ArchetypeCatalog();
186186
}
187187
}, null);
188188
}
189189
return catalog;
190190
}
191191

192-
private String getLocalRepositoryURL() {
192+
private File getLocalRepositoryPath() {
193193
Path path;
194194
try { // First try to use the id as a path, then as a URI else as it is
195195
path = Path.of(getId());
196196
} catch(Exception e1) {
197197
try {
198198
path = Path.of(new URI(getId()));
199199
} catch(Exception e2) {
200-
return getId();
200+
return new File(getId());
201201
}
202202
}
203203
path = path.toAbsolutePath();
204204
if(Files.isRegularFile(path)) {
205205
path = path.getParent();
206206
}
207-
return path.toUri().toString();
207+
return path.toFile();
208208
}
209209

210210
private ArchetypeCatalog getEmbeddedCatalog() throws CoreException {
@@ -281,13 +281,12 @@ public ArchetypeCatalog getArchetypeCatalog() throws CoreException {
281281
final String remoteUrl = url;
282282

283283
ArchetypeCatalog catalog = maven.createExecutionContext().execute((ctx, m) -> {
284-
ProjectBuildingRequest buildingRequest = ctx.newProjectBuildingRequest();
285284
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);
285+
RemoteRepository archetypeRepo = new RemoteRepository.Builder(
286+
RemoteCatalogArchetypeDataSource.ARCHETYPE_REPOSITORY_ID, "", remoteUrl).build();
287+
List<RemoteRepository> remoteRepositories = new ArrayList<>(ArchetypePlugin.getRemoteRepositories(ctx));
288+
remoteRepositories.add(0, archetypeRepo);
289+
return source.getArchetypeCatalog(ctx.getRepositorySession(), remoteRepositories);
291290
} catch(ArchetypeDataSourceException e) {
292291
return new ArchetypeCatalog();
293292
}

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

Lines changed: 15 additions & 17 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;
@@ -219,36 +220,33 @@ public List<RequiredProperty> getRequiredProperties(IArchetype archetype, IProgr
219220
final String artifactId = archetype.getArtifactId();
220221
final String version = archetype.getVersion();
221222

222-
final List<ArtifactRepository> repositories = new ArrayList<>(maven.getArtifactRepositories());
223-
224223
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));
224+
try {
225+
File archetypeFile = archetypeArtifactManager.getArchetypeFile(groupId, artifactId, version,
226+
getRemoteRepositories(context), context.getRepositorySession());
227+
if(archetypeArtifactManager.isFileSetArchetype(archetypeFile)) {
228+
ArchetypeDescriptor descriptor = archetypeArtifactManager.getFileSetArchetypeDescriptor(archetypeFile);
229+
return descriptor.getRequiredProperties();
234230
}
235-
return descriptor.getRequiredProperties();
231+
} catch(UnknownArchetype ex) {
232+
throw new CoreException(Status.error("UnknownArchetype", ex));
236233
}
237234
return null;
238235
}, monitor);
239236
}
240237

241238
public void updateLocalCatalog(Archetype archetype) throws CoreException {
242239
maven.createExecutionContext().execute((ctx, m) -> {
243-
ProjectBuildingRequest request = ctx.newProjectBuildingRequest();
244240
try {
245241
ArchetypeDataSource source = archetypeDataSourceMap.get("catalog");
246-
247-
source.updateCatalog(request, archetype);
242+
source.updateCatalog(ctx.getRepositorySession(), archetype);
248243
} catch(ArchetypeDataSourceException e) {
249244
}
250245
return null;
251246
}, null);
252247
}
253248

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

org.eclipse.m2e.feature/feature.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@
3434
id="org.eclipse.m2e.archetype.descriptor"
3535
version="0.0.0"/>
3636

37-
<plugin
38-
id="org.eclipse.m2e.archetype.maven-artifact-transfer"
39-
version="0.0.0"/>
40-
4137
<plugin
4238
id="org.eclipse.m2e.model.edit"
4339
version="0.0.0"/>

target-platform/target-platform.target

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -133,60 +133,53 @@
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: \
172+
!groovy.*, \
173+
!*.velocity*, \
174+
!org.apache.commons.collections, \
175+
!org.apache.maven.shared.invoker, \
176+
org.apache.maven.*;provider=m2e, \
177+
org.eclipse.aether.*;provider=m2e, \
178+
org.codehaus.plexus.*;provider=m2e, \
179+
*
180+
Export-Package: \
181+
META-INF.sisu;-noimport:=true;x-internal:=true, \
182+
org.apache.maven.archetype.*;-noimport:=true;provider=m2e;mandatory:=provider;version="${version}";x-friends:="org.eclipse.m2e.core.ui"
190183
]]></instructions>
191184
</location>
192185
<location type="Target" uri="file:${project_loc:/m2e-core}/target-platform/m2e-runtimes.target"/>

0 commit comments

Comments
 (0)