Skip to content

Commit 62eea61

Browse files
committed
chore: starting cleanup on provisioner
1 parent 1defe68 commit 62eea61

7 files changed

Lines changed: 53 additions & 62 deletions

File tree

app/build.gradle

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,7 @@ dependencies {
1616
implementation libs.bundles.spotless.libs
1717
implementation libs.diff.utils
1818

19-
// these are fixed versions of the otherwise dynamic dependencies for spotless
20-
// this is necessary to allow for native compilation where reflective access to dynamic jars is not possible
21-
implementation libs.bundles.native.includes
22-
23-
// Eclipse WTP formatter used a custom lockfile to ensure the formatter has the
24-
// correct version of all its libraries
25-
def resourceName = "/com/diffplug/spotless/extra/eclipse_wtp_formatter/v4.21.0.lockfile"
26-
logger.debug("reading eclipse wtp resource: " + resourceName)
27-
EclipseWtpFormatterStep.getResource(resourceName)
28-
.readLines()
29-
.findAll { !it.startsWith('#')} // filter out comments
30-
.each {
31-
implementation("${it}") {
32-
transitive=false
33-
}
34-
}
19+
implementation project(':provisioner')
3520
}
3621

3722
application {

app/src/main/java/com/diffplug/spotless/cli/SpotlessCLI.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.diffplug.spotless.cli.help.OptionConstants;
4444
import com.diffplug.spotless.cli.logging.output.LoggingConfigurer;
4545
import com.diffplug.spotless.cli.logging.output.Output;
46+
import com.diffplug.spotless.cli.provisioner.SpotlessCliMavenProvisioner;
4647
import com.diffplug.spotless.cli.steps.ClangFormat;
4748
import com.diffplug.spotless.cli.steps.CleanThat;
4849
import com.diffplug.spotless.cli.steps.EclipseWtp;
@@ -337,6 +338,9 @@ public SpotlessActionContext spotlessActionContext(SpotlessCommandLineStream com
337338
return SpotlessActionContext.builder()
338339
.targetFileType(targetFileTypeInferer.inferTargetFileType())
339340
.fileResolver(new FileResolver(baseDir()))
341+
.provisioner(new SpotlessCliMavenProvisioner(
342+
SpotlessCliMavenProvisioner.DEFAULT_REMOTE_REPOSITORIES,
343+
SpotlessCliMavenProvisioner.DEFAULT_LOCAL_MAVEN_REPO)) // TODO allow configuration
340344
.commandLineStream(commandLineStream)
341345
.build();
342346
}

app/src/main/java/com/diffplug/spotless/cli/core/CliJarProvisioner.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.util.List;
2323
import java.util.Set;
2424

25-
import com.diffplug.spotless.JarState;
2625
import com.diffplug.spotless.Provisioner;
2726

2827
/**
@@ -38,7 +37,7 @@ public class CliJarProvisioner implements Provisioner {
3837
public static final File OWN_JAR = createSentinelFile();
3938

4039
public CliJarProvisioner() {
41-
JarState.setForcedClassLoader(getClass().getClassLoader()); // use the classloader of this class
40+
// JarState.setForcedClassLoader(getClass().getClassLoader()); // use the classloader of this class
4241
}
4342

4443
private static File createSentinelFile() {

app/src/main/java/com/diffplug/spotless/cli/core/SpotlessActionContext.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,28 @@ public class SpotlessActionContext {
2727

2828
private final TargetFileTypeInferer.TargetFileType targetFileType;
2929
private final FileResolver fileResolver;
30+
private final Provisioner provisioner;
3031
private final ExecutionLayout executionLayout;
3132

3233
private SpotlessActionContext(
3334
@NotNull TargetFileTypeInferer.TargetFileType targetFileType,
3435
@NotNull FileResolver fileResolver,
36+
@NotNull Provisioner provisioner,
3537
@NotNull SpotlessCommandLineStream commandLineStream) {
3638
this.targetFileType = Objects.requireNonNull(targetFileType);
3739
this.fileResolver = Objects.requireNonNull(fileResolver);
40+
this.provisioner = Objects.requireNonNull(provisioner);
3841
this.executionLayout = ExecutionLayout.create(fileResolver, Objects.requireNonNull(commandLineStream));
3942
}
4043

4144
public SpotlessActionContext(
4245
@NotNull TargetFileTypeInferer.TargetFileType targetFileType,
4346
@NotNull FileResolver fileResolver,
47+
@NotNull Provisioner provisioner,
4448
@NotNull ExecutionLayout executionLayout) {
45-
this.targetFileType = targetFileType;
46-
this.fileResolver = fileResolver;
49+
this.targetFileType = Objects.requireNonNull(targetFileType);
50+
this.fileResolver = Objects.requireNonNull(fileResolver);
51+
this.provisioner = Objects.requireNonNull(provisioner);
4752
this.executionLayout = executionLayout;
4853
}
4954

@@ -60,7 +65,7 @@ public Path resolvePath(Path path) {
6065
}
6166

6267
public Provisioner provisioner() {
63-
return CliJarProvisioner.INSTANCE;
68+
return provisioner;
6469
}
6570

6671
public ExecutionLayout executionLayout() {
@@ -72,12 +77,14 @@ public static Builder builder() {
7277
}
7378

7479
public SpotlessActionContext deriveContext(Integer deriveId) {
75-
return new SpotlessActionContext(targetFileType, fileResolver, executionLayout.deriveLayout(deriveId));
80+
return new SpotlessActionContext(
81+
targetFileType, fileResolver, provisioner, executionLayout.deriveLayout(deriveId));
7682
}
7783

7884
public static class Builder {
7985
private TargetFileTypeInferer.TargetFileType targetFileType;
8086
private FileResolver fileResolver;
87+
private Provisioner provisioner;
8188
private SpotlessCommandLineStream commandLineStream;
8289

8390
public Builder targetFileType(TargetFileTypeInferer.TargetFileType targetFileType) {
@@ -90,13 +97,18 @@ public Builder fileResolver(FileResolver fileResolver) {
9097
return this;
9198
}
9299

100+
public Builder provisioner(Provisioner provisioner) {
101+
this.provisioner = provisioner;
102+
return this;
103+
}
104+
93105
public Builder commandLineStream(SpotlessCommandLineStream commandLineStream) {
94106
this.commandLineStream = commandLineStream;
95107
return this;
96108
}
97109

98110
public SpotlessActionContext build() {
99-
return new SpotlessActionContext(targetFileType, fileResolver, commandLineStream);
111+
return new SpotlessActionContext(targetFileType, fileResolver, provisioner, commandLineStream);
100112
}
101113
}
102114
}

provisioner/build.gradle

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,20 @@ plugins {
55
version = rootProject.version
66

77
dependencies {
8-
//
9-
// implementation libs.bundles.maven.resolver.libs
10-
11-
api( platform("org.apache.maven.resolver:maven-resolver:2.0.13"))
12-
13-
// implementation "org.apache.maven:maven-resolver-provider"
14-
8+
// BOM to align all maven resolver versions
9+
// the first two on API, to allow user of SpotlessCliMavenProvisioner to specify repositories
10+
api( platform("org.apache.maven.resolver:maven-resolver:2.0.13"))
1511
api "org.apache.maven.resolver:maven-resolver-api"
12+
// implementations needed for a working resolver, irrelevant for API consumers
1613
implementation "org.apache.maven.resolver:maven-resolver-spi"
1714
implementation "org.apache.maven.resolver:maven-resolver-util"
1815
implementation "org.apache.maven.resolver:maven-resolver-impl"
1916
implementation "org.apache.maven.resolver:maven-resolver-connector-basic"
2017
implementation "org.apache.maven.resolver:maven-resolver-transport-file"
2118
implementation "org.apache.maven.resolver:maven-resolver-transport-apache"
2219

23-
// implementation "org.apache.maven.resolver:maven-resolver-supplier-mvn3"
24-
implementation "org.apache.maven.resolver:maven-resolver-supplier-mvn4"
25-
26-
implementation "org.apache.maven:maven-resolver-provider:3.9.11"
27-
28-
// ✅ THESE are required to support parent POM resolution
29-
implementation "org.apache.maven:maven-model-builder:3.9.11"
30-
implementation "org.apache.maven:maven-resolver-provider:3.9.11"
20+
// This one is required to support parent POM resolution
21+
implementation "org.apache.maven.resolver:maven-resolver-supplier-mvn4"
3122

3223
implementation libs.bundles.spotless.libs
3324
}

provisioner/src/main/java/com/diffplug/spotless/cli/provisioner/DynamicMavenResolverPublisher.java renamed to provisioner/src/main/java/com/diffplug/spotless/cli/provisioner/SpotlessCliMavenProvisioner.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,12 @@
2222
import java.util.List;
2323
import java.util.Set;
2424

25-
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
26-
import org.eclipse.aether.DefaultRepositorySystemSession;
2725
import org.eclipse.aether.RepositorySystem;
2826
import org.eclipse.aether.RepositorySystemSession;
2927
import org.eclipse.aether.artifact.Artifact;
3028
import org.eclipse.aether.artifact.DefaultArtifact;
3129
import org.eclipse.aether.collection.CollectRequest;
3230
import org.eclipse.aether.graph.Dependency;
33-
import org.eclipse.aether.impl.ArtifactDescriptorReader;
34-
import org.eclipse.aether.repository.LocalRepository;
3531
import org.eclipse.aether.repository.RemoteRepository;
3632
import org.eclipse.aether.resolution.ArtifactRequest;
3733
import org.eclipse.aether.resolution.ArtifactResult;
@@ -44,7 +40,7 @@
4440

4541
import com.diffplug.spotless.Provisioner;
4642

47-
public class DynamicMavenResolverPublisher implements Provisioner {
43+
public class SpotlessCliMavenProvisioner implements Provisioner {
4844

4945
public static final List<RemoteRepository> DEFAULT_REMOTE_REPOSITORIES =
5046
List.of(new RemoteRepository.Builder("central", "default", "https://repo1.maven.org/maven2/").build());
@@ -55,7 +51,7 @@ public class DynamicMavenResolverPublisher implements Provisioner {
5551

5652
private final Path localMavenRepo;
5753

58-
public DynamicMavenResolverPublisher(List<RemoteRepository> remoteRepositories, Path localMavenRepo) {
54+
public SpotlessCliMavenProvisioner(List<RemoteRepository> remoteRepositories, Path localMavenRepo) {
5955
this.remoteRepositories = remoteRepositories;
6056
this.localMavenRepo = localMavenRepo;
6157
}
@@ -78,13 +74,14 @@ private RepositorySystem newRepositorySystem() {
7874

7975
private RepositorySystemSession newSession(RepositorySystem system) {
8076
SessionBuilderSupplier sessionBuilderSupplier = new SessionBuilderSupplier(system);
81-
return sessionBuilderSupplier.get()
77+
return sessionBuilderSupplier
78+
.get()
8279
.withLocalRepositoryBaseDirectories(localMavenRepo)
8380
.build();
84-
// DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
85-
// LocalRepository localRepo = new LocalRepository(localMavenRepo.toFile());
86-
// session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
87-
// return session;
81+
// DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
82+
// LocalRepository localRepo = new LocalRepository(localMavenRepo.toFile());
83+
// session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
84+
// return session;
8885
}
8986

9087
@Override

provisioner/src/test/java/com/diffplug/spotless/cli/provisioner/DynamicMavenResolverPublisherTest.java renamed to provisioner/src/test/java/com/diffplug/spotless/cli/provisioner/SpotlessCliMavenProvisionerTest.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@
2828
import org.junit.jupiter.api.Test;
2929
import org.junit.jupiter.api.io.TempDir;
3030

31-
class DynamicMavenResolverPublisherTest {
31+
class SpotlessCliMavenProvisionerTest {
3232

3333
@Test
3434
@Disabled(
3535
"Disabled to avoid network dependency during tests, enable when network access is acceptable while developing")
3636
void itResolvesDiffplugSpotlessLib(@TempDir Path tempDir) {
3737
// Given
38-
DynamicMavenResolverPublisher provisioner =
39-
new DynamicMavenResolverPublisher(DynamicMavenResolverPublisher.DEFAULT_REMOTE_REPOSITORIES, tempDir);
38+
SpotlessCliMavenProvisioner provisioner =
39+
new SpotlessCliMavenProvisioner(SpotlessCliMavenProvisioner.DEFAULT_REMOTE_REPOSITORIES, tempDir);
4040
// When
4141
Set<File> files = provisioner.provisionWithTransitives(true, "com.diffplug.spotless:spotless-lib:4.1.0");
4242
Set<String> fileNames = files.stream().map(File::getName).collect(Collectors.toSet());
@@ -48,12 +48,15 @@ void itResolvesDiffplugSpotlessLib(@TempDir Path tempDir) {
4848
}
4949

5050
@Test
51+
@Disabled(
52+
"Disabled to avoid network dependency during tests, enable when network access is acceptable while developing")
5153
void itResolvesGoogleJavaFormat(@TempDir Path tempDir) {
5254
// Given
53-
DynamicMavenResolverPublisher provisioner =
54-
new DynamicMavenResolverPublisher(DynamicMavenResolverPublisher.DEFAULT_REMOTE_REPOSITORIES, tempDir);
55+
SpotlessCliMavenProvisioner provisioner =
56+
new SpotlessCliMavenProvisioner(SpotlessCliMavenProvisioner.DEFAULT_REMOTE_REPOSITORIES, tempDir);
5557
// When
56-
Set<File> files = provisioner.provisionWithTransitives(true, "com.google.googlejavaformat:google-java-format:1.28.0");
58+
Set<File> files =
59+
provisioner.provisionWithTransitives(true, "com.google.googlejavaformat:google-java-format:1.28.0");
5760
Set<String> fileNames = files.stream().map(File::getName).collect(Collectors.toSet());
5861
// Then
5962
SoftAssertions.assertSoftly(softly -> {
@@ -67,7 +70,7 @@ void itResolvesGoogleJavaFormat(@TempDir Path tempDir) {
6770
@Test
6871
void itResolvesTestLib1(@TempDir Path tempDir) {
6972
// Given
70-
DynamicMavenResolverPublisher provisioner = provisionerForLocalMavenTestRepo(tempDir);
73+
SpotlessCliMavenProvisioner provisioner = provisionerForLocalMavenTestRepo(tempDir);
7174
// When
7275
Set<File> files = provisioner.provisionWithTransitives(true, "com.example:lib1:1.0.0");
7376
Set<String> fileNames = files.stream().map(File::getName).collect(Collectors.toSet());
@@ -81,7 +84,7 @@ void itResolvesTestLib1(@TempDir Path tempDir) {
8184
@Test
8285
void itResolvesTestLib2WithTransitives(@TempDir Path tempDir) {
8386
// Given
84-
DynamicMavenResolverPublisher provisioner = provisionerForLocalMavenTestRepo(tempDir);
87+
SpotlessCliMavenProvisioner provisioner = provisionerForLocalMavenTestRepo(tempDir);
8588
// When
8689
Set<File> files = provisioner.provisionWithTransitives(true, "com.example:lib2:1.0.0");
8790
Set<String> fileNames = files.stream().map(File::getName).collect(Collectors.toSet());
@@ -96,7 +99,7 @@ void itResolvesTestLib2WithTransitives(@TempDir Path tempDir) {
9699
@Test
97100
void itResolvesTestLib2WithoutTransitives(@TempDir Path tempDir) {
98101
// Given
99-
DynamicMavenResolverPublisher provisioner = provisionerForLocalMavenTestRepo(tempDir);
102+
SpotlessCliMavenProvisioner provisioner = provisionerForLocalMavenTestRepo(tempDir);
100103
// When
101104
Set<File> files = provisioner.provisionWithTransitives(false, "com.example:lib2:1.0.0");
102105
Set<String> fileNames = files.stream().map(File::getName).collect(Collectors.toSet());
@@ -111,7 +114,7 @@ void itResolvesTestLib2WithoutTransitives(@TempDir Path tempDir) {
111114
@Test
112115
void itResolvesLib2WhenRepeatedlyProvisioning(@TempDir Path tempDir) {
113116
// Given
114-
DynamicMavenResolverPublisher provisioner = provisionerForLocalMavenTestRepo(tempDir);
117+
SpotlessCliMavenProvisioner provisioner = provisionerForLocalMavenTestRepo(tempDir);
115118
// When
116119
Set<File> firstProvisioning = provisioner.provisionWithTransitives(true, "com.example:lib2:1.0.0");
117120
Set<File> secondProvisioning = provisioner.provisionWithTransitives(true, "com.example:lib2:1.0.0");
@@ -128,7 +131,7 @@ void itResolvesLib2WhenRepeatedlyProvisioning(@TempDir Path tempDir) {
128131
@Test
129132
void itResolvesLib3WithTransitivesRespectingParentPom(@TempDir Path tempDir) {
130133
// Given
131-
DynamicMavenResolverPublisher provisioner = provisionerForLocalMavenTestRepo(tempDir);
134+
SpotlessCliMavenProvisioner provisioner = provisionerForLocalMavenTestRepo(tempDir);
132135
// When
133136
Set<File> files = provisioner.provisionWithTransitives(true, "com.example:lib3:1.0.0");
134137
Set<String> fileNames = files.stream().map(File::getName).collect(Collectors.toSet());
@@ -140,8 +143,8 @@ void itResolvesLib3WithTransitivesRespectingParentPom(@TempDir Path tempDir) {
140143
});
141144
}
142145

143-
private static @NotNull DynamicMavenResolverPublisher provisionerForLocalMavenTestRepo(Path tempDir) {
144-
return new DynamicMavenResolverPublisher(localMavenTestRepo(), tempDir);
146+
private static @NotNull SpotlessCliMavenProvisioner provisionerForLocalMavenTestRepo(Path tempDir) {
147+
return new SpotlessCliMavenProvisioner(localMavenTestRepo(), tempDir);
145148
}
146149

147150
private static @NotNull List<RemoteRepository> localMavenTestRepo() {

0 commit comments

Comments
 (0)