Skip to content

Commit 2956e9d

Browse files
ChristianSchultegnodet
authored andcommitted
[MNG-4645] Move Central repo definition out of Maven's core so it can be more easily changed
1 parent 8b0bf37 commit 2956e9d

File tree

11 files changed

+129
-80
lines changed

11 files changed

+129
-80
lines changed

apache-maven/src/assembly/maven/conf/settings.xml

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ under the License.
4343
| values (values used when the setting is not specified) are provided.
4444
|
4545
|-->
46-
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
46+
<settings xmlns="http://maven.apache.org/SETTINGS/1.3.0"
4747
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
48-
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
48+
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.3.0 https://maven.apache.org/xsd/settings-1.3.0.xsd">
4949
<!-- localRepository
5050
| The path to the local repository maven will use to store artifacts.
5151
|
@@ -166,6 +166,38 @@ under the License.
166166
</mirror>
167167
</mirrors>
168168

169+
<!-- repositories
170+
| Specifies the list of default remote repositories that maven will search artifacts for.
171+
-->
172+
<repositories>
173+
<repository>
174+
<id>central</id>
175+
<name>Central Repository</name>
176+
<url>https://repo.maven.apache.org/maven2</url>
177+
<snapshots>
178+
<enabled>false</enabled>
179+
</snapshots>
180+
</repository>
181+
</repositories>
182+
183+
<!-- plugin repositories
184+
| Specifies the list of default remote repositories that maven will search plugins for.
185+
-->
186+
<pluginRepositories>
187+
<pluginRepository>
188+
<id>central</id>
189+
<name>Central Repository</name>
190+
<url>https://repo.maven.apache.org/maven2</url>
191+
<snapshots>
192+
<enabled>false</enabled>
193+
</snapshots>
194+
<releases>
195+
<updatePolicy>never</updatePolicy>
196+
</releases>
197+
</pluginRepository>
198+
</pluginRepositories>
199+
200+
169201
<!-- profiles
170202
| This is a list of profiles which can be activated in a variety of ways, and which can modify
171203
| the build process. Profiles provided in the settings.xml are intended to provide local machine-

api/maven-api-settings/pom.xml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ under the License.
5151
<goal>velocity</goal>
5252
</goals>
5353
<configuration>
54-
<version>2.0.0</version>
54+
<version>1.3.0</version>
5555
<velocityBasedir>${project.basedir}/../../src/mdo</velocityBasedir>
5656
<models>
5757
<model>src/main/mdo/settings.mdo</model>
@@ -64,6 +64,20 @@ under the License.
6464
</params>
6565
</configuration>
6666
</execution>
67+
<execution>
68+
<id>modello-site-docs</id>
69+
<goals>
70+
<goal>xdoc</goal>
71+
<goal>xsd</goal>
72+
</goals>
73+
<phase>generate-resources</phase>
74+
<configuration>
75+
<version>1.3.0</version>
76+
<models>
77+
<model>src/main/mdo/settings.mdo</model>
78+
</models>
79+
</configuration>
80+
</execution>
6781
</executions>
6882
</plugin>
6983
<plugin>

api/maven-api-settings/src/main/mdo/settings.mdo

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,39 @@
222222
<multiplicity>*</multiplicity>
223223
</association>
224224
</field>
225+
<field xdoc.separator="blank">
226+
<name>repositories</name>
227+
<version>1.3.0+</version>
228+
<description>
229+
<![CDATA[
230+
The lists of the remote repositories.
231+
]]>
232+
</description>
233+
<association>
234+
<type>Repository</type>
235+
<multiplicity>*</multiplicity>
236+
</association>
237+
</field>
238+
<field>
239+
<name>pluginRepositories</name>
240+
<version>1.3.0+</version>
241+
<description>
242+
<![CDATA[
243+
The lists of the remote repositories for discovering plugins.
244+
]]>
245+
</description>
246+
<association>
247+
<type>Repository</type>
248+
<multiplicity>*</multiplicity>
249+
</association>
250+
<comment>
251+
<![CDATA[
252+
This may be removed or relocated in the near
253+
future. It is undecided whether plugins really need a remote
254+
repository set of their own.
255+
]]>
256+
</comment>
257+
</field>
225258
<field xdoc.separator="blank">
226259
<name>profiles</name>
227260
<version>1.0.0+</version>
@@ -815,25 +848,14 @@
815848
<class java.clone="deep">
816849
<name>RepositoryBase</name>
817850
<version>1.0.0+</version>
851+
<superClass>IdentifiableBase</superClass>
818852
<description>
819853
<![CDATA[
820854
Repository contains the information needed
821855
for establishing connections with remote repository
822856
]]>
823857
</description>
824858
<fields>
825-
<field>
826-
<name>id</name>
827-
<version>1.0.0+</version>
828-
<required>true</required>
829-
<identifier>true</identifier>
830-
<description>
831-
<![CDATA[
832-
A unique identifier for a repository.
833-
]]>
834-
</description>
835-
<type>String</type>
836-
</field>
837859
<field>
838860
<name>name</name>
839861
<version>1.0.0+</version>

maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import java.util.HashMap;
2828
import java.util.List;
2929
import java.util.Map;
30-
import java.util.Set;
3130

3231
import org.apache.maven.artifact.InvalidRepositoryException;
3332
import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -83,10 +82,6 @@ public MavenExecutionRequest populateDefaults(MavenExecutionRequest request)
8382

8483
populateDefaultPluginGroups(request);
8584

86-
injectDefaultRepositories(request);
87-
88-
injectDefaultPluginRepositories(request);
89-
9085
return request;
9186
}
9287

@@ -99,32 +94,6 @@ private void populateDefaultPluginGroups(MavenExecutionRequest request) {
9994
request.addPluginGroup("org.codehaus.mojo");
10095
}
10196

102-
private void injectDefaultRepositories(MavenExecutionRequest request)
103-
throws MavenExecutionRequestPopulationException {
104-
Set<String> definedRepositories = repositorySystem.getRepoIds(request.getRemoteRepositories());
105-
106-
if (!definedRepositories.contains(MavenRepositorySystem.DEFAULT_REMOTE_REPO_ID)) {
107-
try {
108-
request.addRemoteRepository(repositorySystem.createDefaultRemoteRepository(request));
109-
} catch (Exception e) {
110-
throw new MavenExecutionRequestPopulationException("Cannot create default remote repository.", e);
111-
}
112-
}
113-
}
114-
115-
private void injectDefaultPluginRepositories(MavenExecutionRequest request)
116-
throws MavenExecutionRequestPopulationException {
117-
Set<String> definedRepositories = repositorySystem.getRepoIds(request.getPluginArtifactRepositories());
118-
119-
if (!definedRepositories.contains(MavenRepositorySystem.DEFAULT_REMOTE_REPO_ID)) {
120-
try {
121-
request.addPluginArtifactRepository(repositorySystem.createDefaultRemoteRepository(request));
122-
} catch (Exception e) {
123-
throw new MavenExecutionRequestPopulationException("Cannot create default remote repository.", e);
124-
}
125-
}
126-
}
127-
12897
private void localRepository(MavenExecutionRequest request) throws MavenExecutionRequestPopulationException {
12998
// ------------------------------------------------------------------------
13099
// Local Repository

maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import static org.junit.jupiter.api.Assertions.assertNotNull;
4444
import static org.junit.jupiter.api.Assertions.assertNull;
4545
import static org.junit.jupiter.api.Assertions.assertThrows;
46+
import static org.junit.jupiter.api.Assertions.assertTrue;
4647
import static org.junit.jupiter.api.Assertions.fail;
4748

4849
class DefaultMavenProjectBuilderTest extends AbstractMavenProjectTestCase {
@@ -133,10 +134,10 @@ void testBuildStubModelForMissingRemotePom() throws Exception {
133134
assertNotNull(project.getArtifactId());
134135

135136
assertNotNull(project.getRemoteArtifactRepositories());
136-
assertFalse(project.getRemoteArtifactRepositories().isEmpty());
137+
assertTrue(project.getRemoteArtifactRepositories().isEmpty());
137138

138139
assertNotNull(project.getPluginArtifactRepositories());
139-
assertFalse(project.getPluginArtifactRepositories().isEmpty());
140+
assertTrue(project.getPluginArtifactRepositories().isEmpty());
140141

141142
assertNull(project.getParent());
142143
assertNull(project.getParentArtifact());

maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ void testExecutionConfigurationSubcollections() throws Exception {
575575
@Test
576576
void testMultipleRepositories() throws Exception {
577577
PomTestWrapper pom = buildPom("multiple-repos/sub");
578-
assertEquals(3, ((List<?>) pom.getValue("repositories")).size());
578+
assertEquals(2, ((List<?>) pom.getValue("repositories")).size());
579579
}
580580

581581
/** MNG-3965 */
@@ -1371,12 +1371,10 @@ private void testCompleteModel(PomTestWrapper pom) throws Exception {
13711371
assertEquals("org.apache.maven.its", pom.getValue("dependencies[1]/exclusions[1]/groupId"));
13721372
assertEquals("excluded-dep", pom.getValue("dependencies[1]/exclusions[1]/artifactId"));
13731373

1374-
assertEquals(2, ((List<?>) pom.getValue("repositories")).size());
1374+
assertEquals(1, ((List<?>) pom.getValue("repositories")).size());
13751375
assertEquals("project-remote-repo", pom.getValue("repositories[1]/id"));
13761376
assertEquals("https://project.url/remote", pom.getValue("repositories[1]/url"));
13771377
assertEquals("repo", pom.getValue("repositories[1]/name"));
1378-
assertEquals(MavenRepositorySystem.DEFAULT_REMOTE_REPO_ID, pom.getValue("repositories[2]/id"));
1379-
assertEquals(MavenRepositorySystem.DEFAULT_REMOTE_REPO_URL, pom.getValue("repositories[2]/url"));
13801378

13811379
assertEquals("test", pom.getValue("build/defaultGoal"));
13821380
assertEquals("coreit", pom.getValue("build/finalName"));

maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,22 @@ private MavenExecutionRequest populateFromSettings(MavenExecutionRequest request
201201
request.addMirror(mirror);
202202
}
203203

204+
for (Repository remoteRepository : settings.getRepositories()) {
205+
try {
206+
request.addRemoteRepository(MavenRepositorySystem.buildArtifactRepository(remoteRepository));
207+
} catch (InvalidRepositoryException e) {
208+
// do nothing for now
209+
}
210+
}
211+
212+
for (Repository pluginRepository : settings.getPluginRepositories()) {
213+
try {
214+
request.addPluginArtifactRepository(MavenRepositorySystem.buildArtifactRepository(pluginRepository));
215+
} catch (InvalidRepositoryException e) {
216+
// do nothing for now
217+
}
218+
}
219+
204220
request.setActiveProfiles(settings.getActiveProfiles());
205221

206222
for (Profile rawProfile : settings.getProfiles()) {

maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,6 @@ under the License.
2828
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
2929
</properties>
3030

31-
<repositories>
32-
<repository>
33-
<id>central</id>
34-
<name>Maven Central Repository</name>
35-
<url>https://repo.maven.apache.org/maven2</url>
36-
<layout>default</layout>
37-
<snapshots>
38-
<enabled>false</enabled>
39-
</snapshots>
40-
</repository>
41-
</repositories>
42-
43-
<pluginRepositories>
44-
<pluginRepository>
45-
<id>central</id>
46-
<name>Maven Central Repository</name>
47-
<url>https://repo.maven.apache.org/maven2</url>
48-
<layout>default</layout>
49-
<snapshots>
50-
<enabled>false</enabled>
51-
</snapshots>
52-
<releases>
53-
<updatePolicy>never</updatePolicy>
54-
</releases>
55-
</pluginRepository>
56-
</pluginRepositories>
57-
5831
<build>
5932
<directory>${project.basedir}/target</directory>
6033
<outputDirectory>${project.build.directory}/classes</outputDirectory>

maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232

3333
import org.apache.maven.building.FileSource;
3434
import org.apache.maven.building.Source;
35+
import org.apache.maven.settings.Repository;
36+
import org.apache.maven.settings.RepositoryPolicy;
3537
import org.apache.maven.settings.Settings;
3638
import org.apache.maven.settings.TrackableBase;
3739
import org.apache.maven.settings.io.SettingsParseException;
@@ -97,6 +99,26 @@ public SettingsBuildingResult build(SettingsBuildingRequest request) throws Sett
9799

98100
settingsMerger.merge(userSettings, globalSettings, TrackableBase.GLOBAL_LEVEL);
99101

102+
// If no repository is defined in the user/global settings,
103+
// it means that we have "old" settings (as those are new in 4.0)
104+
// so add central to the computed settings for backward compatibility.
105+
if (userSettings.getRepositories().isEmpty()
106+
&& userSettings.getPluginRepositories().isEmpty()) {
107+
Repository central = new Repository();
108+
central.setId("central");
109+
central.setName("Central Repository");
110+
central.setUrl("https://repo.maven.apache.org/maven2");
111+
RepositoryPolicy disabledPolicy = new RepositoryPolicy();
112+
disabledPolicy.setEnabled(false);
113+
central.setSnapshots(disabledPolicy);
114+
userSettings.getRepositories().add(central);
115+
central = central.clone();
116+
RepositoryPolicy updateNeverPolicy = new RepositoryPolicy();
117+
disabledPolicy.setUpdatePolicy("never");
118+
central.setReleases(updateNeverPolicy);
119+
userSettings.getPluginRepositories().add(central);
120+
}
121+
100122
problems.setSource("");
101123

102124
userSettings = interpolate(userSettings, request, problems);

maven-settings-builder/src/main/java/org/apache/maven/settings/merge/MavenSettingsMerger.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public void merge(Settings dominant, Settings recessive, String recessiveSourceL
8888
shallowMergeById(dominant.getServers(), recessive.getServers(), recessiveSourceLevel);
8989
shallowMergeById(dominant.getProxies(), recessive.getProxies(), recessiveSourceLevel);
9090
shallowMergeById(dominant.getProfiles(), recessive.getProfiles(), recessiveSourceLevel);
91+
shallowMergeById(dominant.getRepositories(), recessive.getRepositories(), recessiveSourceLevel);
92+
shallowMergeById(dominant.getPluginRepositories(), recessive.getPluginRepositories(), recessiveSourceLevel);
9193
}
9294

9395
/**

0 commit comments

Comments
 (0)