mirror of
https://gitee.com/dcren/initializr.git
synced 2026-02-25 21:22:58 +08:00
Add support for Maven resources
See gh-967
This commit is contained in:
committed by
Stephane Nicoll
parent
c2886679d6
commit
df62424c0e
@@ -16,9 +16,13 @@
|
||||
|
||||
package io.spring.initializr.generator.buildsystem.maven;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.Build;
|
||||
import io.spring.initializr.generator.buildsystem.BuildItemResolver;
|
||||
@@ -44,6 +48,8 @@ public class MavenBuild extends Build {
|
||||
|
||||
private MavenPluginContainer plugins = new MavenPluginContainer();
|
||||
|
||||
private final Map<String, ResourceBuilder> resources = new LinkedHashMap<>();
|
||||
|
||||
private String packaging;
|
||||
|
||||
public MavenBuild(BuildItemResolver buildItemResolver) {
|
||||
@@ -115,4 +121,110 @@ public class MavenBuild extends Build {
|
||||
return this.packaging;
|
||||
}
|
||||
|
||||
public void resource(String directory, Consumer<ResourceBuilder> customizer) {
|
||||
customizer.accept(this.resources.computeIfAbsent(directory, (key) -> new ResourceBuilder(directory)));
|
||||
}
|
||||
|
||||
public List<Resource> getResources() {
|
||||
return this.resources.values().stream().map(ResourceBuilder::build).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Builder to create a {@link Resource}.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public static final class ResourceBuilder {
|
||||
|
||||
private String directory;
|
||||
|
||||
private String targetPath;
|
||||
|
||||
private boolean filtering;
|
||||
|
||||
private List<String> includes = new ArrayList<>();
|
||||
|
||||
private List<String> excludes = new ArrayList<>();
|
||||
|
||||
public ResourceBuilder(String directory) {
|
||||
this.directory = directory;
|
||||
}
|
||||
|
||||
Resource build() {
|
||||
return new Resource(this.directory, this.targetPath, this.filtering, this.includes, this.excludes);
|
||||
}
|
||||
|
||||
public ResourceBuilder include(String... includes) {
|
||||
this.includes = Arrays.asList(includes);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ResourceBuilder targetPath(String targetPath) {
|
||||
this.targetPath = targetPath;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ResourceBuilder filtering(Boolean filtering) {
|
||||
this.filtering = filtering;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ResourceBuilder excludes(String... excludes) {
|
||||
this.excludes = Arrays.asList(excludes);
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* An {@code <resource>} of a {@link MavenBuild}.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public static final class Resource {
|
||||
|
||||
private String directory;
|
||||
|
||||
private String targetPath;
|
||||
|
||||
private boolean filtering;
|
||||
|
||||
private List<String> includes = new ArrayList<>();
|
||||
|
||||
private List<String> excludes = new ArrayList<>();
|
||||
|
||||
public Resource(String directory, String targetPath, boolean filtering, List<String> includes,
|
||||
List<String> excludes) {
|
||||
super();
|
||||
this.directory = directory;
|
||||
this.targetPath = targetPath;
|
||||
this.filtering = filtering;
|
||||
this.includes = includes;
|
||||
this.excludes = excludes;
|
||||
}
|
||||
|
||||
public String getDirectory() {
|
||||
return this.directory;
|
||||
}
|
||||
|
||||
public List<String> getIncludes() {
|
||||
return this.includes;
|
||||
}
|
||||
|
||||
public String getTargetPath() {
|
||||
return this.targetPath;
|
||||
}
|
||||
|
||||
public boolean isFiltering() {
|
||||
return this.filtering;
|
||||
}
|
||||
|
||||
public List<String> getExcludes() {
|
||||
return this.excludes;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import io.spring.initializr.generator.buildsystem.DependencyComparator;
|
||||
import io.spring.initializr.generator.buildsystem.DependencyContainer;
|
||||
import io.spring.initializr.generator.buildsystem.DependencyScope;
|
||||
import io.spring.initializr.generator.buildsystem.MavenRepository;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenBuild.Resource;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Configuration;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Execution;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Setting;
|
||||
@@ -240,18 +241,41 @@ public class MavenBuildWriter {
|
||||
}
|
||||
|
||||
private void writeBuild(IndentingWriter writer, MavenBuild build) {
|
||||
if (build.getSourceDirectory() == null && build.getTestSourceDirectory() == null && build.plugins().isEmpty()) {
|
||||
if (build.getSourceDirectory() == null && build.getTestSourceDirectory() == null && build.plugins().isEmpty()
|
||||
&& build.getResources().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
writer.println();
|
||||
writeElement(writer, "build", () -> {
|
||||
writeSingleElement(writer, "sourceDirectory", build.getSourceDirectory());
|
||||
writeSingleElement(writer, "testSourceDirectory", build.getTestSourceDirectory());
|
||||
writeResources(writer, build);
|
||||
writePlugins(writer, build);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void writeResources(IndentingWriter writer, MavenBuild build) {
|
||||
if (build.getResources().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
writeElement(writer, "resources", () -> writeCollection(writer, build.getResources(), this::writeResource));
|
||||
}
|
||||
|
||||
private void writeResource(IndentingWriter writer, Resource resource) {
|
||||
writeElement(writer, "resource", () -> {
|
||||
writeSingleElement(writer, "directory", resource.getDirectory());
|
||||
if (!resource.getIncludes().isEmpty()) {
|
||||
writeElement(writer, "includes",
|
||||
() -> writeCollection(writer, resource.getIncludes(), this::writeResourceInclude));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void writeResourceInclude(IndentingWriter writer, String include) {
|
||||
writeSingleElement(writer, "include", include);
|
||||
}
|
||||
|
||||
private void writePlugins(IndentingWriter writer, MavenBuild build) {
|
||||
if (build.plugins().isEmpty()) {
|
||||
return;
|
||||
|
||||
@@ -16,9 +16,13 @@
|
||||
|
||||
package io.spring.initializr.generator.buildsystem.maven;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenBuild.Resource;
|
||||
|
||||
/**
|
||||
* Tests for {@link MavenBuild}.
|
||||
@@ -110,4 +114,52 @@ class MavenBuildTests {
|
||||
.hasOnlyOneElementSatisfying((testPlugin) -> assertThat(testPlugin.isExtensions()).isTrue());
|
||||
}
|
||||
|
||||
@Test
|
||||
void mavenResourcesCanBeLoaded() {
|
||||
|
||||
MavenBuild build = new MavenBuild();
|
||||
|
||||
build.resource("src/main/resources", (resource) -> {
|
||||
resource.include("**/*.yml");
|
||||
resource.filtering(true);
|
||||
resource.targetPath("targetPath");
|
||||
resource.excludes("**/*.properties");
|
||||
});
|
||||
|
||||
Resource resource = build.getResources().get(0);
|
||||
|
||||
assertThat(resource.getIncludes().get(0)).isEqualTo("**/*.yml");
|
||||
assertThat(resource.getExcludes().get(0)).isEqualTo("**/*.properties");
|
||||
assertThat(resource.isFiltering()).isTrue();
|
||||
assertThat(resource.getTargetPath()).isEqualTo("targetPath");
|
||||
assertThat(resource.getDirectory()).isEqualTo("src/main/resources");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
void mavenResourcesFilteringFalseByDefault() {
|
||||
|
||||
MavenBuild build = new MavenBuild();
|
||||
|
||||
build.resource("src/main/resources", (resource) -> {
|
||||
});
|
||||
|
||||
Resource resource = build.getResources().get(0);
|
||||
|
||||
assertThat(resource.isFiltering()).isFalse();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
void mavenResourcesNotLoadedByDefault() {
|
||||
|
||||
MavenBuild build = new MavenBuild();
|
||||
build.plugin("com.example", "test-plugin");
|
||||
|
||||
List<Resource> resources = build.getResources();
|
||||
|
||||
assertThat(resources).isEmpty();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -546,6 +546,22 @@ class MavenBuildWriterTests {
|
||||
generatePom(build, (pom) -> assertThat(pom).textAtPath("/project/version").isEqualTo("1.2.4.RELEASE"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void pomWithResources() throws Exception {
|
||||
|
||||
MavenBuild build = new MavenBuild();
|
||||
|
||||
build.resource("src/main/resources", (resource) -> resource.include("**/*.properties"));
|
||||
|
||||
generatePom(build, (pom) -> {
|
||||
assertThat(pom).textAtPath("/project/build/resources/resource/includes/include")
|
||||
.isEqualTo("**/*.properties");
|
||||
|
||||
assertThat(pom).textAtPath("/project/build/resources/resource/directory").isEqualTo("src/main/resources");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void generatePom(MavenBuild mavenBuild, Consumer<NodeAssert> consumer) throws Exception {
|
||||
MavenBuildWriter writer = new MavenBuildWriter();
|
||||
StringWriter out = new StringWriter();
|
||||
|
||||
Reference in New Issue
Block a user