Refactor code to avoid using internal LazyPublishArtifact

See gh-30209
This commit is contained in:
Octavia Togami 2022-03-14 20:15:32 -07:00 committed by Andy Wilkinson
parent f11ddb4bd7
commit 264a6888a9
4 changed files with 23 additions and 17 deletions

View File

@ -32,7 +32,6 @@ import org.gradle.api.attributes.Bundling;
import org.gradle.api.attributes.LibraryElements;
import org.gradle.api.attributes.Usage;
import org.gradle.api.file.FileCollection;
import org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.plugins.ApplicationPlugin;
import org.gradle.api.plugins.BasePlugin;
@ -132,8 +131,7 @@ final class JavaPluginAction implements PluginApplicationAction {
}
private void configureArtifactPublication(TaskProvider<BootJar> bootJar) {
LazyPublishArtifact artifact = new LazyPublishArtifact(bootJar);
this.singlePublishedArtifact.addJarCandidate(artifact);
this.singlePublishedArtifact.addJarCandidate(bootJar);
}
private void configureBootRunTask(Project project) {

View File

@ -17,9 +17,16 @@
package org.springframework.boot.gradle.plugin;
import org.gradle.api.Buildable;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.PublishArtifact;
import org.gradle.api.artifacts.PublishArtifactSet;
import org.gradle.api.artifacts.dsl.ArtifactHandler;
import org.gradle.api.tasks.TaskDependency;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.bundling.Jar;
import org.springframework.boot.gradle.tasks.bundling.BootJar;
import org.springframework.boot.gradle.tasks.bundling.BootWar;
/**
* A wrapper for a {@link PublishArtifactSet} that ensures that only a single artifact is
@ -30,33 +37,35 @@ import org.gradle.api.tasks.TaskDependency;
*/
final class SinglePublishedArtifact implements Buildable {
private final PublishArtifactSet artifacts;
private final Configuration configuration;
private final ArtifactHandler handler;
private PublishArtifact currentArtifact;
SinglePublishedArtifact(PublishArtifactSet artifacts) {
this.artifacts = artifacts;
SinglePublishedArtifact(Configuration configuration, ArtifactHandler handler) {
this.configuration = configuration;
this.handler = handler;
}
void addWarCandidate(PublishArtifact candidate) {
void addWarCandidate(TaskProvider<BootWar> candidate) {
add(candidate);
}
void addJarCandidate(PublishArtifact candidate) {
void addJarCandidate(TaskProvider<BootJar> candidate) {
if (this.currentArtifact == null) {
add(candidate);
}
}
private void add(PublishArtifact artifact) {
this.artifacts.remove(this.currentArtifact);
this.artifacts.add(artifact);
this.currentArtifact = artifact;
private void add(TaskProvider<? extends Jar> artifact) {
this.configuration.getArtifacts().remove(this.currentArtifact);
this.currentArtifact = this.handler.add(this.configuration.getName(), artifact);
}
@Override
public TaskDependency getBuildDependencies() {
return this.artifacts.getBuildDependencies();
return this.configuration.getArtifacts().getBuildDependencies();
}
}

View File

@ -116,7 +116,8 @@ public class SpringBootPlugin implements Plugin<Project> {
}
private void registerPluginActions(Project project, Configuration bootArchives) {
SinglePublishedArtifact singlePublishedArtifact = new SinglePublishedArtifact(bootArchives.getArtifacts());
SinglePublishedArtifact singlePublishedArtifact = new SinglePublishedArtifact(bootArchives,
project.getArtifacts());
@SuppressWarnings("deprecation")
List<PluginApplicationAction> actions = Arrays.asList(new JavaPluginAction(singlePublishedArtifact),
new WarPluginAction(singlePublishedArtifact), new MavenPluginAction(bootArchives.getUploadTaskName()),

View File

@ -24,7 +24,6 @@ import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.file.FileCollection;
import org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact;
import org.gradle.api.plugins.BasePlugin;
import org.gradle.api.plugins.WarPlugin;
import org.gradle.api.provider.Provider;
@ -107,8 +106,7 @@ class WarPluginAction implements PluginApplicationAction {
}
private void configureArtifactPublication(TaskProvider<BootWar> bootWar) {
LazyPublishArtifact artifact = new LazyPublishArtifact(bootWar);
this.singlePublishedArtifact.addWarCandidate(artifact);
this.singlePublishedArtifact.addWarCandidate(bootWar);
}
}