Allow gradle builds without version numbers
Add a gradle `ResolutionStrategy` that resolves missing version numbers using the `spring-boot-dependencies` POM. This commit also introduces a new `spring-boot-dependency-tools` module that provides programmatic access to the `dependencyManagement` section of the dependencies POM. Fixed gh-262
This commit is contained in:
@@ -16,8 +16,10 @@
|
||||
|
||||
package org.springframework.boot.gradle;
|
||||
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.Plugin;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.artifacts.Configuration;
|
||||
import org.gradle.api.artifacts.Dependency;
|
||||
import org.gradle.api.plugins.ApplicationPlugin;
|
||||
import org.gradle.api.plugins.BasePlugin;
|
||||
@@ -26,8 +28,8 @@ import org.springframework.boot.gradle.task.Repackage;
|
||||
import org.springframework.boot.gradle.task.RunApp;
|
||||
|
||||
/**
|
||||
* Gradle 'Spring Boot' {@link Plugin}. Provides 2 tasks (bootRepackge and bootRun).
|
||||
*
|
||||
* Gradle 'Spring Boot' {@link Plugin}.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
* @author Dave Syer
|
||||
*/
|
||||
@@ -44,19 +46,31 @@ public class SpringBootPlugin implements Plugin<Project> {
|
||||
project.getPlugins().apply(ApplicationPlugin.class);
|
||||
project.getExtensions().create("springBoot", SpringBootPluginExtension.class);
|
||||
|
||||
// register BootRepackage so that we can use
|
||||
// task foo(type: BootRepackage) {}
|
||||
project.getExtensions().getExtraProperties().set("BootRepackage", Repackage.class);
|
||||
Repackage packageTask = addRepackageTask(project);
|
||||
ensureTaskRunsOnAssembly(project, packageTask);
|
||||
addRunAppTask(project);
|
||||
applyRepackage(project);
|
||||
applyRun(project);
|
||||
applyResolutionStrategy(project);
|
||||
}
|
||||
|
||||
private void addRunAppTask(Project project) {
|
||||
RunApp runJarTask = project.getTasks().create(RUN_APP_TASK_NAME, RunApp.class);
|
||||
runJarTask.setDescription("Run the project with support for auto-detecting main class and reloading static resources");
|
||||
runJarTask.setGroup("Execution");
|
||||
runJarTask.dependsOn("assemble");
|
||||
private void applyRepackage(Project project) {
|
||||
Repackage packageTask = addRepackageTask(project);
|
||||
ensureTaskRunsOnAssembly(project, packageTask);
|
||||
}
|
||||
|
||||
private void applyRun(Project project) {
|
||||
addRunAppTask(project);
|
||||
// register BootRepackage so that we can use task foo(type: BootRepackage) {}
|
||||
project.getExtensions().getExtraProperties().set("BootRepackage", Repackage.class);
|
||||
}
|
||||
|
||||
private void applyResolutionStrategy(Project project) {
|
||||
project.getConfigurations().all(new Action<Configuration>() {
|
||||
|
||||
@Override
|
||||
public void execute(Configuration configuration) {
|
||||
SpringBootResolutionStrategy.apply(configuration.getResolutionStrategy());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private Repackage addRepackageTask(Project project) {
|
||||
@@ -71,6 +85,13 @@ public class SpringBootPlugin implements Plugin<Project> {
|
||||
return packageTask;
|
||||
}
|
||||
|
||||
private void addRunAppTask(Project project) {
|
||||
RunApp runJarTask = project.getTasks().create(RUN_APP_TASK_NAME, RunApp.class);
|
||||
runJarTask.setDescription("Run the project with support for auto-detecting main class and reloading static resources");
|
||||
runJarTask.setGroup("Execution");
|
||||
runJarTask.dependsOn("assemble");
|
||||
}
|
||||
|
||||
private void ensureTaskRunsOnAssembly(Project project, Repackage task) {
|
||||
project.getTasks().getByName(BasePlugin.ASSEMBLE_TASK_NAME).dependsOn(task);
|
||||
}
|
||||
|
||||
@@ -39,8 +39,19 @@ import org.springframework.boot.loader.tools.Layouts
|
||||
public class SpringBootPluginExtension {
|
||||
|
||||
static enum LayoutType {
|
||||
JAR(new Layouts.Jar()), WAR(new Layouts.War()), ZIP(new Layouts.Expanded()), DIR(new Layouts.Expanded()), NONE(new Layouts.None());
|
||||
|
||||
JAR(new Layouts.Jar()),
|
||||
|
||||
WAR(new Layouts.War()),
|
||||
|
||||
ZIP(new Layouts.Expanded()),
|
||||
|
||||
DIR(new Layouts.Expanded()),
|
||||
|
||||
NONE(new Layouts.None());
|
||||
|
||||
Layout layout;
|
||||
|
||||
private LayoutType(Layout layout) {
|
||||
this.layout = layout;
|
||||
}
|
||||
@@ -85,6 +96,6 @@ public class SpringBootPluginExtension {
|
||||
* @return the Layout to use or null if not explicitly set
|
||||
*/
|
||||
Layout convertLayout() {
|
||||
layout==null ? null : layout.layout
|
||||
(layout == null ? null : layout.layout)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
|
||||
package org.springframework.boot.gradle;
|
||||
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.artifacts.DependencyResolveDetails;
|
||||
import org.gradle.api.artifacts.ModuleVersionSelector;
|
||||
import org.gradle.api.artifacts.ResolutionStrategy;
|
||||
import org.springframework.boot.dependency.tools.Dependency;
|
||||
import org.springframework.boot.dependency.tools.ManagedDependencies;
|
||||
|
||||
/**
|
||||
* A resolution strategy to resolve missing version numbers using the
|
||||
* 'spring-boot-dependencies' POM.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
*/
|
||||
public class SpringBootResolutionStrategy {
|
||||
|
||||
private static final String SPRING_BOOT_GROUP = "org.springframework.boot";
|
||||
|
||||
public static void apply(ResolutionStrategy resolutionStrategy) {
|
||||
resolutionStrategy.eachDependency(new Action<DependencyResolveDetails>() {
|
||||
|
||||
@Override
|
||||
public void execute(DependencyResolveDetails resolveDetails) {
|
||||
String version = resolveDetails.getTarget().getVersion();
|
||||
if (version == null || version.trim().length() == 0) {
|
||||
resolve(resolveDetails);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
protected static void resolve(DependencyResolveDetails resolveDetails) {
|
||||
|
||||
ManagedDependencies dependencies = ManagedDependencies.get();
|
||||
ModuleVersionSelector target = resolveDetails.getTarget();
|
||||
|
||||
if (SPRING_BOOT_GROUP.equals(target.getGroup())) {
|
||||
resolveDetails.useVersion(dependencies.getVersion());
|
||||
return;
|
||||
}
|
||||
|
||||
Dependency dependency = dependencies.find(target.getGroup(), target.getName());
|
||||
if (dependency != null) {
|
||||
resolveDetails.useVersion(dependency.getVersion());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -36,7 +36,7 @@ import org.springframework.boot.loader.tools.MainClassFinder;
|
||||
|
||||
/**
|
||||
* Run the project from Gradle.
|
||||
*
|
||||
*
|
||||
* @author Dave Syer
|
||||
*/
|
||||
public class RunApp extends DefaultTask {
|
||||
@@ -57,6 +57,7 @@ public class RunApp extends DefaultTask {
|
||||
main = set;
|
||||
}
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
final Set<File> allResources = new LinkedHashSet<File>();
|
||||
|
||||
Reference in New Issue
Block a user