Skip to content

Commit 14c6bc5

Browse files
authored
Fix: Remove javax.inject dependency (#1859)
As it was wrongly introduced in PM #1814. Core of resolver object graph declares javax.inject as optional, but the mentioned PR made it mandatory. Fixes #1858
1 parent 36df282 commit 14c6bc5

11 files changed

Lines changed: 163 additions & 78 deletions

File tree

maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/LegacyTrackingFileManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
*
5151
* @since 2.0.17
5252
* @see NamedLocksTrackingFileManager
53-
* @see TrackingFileManagerProvider
53+
* @see TrackingFileManagerSupplier
5454
*/
5555
public final class LegacyTrackingFileManager implements TrackingFileManager {
5656
private static final Logger LOGGER = LoggerFactory.getLogger(LegacyTrackingFileManager.class);

maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/NamedLocksTrackingFileManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
*
4747
* @since 2.0.17
4848
* @see LegacyTrackingFileManager
49-
* @see TrackingFileManagerProvider
49+
* @see TrackingFileManagerSupplier
5050
*/
5151
public final class NamedLocksTrackingFileManager implements TrackingFileManager {
5252
private static final Logger LOGGER = LoggerFactory.getLogger(NamedLocksTrackingFileManager.class);

maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManagerProvider.java

Lines changed: 6 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -23,74 +23,25 @@
2323
import javax.inject.Provider;
2424
import javax.inject.Singleton;
2525

26-
import java.util.HashMap;
27-
import java.util.Map;
28-
import java.util.concurrent.TimeUnit;
29-
30-
import org.eclipse.aether.ConfigurationProperties;
31-
import org.eclipse.aether.impl.NamedLockFactorySelector;
32-
import org.eclipse.aether.named.NamedLockFactory;
33-
import org.eclipse.aether.util.ConfigUtils;
26+
import static java.util.Objects.requireNonNull;
3427

3528
/**
36-
* Provides selected instance of {@link TrackingFileManager} implementation.
29+
* Bridges to {@link TrackingFileManagerSupplier} when in Guice/Sisu.
3730
*
3831
* @since 2.0.17
3932
*/
4033
@Singleton
4134
@Named
4235
public class TrackingFileManagerProvider implements Provider<TrackingFileManager> {
43-
public static final String CONFIG_PROPS_PREFIX = ConfigurationProperties.PREFIX_SYSTEM + "trackingFileManager.";
44-
45-
/**
46-
* Name of the tracking file manager to use. Supported values are "namedLocks" and "legacy". The latter should be
47-
* used if it is known, that local repository is simultaneously accessed by Maven 3.10+ and older Maven versions.
48-
* This decision happens early, during boot of the system, hence system properties can be used only as configuration
49-
* source.
50-
*
51-
* @configurationSource {@link System#getProperty(String, String)}
52-
* @configurationType {@link java.lang.String}
53-
* @configurationDefaultValue {@link #DEFAULT_TRACKING_FILE_MANAGER_NAME}
54-
*/
55-
public static final String CONFIG_PROP_TRACKING_FILE_MANAGER_NAME = CONFIG_PROPS_PREFIX + "name";
56-
57-
public static final String DEFAULT_TRACKING_FILE_MANAGER_NAME = "legacy";
58-
59-
private final TrackingFileManager trackingFileManager;
60-
61-
/**
62-
* Default constructor, to be used in tests; provides "legacy" tracking file manager only.
63-
*/
64-
public TrackingFileManagerProvider() {
65-
this.trackingFileManager = new LegacyTrackingFileManager();
66-
}
36+
private final TrackingFileManagerSupplier delegate;
6737

68-
/**
69-
* Constructor to be used in production.
70-
*/
7138
@Inject
72-
public TrackingFileManagerProvider(NamedLockFactorySelector selector) {
73-
// this is early construction; no session, hence we must rely on system properties instead
74-
Map<String, String> config = new HashMap<>();
75-
for (String name : System.getProperties().stringPropertyNames()) {
76-
config.put(name, System.getProperty(name));
77-
}
78-
String tfmName = ConfigUtils.getString(
79-
config, DEFAULT_TRACKING_FILE_MANAGER_NAME, CONFIG_PROP_TRACKING_FILE_MANAGER_NAME);
80-
if ("legacy".equals(tfmName)) {
81-
this.trackingFileManager = new LegacyTrackingFileManager();
82-
} else if ("namedLocks".equals(tfmName)) {
83-
NamedLockFactory factory = selector.getNamedLockFactory(config);
84-
long time = selector.getLockWaitTime(config);
85-
TimeUnit timeUnit = selector.getLockWaitTimeUnit(config);
86-
this.trackingFileManager = new NamedLocksTrackingFileManager(factory, time, timeUnit);
87-
} else {
88-
throw new IllegalArgumentException("Unknown tracking file manager name: " + tfmName);
89-
}
39+
public TrackingFileManagerProvider(TrackingFileManagerSupplier metadataResolverProvider) {
40+
this.delegate = requireNonNull(metadataResolverProvider);
9041
}
9142

9243
@Override
9344
public TrackingFileManager get() {
94-
return trackingFileManager;
45+
return delegate.get();
9546
}
9647
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.eclipse.aether.internal.impl;
20+
21+
import javax.inject.Inject;
22+
import javax.inject.Named;
23+
import javax.inject.Singleton;
24+
25+
import java.util.HashMap;
26+
import java.util.Map;
27+
import java.util.concurrent.TimeUnit;
28+
import java.util.function.Supplier;
29+
30+
import org.eclipse.aether.ConfigurationProperties;
31+
import org.eclipse.aether.impl.NamedLockFactorySelector;
32+
import org.eclipse.aether.named.NamedLockFactory;
33+
import org.eclipse.aether.util.ConfigUtils;
34+
35+
/**
36+
* Supplies selected instance of {@link TrackingFileManager} implementation.
37+
*
38+
* @since 2.0.18
39+
*/
40+
@Singleton
41+
@Named
42+
public class TrackingFileManagerSupplier implements Supplier<TrackingFileManager> {
43+
public static final String CONFIG_PROPS_PREFIX = ConfigurationProperties.PREFIX_SYSTEM + "trackingFileManager.";
44+
45+
/**
46+
* Name of the tracking file manager to use. Supported values are "namedLocks" and "legacy". The latter should be
47+
* used if it is known, that local repository is simultaneously accessed by Maven 3.10+ and older Maven versions.
48+
* This decision happens early, during boot of the system, hence system properties can be used only as configuration
49+
* source.
50+
*
51+
* @configurationSource {@link System#getProperty(String, String)}
52+
* @configurationType {@link String}
53+
* @configurationDefaultValue {@link #DEFAULT_TRACKING_FILE_MANAGER_NAME}
54+
*/
55+
public static final String CONFIG_PROP_TRACKING_FILE_MANAGER_NAME = CONFIG_PROPS_PREFIX + "name";
56+
57+
public static final String DEFAULT_TRACKING_FILE_MANAGER_NAME = "legacy";
58+
59+
private final TrackingFileManager trackingFileManager;
60+
61+
/**
62+
* Default constructor, to be used in tests; provides "legacy" tracking file manager only.
63+
*/
64+
public TrackingFileManagerSupplier() {
65+
this.trackingFileManager = new LegacyTrackingFileManager();
66+
}
67+
68+
/**
69+
* Constructor to be used in production.
70+
*/
71+
@Inject
72+
public TrackingFileManagerSupplier(NamedLockFactorySelector selector) {
73+
// this is early construction; no session, hence we must rely on system properties instead
74+
Map<String, String> config = new HashMap<>();
75+
for (String name : System.getProperties().stringPropertyNames()) {
76+
config.put(name, System.getProperty(name));
77+
}
78+
String tfmName = ConfigUtils.getString(
79+
config, DEFAULT_TRACKING_FILE_MANAGER_NAME, CONFIG_PROP_TRACKING_FILE_MANAGER_NAME);
80+
if ("legacy".equals(tfmName)) {
81+
this.trackingFileManager = new LegacyTrackingFileManager();
82+
} else if ("namedLocks".equals(tfmName)) {
83+
NamedLockFactory factory = selector.getNamedLockFactory(config);
84+
long time = selector.getLockWaitTime(config);
85+
TimeUnit timeUnit = selector.getLockWaitTimeUnit(config);
86+
this.trackingFileManager = new NamedLocksTrackingFileManager(factory, time, timeUnit);
87+
} else {
88+
throw new IllegalArgumentException("Unknown tracking file manager name: " + tfmName);
89+
}
90+
}
91+
92+
@Override
93+
public TrackingFileManager get() {
94+
return trackingFileManager;
95+
}
96+
}

maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultArtifactResolverTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ public void get(
374374
resolver = setupArtifactResolver(
375375
new StubVersionResolver(),
376376
new DefaultUpdateCheckManager(
377-
new TrackingFileManagerProvider().get(),
377+
new TrackingFileManagerSupplier().get(),
378378
new DefaultUpdatePolicyAnalyzer(),
379379
new DefaultPathProcessor()));
380380

maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultUpdateCheckManagerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ void setup(@TempDir File dir) throws Exception {
7979
TestFileUtils.createTempDir().toURI().toURL().toString())
8080
.build();
8181
manager = new DefaultUpdateCheckManager(
82-
new TrackingFileManagerProvider().get(), new DefaultUpdatePolicyAnalyzer(), new DefaultPathProcessor());
82+
new TrackingFileManagerSupplier().get(), new DefaultUpdatePolicyAnalyzer(), new DefaultPathProcessor());
8383
metadata = new DefaultMetadata(
8484
"gid", "aid", "ver", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT, metadataFile);
8585
artifact = new DefaultArtifact("gid", "aid", "", "ext", "ver").setFile(artifactFile);

maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManagerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ void setup(@TempDir File dir) throws Exception {
9898
"gid", "aid", null, "maven-metadata.xml", Nature.RELEASE, TestFileUtils.createTempFile("metadata"));
9999

100100
session = TestUtils.newSession();
101-
trackingFileManager = new TrackingFileManagerProvider().get();
101+
trackingFileManager = new TrackingFileManagerSupplier().get();
102102
manager = getManager();
103103

104104
artifactFile = new File(basedir, manager.getPathForLocalArtifact(artifact));

maven-resolver-supplier-mvn3/pom.xml

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,6 @@
133133
<groupId>org.slf4j</groupId>
134134
<artifactId>slf4j-api</artifactId>
135135
</dependency>
136-
<!-- just build time -->
137-
<dependency>
138-
<groupId>javax.inject</groupId>
139-
<artifactId>javax.inject</artifactId>
140-
<scope>provided</scope>
141-
<optional>true</optional>
142-
</dependency>
143136

144137
<dependency>
145138
<groupId>org.slf4j</groupId>
@@ -153,4 +146,30 @@
153146
</dependency>
154147
</dependencies>
155148

149+
<build>
150+
<plugins>
151+
<plugin>
152+
<groupId>org.apache.maven.plugins</groupId>
153+
<artifactId>maven-enforcer-plugin</artifactId>
154+
<executions>
155+
<execution>
156+
<id>ban-javax.inject</id>
157+
<goals>
158+
<goal>enforce</goal>
159+
</goals>
160+
<phase>validate</phase>
161+
<configuration>
162+
<rules>
163+
<bannedDependencies>
164+
<excludes>
165+
<exclude>javax.inject:javax.inject</exclude>
166+
</excludes>
167+
</bannedDependencies>
168+
</rules>
169+
</configuration>
170+
</execution>
171+
</executions>
172+
</plugin>
173+
</plugins>
174+
</build>
156175
</project>

maven-resolver-supplier-mvn3/src/main/java/org/eclipse/aether/supplier/RepositorySystemSupplier.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
import org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory;
8888
import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
8989
import org.eclipse.aether.internal.impl.TrackingFileManager;
90-
import org.eclipse.aether.internal.impl.TrackingFileManagerProvider;
90+
import org.eclipse.aether.internal.impl.TrackingFileManagerSupplier;
9191
import org.eclipse.aether.internal.impl.checksum.DefaultChecksumAlgorithmFactorySelector;
9292
import org.eclipse.aether.internal.impl.checksum.Md5ChecksumAlgorithmFactory;
9393
import org.eclipse.aether.internal.impl.checksum.Sha1ChecksumAlgorithmFactory;
@@ -225,7 +225,7 @@ public final TrackingFileManager getTrackingFileManager() {
225225
}
226226

227227
protected TrackingFileManager createTrackingFileManager() {
228-
return new TrackingFileManagerProvider(getNamedLockFactorySelector()).get();
228+
return new TrackingFileManagerSupplier(getNamedLockFactorySelector()).get();
229229
}
230230

231231
private LocalPathComposer localPathComposer;

maven-resolver-supplier-mvn4/pom.xml

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,6 @@
139139
<groupId>org.slf4j</groupId>
140140
<artifactId>slf4j-api</artifactId>
141141
</dependency>
142-
<!-- just build time -->
143-
<dependency>
144-
<groupId>javax.inject</groupId>
145-
<artifactId>javax.inject</artifactId>
146-
<scope>provided</scope>
147-
<optional>true</optional>
148-
</dependency>
149142

150143
<dependency>
151144
<groupId>org.slf4j</groupId>
@@ -159,4 +152,30 @@
159152
</dependency>
160153
</dependencies>
161154

155+
<build>
156+
<plugins>
157+
<plugin>
158+
<groupId>org.apache.maven.plugins</groupId>
159+
<artifactId>maven-enforcer-plugin</artifactId>
160+
<executions>
161+
<execution>
162+
<id>ban-javax.inject</id>
163+
<goals>
164+
<goal>enforce</goal>
165+
</goals>
166+
<phase>validate</phase>
167+
<configuration>
168+
<rules>
169+
<bannedDependencies>
170+
<excludes>
171+
<exclude>javax.inject:javax.inject</exclude>
172+
</excludes>
173+
</bannedDependencies>
174+
</rules>
175+
</configuration>
176+
</execution>
177+
</executions>
178+
</plugin>
179+
</plugins>
180+
</build>
162181
</project>

0 commit comments

Comments
 (0)