mirror of
https://gitee.com/dcren/initializr.git
synced 2025-04-05 17:38:06 +08:00
Add Gradle Kotlin DSL support
This commit refactors the existing Groovy DSL writers in order to share code between the Groovy DSL and Kotlin DSL writers. See gh-851
This commit is contained in:
parent
020d66be63
commit
239116b29a
@ -19,6 +19,7 @@ package io.spring.initializr.generator.spring.build;
|
||||
import io.spring.initializr.generator.buildsystem.Build;
|
||||
import io.spring.initializr.generator.buildsystem.DependencyScope;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnLanguage;
|
||||
@ -39,6 +40,7 @@ import org.springframework.context.annotation.Bean;
|
||||
* Project generation configuration for projects using any build system.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
@ProjectGenerationConfiguration
|
||||
public class BuildProjectGenerationConfiguration {
|
||||
@ -70,7 +72,7 @@ public class BuildProjectGenerationConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnLanguage(KotlinLanguage.ID)
|
||||
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
|
||||
@ConditionalOnBuildSystem({ GradleBuildSystem.ID, GradleKtsBuildSystem.ID })
|
||||
public KotlinJpaGradleBuildCustomizer kotlinJpaGradleBuildCustomizer(
|
||||
InitializrMetadata metadata, KotlinProjectSettings settings) {
|
||||
return new KotlinJpaGradleBuildCustomizer(metadata, settings);
|
||||
|
@ -29,11 +29,14 @@ import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.project.contributor.ProjectContributor;
|
||||
|
||||
/**
|
||||
* {@link ProjectContributor} for the project's {@code build.gradle} file.
|
||||
* {@link ProjectContributor} template for the project's {@code build.gradle} or
|
||||
* {@code build.gradle.kts} file. A subclass exists for each DSL.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
public class GradleBuildProjectContributor implements BuildWriter, ProjectContributor {
|
||||
public abstract class GradleBuildProjectContributor
|
||||
implements BuildWriter, ProjectContributor {
|
||||
|
||||
private final GradleBuildWriter buildWriter;
|
||||
|
||||
@ -41,21 +44,25 @@ public class GradleBuildProjectContributor implements BuildWriter, ProjectContri
|
||||
|
||||
private final IndentingWriterFactory indentingWriterFactory;
|
||||
|
||||
GradleBuildProjectContributor(GradleBuildWriter buildWriter, GradleBuild build,
|
||||
IndentingWriterFactory indentingWriterFactory) {
|
||||
private final String buildFileName;
|
||||
|
||||
protected GradleBuildProjectContributor(GradleBuildWriter buildWriter,
|
||||
GradleBuild build, IndentingWriterFactory indentingWriterFactory,
|
||||
String buildFileName) {
|
||||
this.buildWriter = buildWriter;
|
||||
this.build = build;
|
||||
this.indentingWriterFactory = indentingWriterFactory;
|
||||
this.buildFileName = buildFileName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void contribute(Path projectRoot) throws IOException {
|
||||
Path buildGradle = Files.createFile(projectRoot.resolve("build.gradle"));
|
||||
public final void contribute(Path projectRoot) throws IOException {
|
||||
Path buildGradle = Files.createFile(projectRoot.resolve(this.buildFileName));
|
||||
writeBuild(Files.newBufferedWriter(buildGradle));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeBuild(Writer out) throws IOException {
|
||||
public final void writeBuild(Writer out) throws IOException {
|
||||
try (IndentingWriter writer = this.indentingWriterFactory
|
||||
.createIndentingWriter("gradle", out)) {
|
||||
this.buildWriter.writeTo(writer, this.build);
|
||||
|
@ -23,7 +23,9 @@ import io.spring.initializr.generator.buildsystem.BuildItemResolver;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.Gradle3BuildWriter;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildWriter;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GroovyDslGradleBuildWriter;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.KotlinDslGradleBuildWriter;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnLanguage;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnPackaging;
|
||||
@ -35,6 +37,7 @@ import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
|
||||
import io.spring.initializr.generator.project.ResolvedProjectDescription;
|
||||
import io.spring.initializr.generator.spring.build.BuildCustomizer;
|
||||
import io.spring.initializr.generator.spring.util.LambdaSafe;
|
||||
import io.spring.initializr.metadata.InitializrMetadata;
|
||||
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@ -45,9 +48,10 @@ import org.springframework.context.annotation.Configuration;
|
||||
* Gradle as its build system.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
@ProjectGenerationConfiguration
|
||||
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
|
||||
@ConditionalOnBuildSystem({ GradleBuildSystem.ID, GradleKtsBuildSystem.ID })
|
||||
public class GradleProjectGenerationConfiguration {
|
||||
|
||||
private final IndentingWriterFactory indentingWriterFactory;
|
||||
@ -100,14 +104,24 @@ public class GradleProjectGenerationConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnPlatformVersion("2.0.0.M1")
|
||||
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
|
||||
public BuildCustomizer<GradleBuild> applyDependencyManagementPluginContributor() {
|
||||
return (build) -> build.applyPlugin("io.spring.dependency-management");
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
|
||||
public GradleBuildProjectContributor gradleBuildProjectContributor(
|
||||
GradleBuildWriter buildWriter, GradleBuild build) {
|
||||
return new GradleBuildProjectContributor(buildWriter, build,
|
||||
GroovyDslGradleBuildWriter buildWriter, GradleBuild build) {
|
||||
return new GroovyDslGradleBuildProjectContributor(buildWriter, build,
|
||||
this.indentingWriterFactory);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnBuildSystem(GradleKtsBuildSystem.ID)
|
||||
public KotlinDslGradleBuildProjectContributor gradleKtsBuildProjectContributor(
|
||||
KotlinDslGradleBuildWriter buildWriter, GradleBuild build) {
|
||||
return new KotlinDslGradleBuildProjectContributor(buildWriter, build,
|
||||
this.indentingWriterFactory);
|
||||
}
|
||||
|
||||
@ -116,6 +130,7 @@ public class GradleProjectGenerationConfiguration {
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnGradleVersion("3")
|
||||
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
|
||||
static class Gradle3ProjectGenerationConfiguration {
|
||||
|
||||
@Bean
|
||||
@ -152,6 +167,7 @@ public class GradleProjectGenerationConfiguration {
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnGradleVersion("4")
|
||||
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
|
||||
static class Gradle4ProjectGenerationConfiguration {
|
||||
|
||||
@Bean
|
||||
@ -176,21 +192,23 @@ public class GradleProjectGenerationConfiguration {
|
||||
}
|
||||
|
||||
/**
|
||||
* Configuration specific to projects using Gradle 4 or 5.
|
||||
* Configuration specific to projects using Gradle (Groovy DSL) 4 or 5.
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
|
||||
@ConditionalOnGradleVersion({ "4", "5" })
|
||||
static class Gradle4Or5ProjectGenerationConfiguration {
|
||||
|
||||
@Bean
|
||||
public GradleBuildWriter gradleBuildWriter() {
|
||||
return new GradleBuildWriter();
|
||||
public GroovyDslGradleBuildWriter gradleBuildWriter() {
|
||||
return new GroovyDslGradleBuildWriter();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SettingsGradleProjectContributor settingsGradleProjectContributor(
|
||||
GradleBuild build, IndentingWriterFactory indentingWriterFactory) {
|
||||
return new SettingsGradleProjectContributor(build, indentingWriterFactory);
|
||||
return new GroovyDslSettingsGradleProjectContributor(build,
|
||||
indentingWriterFactory);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ -207,4 +225,38 @@ public class GradleProjectGenerationConfiguration {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Configuration specific to projects using Gradle (Kotlin DSL).
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnBuildSystem(GradleKtsBuildSystem.ID)
|
||||
static class GradleKtsProjectGenerationConfiguration {
|
||||
|
||||
@Bean
|
||||
public KotlinDslGradleBuildWriter gradleKtsBuildWriter() {
|
||||
return new KotlinDslGradleBuildWriter();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public KotlinDslSettingsGradleProjectContributor settingsGradleKtsProjectContributor(
|
||||
GradleBuild build, IndentingWriterFactory indentingWriterFactory) {
|
||||
return new KotlinDslSettingsGradleProjectContributor(build,
|
||||
indentingWriterFactory);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public BuildCustomizer<GradleBuild> springBootPluginContributor(
|
||||
ResolvedProjectDescription projectDescription,
|
||||
InitializrMetadata metadata) {
|
||||
return (build) -> {
|
||||
build.addPlugin("org.springframework.boot",
|
||||
projectDescription.getPlatformVersion().toString());
|
||||
build.addPlugin("io.spring.dependency-management",
|
||||
metadata.getConfiguration().getEnv().getGradle()
|
||||
.getDependencyManagementPluginVersion());
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.build.gradle;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GroovyDslGradleBuildWriter;
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.project.contributor.ProjectContributor;
|
||||
|
||||
/**
|
||||
* {@link ProjectContributor} for the project's {@code build.gradle} file.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
public class GroovyDslGradleBuildProjectContributor
|
||||
extends GradleBuildProjectContributor {
|
||||
|
||||
GroovyDslGradleBuildProjectContributor(GroovyDslGradleBuildWriter buildWriter,
|
||||
GradleBuild build, IndentingWriterFactory indentingWriterFactory) {
|
||||
super(buildWriter, build, indentingWriterFactory, "build.gradle");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.build.gradle;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GroovyDslGradleSettingsWriter;
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.project.contributor.ProjectContributor;
|
||||
|
||||
/**
|
||||
* {@link ProjectContributor} for the project's {@code settings.gradle} file.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class GroovyDslSettingsGradleProjectContributor extends SettingsGradleProjectContributor {
|
||||
|
||||
GroovyDslSettingsGradleProjectContributor(GradleBuild build,
|
||||
IndentingWriterFactory indentingWriterFactory) {
|
||||
super(build, indentingWriterFactory, new GroovyDslGradleSettingsWriter(),
|
||||
"settings.gradle");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.build.gradle;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.KotlinDslGradleBuildWriter;
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.project.contributor.ProjectContributor;
|
||||
|
||||
/**
|
||||
* {@link ProjectContributor} for the project's {@code build.gradle.kts} file.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
public class KotlinDslGradleBuildProjectContributor
|
||||
extends GradleBuildProjectContributor {
|
||||
|
||||
KotlinDslGradleBuildProjectContributor(KotlinDslGradleBuildWriter buildWriter,
|
||||
GradleBuild build, IndentingWriterFactory indentingWriterFactory) {
|
||||
super(buildWriter, build, indentingWriterFactory, "build.gradle.kts");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.build.gradle;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.KotlinDslGradleSettingsWriter;
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.project.contributor.ProjectContributor;
|
||||
|
||||
/**
|
||||
* {@link ProjectContributor} for the project's {@code settings.gradle.kts} file.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class KotlinDslSettingsGradleProjectContributor extends SettingsGradleProjectContributor {
|
||||
|
||||
KotlinDslSettingsGradleProjectContributor(GradleBuild build,
|
||||
IndentingWriterFactory indentingWriterFactory) {
|
||||
super(build, indentingWriterFactory, new KotlinDslGradleSettingsWriter(),
|
||||
"settings.gradle.kts");
|
||||
}
|
||||
|
||||
}
|
@ -27,11 +27,13 @@ import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.project.contributor.ProjectContributor;
|
||||
|
||||
/**
|
||||
* {@link ProjectContributor} for the project's {@code settings.gradle} file.
|
||||
* {@link ProjectContributor} for the project's {@code settings.gradle}
|
||||
* {@code settings.gradle.kts} or file. A subclass exists for each of the DSLs.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class SettingsGradleProjectContributor implements ProjectContributor {
|
||||
abstract class SettingsGradleProjectContributor implements ProjectContributor {
|
||||
|
||||
private final GradleBuild build;
|
||||
|
||||
@ -39,16 +41,21 @@ class SettingsGradleProjectContributor implements ProjectContributor {
|
||||
|
||||
private final GradleSettingsWriter settingsWriter;
|
||||
|
||||
SettingsGradleProjectContributor(GradleBuild build,
|
||||
IndentingWriterFactory indentingWriterFactory) {
|
||||
private final String settingsFileName;
|
||||
|
||||
protected SettingsGradleProjectContributor(GradleBuild build,
|
||||
IndentingWriterFactory indentingWriterFactory,
|
||||
GradleSettingsWriter settingsWriter, String settingsFileName) {
|
||||
this.build = build;
|
||||
this.indentingWriterFactory = indentingWriterFactory;
|
||||
this.settingsWriter = new GradleSettingsWriter();
|
||||
this.settingsWriter = settingsWriter;
|
||||
this.settingsFileName = settingsFileName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void contribute(Path projectRoot) throws IOException {
|
||||
Path settingsGradle = Files.createFile(projectRoot.resolve("settings.gradle"));
|
||||
public final void contribute(Path projectRoot) throws IOException {
|
||||
Path settingsGradle = Files
|
||||
.createFile(projectRoot.resolve(this.settingsFileName));
|
||||
try (IndentingWriter writer = this.indentingWriterFactory.createIndentingWriter(
|
||||
"gradle", Files.newBufferedWriter(settingsGradle))) {
|
||||
this.settingsWriter.writeTo(writer, this.build);
|
||||
|
@ -20,6 +20,7 @@ import java.lang.reflect.Modifier;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.Build;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnPackaging;
|
||||
@ -44,6 +45,7 @@ import org.springframework.context.annotation.Configuration;
|
||||
* Default Groovy language contributors.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
@Configuration
|
||||
class GroovyProjectGenerationDefaultContributorsConfiguration {
|
||||
@ -121,7 +123,7 @@ class GroovyProjectGenerationDefaultContributorsConfiguration {
|
||||
* Configuration for Groovy projects built with Gradle.
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
|
||||
@ConditionalOnBuildSystem({ GradleBuildSystem.ID, GradleKtsBuildSystem.ID })
|
||||
static class GroovyGradleProjectConfiguration {
|
||||
|
||||
@Bean
|
||||
|
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.code.kotlin;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
|
||||
import io.spring.initializr.generator.spring.build.BuildCustomizer;
|
||||
|
||||
/**
|
||||
* {@link BuildCustomizer} for Kotlin projects build with Gradle (Groovy DSL).
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class GroovyDslKotlinGradleBuildCustomizer extends KotlinGradleBuildCustomizer {
|
||||
|
||||
GroovyDslKotlinGradleBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) {
|
||||
super(kotlinProjectSettings);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void customizeKotlinOptions(TaskCustomization compile) {
|
||||
compile.nested("kotlinOptions", (kotlinOptions) -> {
|
||||
String compilerArgs = this.settings.getCompilerArgs().stream()
|
||||
.map((arg) -> "'" + arg + "'").collect(Collectors.joining(", "));
|
||||
kotlinOptions.set("freeCompilerArgs", "[" + compilerArgs + "]");
|
||||
kotlinOptions.set("jvmTarget", "'" + this.settings.getJvmTarget() + "'");
|
||||
});
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.code.kotlin;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
|
||||
import io.spring.initializr.generator.spring.build.BuildCustomizer;
|
||||
|
||||
/**
|
||||
* {@link BuildCustomizer} for Kotlin projects build with Gradle (Kotlin DSL).
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class KotlinDslKotlinGradleBuildCustomizer extends KotlinGradleBuildCustomizer {
|
||||
|
||||
KotlinDslKotlinGradleBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) {
|
||||
super(kotlinProjectSettings);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void customizeKotlinOptions(TaskCustomization compile) {
|
||||
compile.nested("kotlinOptions", (kotlinOptions) -> {
|
||||
String compilerArgs = this.settings.getCompilerArgs().stream()
|
||||
.map((arg) -> "\"" + arg + "\"").collect(Collectors.joining(", "));
|
||||
kotlinOptions.set("freeCompilerArgs", "listOf(" + compilerArgs + ")");
|
||||
kotlinOptions.set("jvmTarget", "\"" + this.settings.getJvmTarget() + "\"");
|
||||
});
|
||||
}
|
||||
|
||||
}
|
@ -16,41 +16,33 @@
|
||||
|
||||
package io.spring.initializr.generator.spring.code.kotlin;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
|
||||
import io.spring.initializr.generator.spring.build.BuildCustomizer;
|
||||
|
||||
/**
|
||||
* {@link BuildCustomizer} for Kotlin projects build with Gradle.
|
||||
* {@link BuildCustomizer} template for Kotlin projects build with Gradle. A subclass
|
||||
* exists for each DSL.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class KotlinGradleBuildCustomizer implements BuildCustomizer<GradleBuild> {
|
||||
abstract class KotlinGradleBuildCustomizer implements BuildCustomizer<GradleBuild> {
|
||||
|
||||
private final KotlinProjectSettings settings;
|
||||
protected final KotlinProjectSettings settings;
|
||||
|
||||
KotlinGradleBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) {
|
||||
this.settings = kotlinProjectSettings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void customize(GradleBuild build) {
|
||||
public final void customize(GradleBuild build) {
|
||||
build.addPlugin("org.jetbrains.kotlin.jvm", this.settings.getVersion());
|
||||
build.addPlugin("org.jetbrains.kotlin.plugin.spring", this.settings.getVersion());
|
||||
build.customizeTasksWithType("org.jetbrains.kotlin.gradle.tasks.KotlinCompile",
|
||||
this::customizeKotlinOptions);
|
||||
}
|
||||
|
||||
private void customizeKotlinOptions(TaskCustomization compile) {
|
||||
compile.nested("kotlinOptions", (kotlinOptions) -> {
|
||||
String compilerArgs = this.settings.getCompilerArgs().stream()
|
||||
.map((arg) -> "'" + arg + "'").collect(Collectors.joining(", "));
|
||||
kotlinOptions.set("freeCompilerArgs", "[" + compilerArgs + "]");
|
||||
kotlinOptions.set("jvmTarget", "'" + this.settings.getJvmTarget() + "'");
|
||||
});
|
||||
}
|
||||
protected abstract void customizeKotlinOptions(TaskCustomization compile);
|
||||
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ package io.spring.initializr.generator.spring.code.kotlin;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.Build;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnPackaging;
|
||||
@ -47,6 +48,7 @@ import org.springframework.context.annotation.Configuration;
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Stephane Nicoll
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
@Configuration
|
||||
class KotlinProjectGenerationDefaultContributorsConfiguration {
|
||||
@ -155,7 +157,7 @@ class KotlinProjectGenerationDefaultContributorsConfiguration {
|
||||
}
|
||||
|
||||
/**
|
||||
* Configuration for Kotlin projects built with Gradle.
|
||||
* Configuration for Kotlin projects built with Gradle (Groovy DSL).
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@ -166,7 +168,24 @@ class KotlinProjectGenerationDefaultContributorsConfiguration {
|
||||
@Bean
|
||||
public KotlinGradleBuildCustomizer kotlinBuildCustomizer(
|
||||
KotlinProjectSettings kotlinProjectSettings) {
|
||||
return new KotlinGradleBuildCustomizer(kotlinProjectSettings);
|
||||
return new GroovyDslKotlinGradleBuildCustomizer(kotlinProjectSettings);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Configuration for Kotlin projects built with Gradle (Kotlin DSL).
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnBuildSystem(GradleKtsBuildSystem.ID)
|
||||
static class KotlinGradleKtsProjectConfiguration {
|
||||
|
||||
@Bean
|
||||
public KotlinDslKotlinGradleBuildCustomizer kotlinBuildCustomizer(
|
||||
KotlinProjectSettings kotlinProjectSettings) {
|
||||
return new KotlinDslKotlinGradleBuildCustomizer(kotlinProjectSettings);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
package io.spring.initializr.generator.spring.scm.git;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
|
||||
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
|
||||
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
|
||||
@ -56,7 +57,7 @@ public class GitProjectGenerationConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
|
||||
@ConditionalOnBuildSystem({ GradleBuildSystem.ID, GradleKtsBuildSystem.ID })
|
||||
public GitIgnoreCustomizer gradleGitIgnoreCustomizer() {
|
||||
return (gitIgnore) -> {
|
||||
gitIgnore.getGeneral().add(".gradle", "/build/",
|
||||
|
@ -20,6 +20,7 @@ import java.util.stream.Stream;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.BuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
|
||||
import io.spring.initializr.generator.language.Language;
|
||||
import io.spring.initializr.generator.language.groovy.GroovyLanguage;
|
||||
@ -45,6 +46,7 @@ import org.springframework.core.io.ClassPathResource;
|
||||
* Build compliance tests.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class BuildComplianceTests extends AbstractComplianceTests {
|
||||
|
||||
@ -54,13 +56,19 @@ class BuildComplianceTests extends AbstractComplianceTests {
|
||||
|
||||
private static final Language kotlin = new KotlinLanguage();
|
||||
|
||||
static Stream<Arguments> parameters() {
|
||||
static Stream<Arguments> previousGenerationParameters() {
|
||||
return Stream.of(
|
||||
Arguments.arguments(BuildSystem.forId(MavenBuildSystem.ID), "pom.xml"),
|
||||
Arguments.arguments(BuildSystem.forId(GradleBuildSystem.ID),
|
||||
"build.gradle"));
|
||||
}
|
||||
|
||||
static Stream<Arguments> parameters() {
|
||||
return Stream.concat(previousGenerationParameters(),
|
||||
Stream.of(Arguments.arguments(BuildSystem.forId(GradleKtsBuildSystem.ID),
|
||||
"build.gradle.kts")));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("parameters")
|
||||
void currentGenerationJarJava(BuildSystem build, String fileName) {
|
||||
@ -117,19 +125,19 @@ class BuildComplianceTests extends AbstractComplianceTests {
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("parameters")
|
||||
@MethodSource("previousGenerationParameters")
|
||||
void previousGenerationJarJava(BuildSystem build, String fileName) {
|
||||
testPreviousGenerationJar(java, build, fileName);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("parameters")
|
||||
@MethodSource("previousGenerationParameters")
|
||||
void previousGenerationJarGroovy(BuildSystem build, String fileName) {
|
||||
testPreviousGenerationJar(groovy, build, fileName);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("parameters")
|
||||
@MethodSource("previousGenerationParameters")
|
||||
void previousGenerationJarKotlin(BuildSystem build, String fileName) {
|
||||
testPreviousGenerationJar(kotlin, build, fileName);
|
||||
}
|
||||
|
@ -0,0 +1,163 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.build.gradle;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.Dependency;
|
||||
import io.spring.initializr.generator.buildsystem.DependencyScope;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
|
||||
import io.spring.initializr.generator.language.java.JavaLanguage;
|
||||
import io.spring.initializr.generator.packaging.war.WarPackaging;
|
||||
import io.spring.initializr.generator.project.ProjectDescription;
|
||||
import io.spring.initializr.generator.spring.build.BuildProjectGenerationConfiguration;
|
||||
import io.spring.initializr.generator.spring.build.BuildWriter;
|
||||
import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder;
|
||||
import io.spring.initializr.generator.test.project.ProjectAssetTester;
|
||||
import io.spring.initializr.generator.test.project.ProjectStructure;
|
||||
import io.spring.initializr.generator.version.Version;
|
||||
import io.spring.initializr.metadata.InitializrMetadata;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
import org.springframework.util.StreamUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link GradleProjectGenerationConfiguration} with Kotlin DSL build system.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class GradleKtsProjectGenerationConfigurationTests {
|
||||
|
||||
private ProjectAssetTester projectTester;
|
||||
|
||||
@BeforeEach
|
||||
void setup(@TempDir Path directory) {
|
||||
this.projectTester = new ProjectAssetTester().withIndentingWriterFactory()
|
||||
.withConfiguration(BuildProjectGenerationConfiguration.class,
|
||||
GradleProjectGenerationConfiguration.class)
|
||||
.withDirectory(directory)
|
||||
.withBean(InitializrMetadata.class,
|
||||
() -> InitializrMetadataTestBuilder.withDefaults().build())
|
||||
.withDescriptionCustomizer((description) -> description
|
||||
.setBuildSystem(new GradleKtsBuildSystem()));
|
||||
}
|
||||
|
||||
static Stream<Arguments> supportedPlatformVersions() {
|
||||
// previous versions use gradle < 5, where Kotlin DSL is not supported
|
||||
return Stream.of(Arguments.arguments("2.1.3.RELEASE"));
|
||||
}
|
||||
|
||||
@ParameterizedTest(name = "Spring Boot {0}")
|
||||
@MethodSource("supportedPlatformVersions")
|
||||
void buildWriterIsContributed(String platformVersion) {
|
||||
ProjectDescription description = new ProjectDescription();
|
||||
description.setPlatformVersion(Version.parse(platformVersion));
|
||||
description.setLanguage(new JavaLanguage());
|
||||
BuildWriter buildWriter = this.projectTester.generate(description,
|
||||
(context) -> context.getBean(BuildWriter.class));
|
||||
assertThat(buildWriter)
|
||||
.isInstanceOf(KotlinDslGradleBuildProjectContributor.class);
|
||||
}
|
||||
|
||||
static Stream<Arguments> gradleWrapperParameters() {
|
||||
return Stream.of(Arguments.arguments("2.1.3.RELEASE", "5.2.1"));
|
||||
}
|
||||
|
||||
@ParameterizedTest(name = "Spring Boot {0}")
|
||||
@MethodSource("gradleWrapperParameters")
|
||||
void gradleWrapperIsContributedWhenGeneratingGradleKtsProject(String platformVersion,
|
||||
String expectedGradleVersion) throws IOException {
|
||||
ProjectDescription description = new ProjectDescription();
|
||||
description.setPlatformVersion(Version.parse(platformVersion));
|
||||
description.setLanguage(new JavaLanguage());
|
||||
ProjectStructure projectStructure = this.projectTester.generate(description);
|
||||
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
|
||||
assertThat(relativePaths).contains("gradlew", "gradlew.bat",
|
||||
"gradle/wrapper/gradle-wrapper.properties",
|
||||
"gradle/wrapper/gradle-wrapper.jar");
|
||||
try (Stream<String> lines = Files.lines(
|
||||
projectStructure.resolve("gradle/wrapper/gradle-wrapper.properties"))) {
|
||||
assertThat(lines.filter((line) -> line
|
||||
.contains(String.format("gradle-%s-bin.zip", expectedGradleVersion))))
|
||||
.hasSize(1);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildDotGradleDotKtsIsContributedWhenGeneratingGradleKtsProject()
|
||||
throws IOException {
|
||||
ProjectDescription description = new ProjectDescription();
|
||||
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
|
||||
description.setLanguage(new JavaLanguage("11"));
|
||||
description.addDependency("acme",
|
||||
new Dependency("com.example", "acme", DependencyScope.COMPILE));
|
||||
ProjectStructure projectStructure = this.projectTester.generate(description);
|
||||
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
|
||||
assertThat(relativePaths).contains("build.gradle.kts");
|
||||
Path path = projectStructure.resolve("build.gradle.kts");
|
||||
String[] lines = readAllLines(path);
|
||||
assertThat(lines).containsExactly("plugins {",
|
||||
" id(\"org.springframework.boot\") version \"2.1.0.RELEASE\"",
|
||||
" id(\"io.spring.dependency-management\") version \"1.0.6.RELEASE\"",
|
||||
" java", "}", "", "group = \"com.example\"",
|
||||
"version = \"0.0.1-SNAPSHOT\"",
|
||||
"java.sourceCompatibility = JavaVersion.VERSION_11", "", "repositories {",
|
||||
" mavenCentral()", "}", "", "dependencies {",
|
||||
" implementation(\"org.springframework.boot:spring-boot-starter\")",
|
||||
" implementation(\"com.example:acme\")",
|
||||
" testImplementation(\"org.springframework.boot:spring-boot-starter-test\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void warPluginIsAppliedWhenBuildingProjectThatUsesWarPackaging() throws IOException {
|
||||
ProjectDescription description = new ProjectDescription();
|
||||
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
|
||||
description.setLanguage(new JavaLanguage());
|
||||
description.setPackaging(new WarPackaging());
|
||||
ProjectStructure projectStructure = this.projectTester.generate(description);
|
||||
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
|
||||
assertThat(relativePaths).contains("build.gradle.kts");
|
||||
try (Stream<String> lines = Files
|
||||
.lines(projectStructure.resolve("build.gradle.kts"))) {
|
||||
assertThat(lines.filter((line) -> line.contains(" war"))).hasSize(1);
|
||||
}
|
||||
}
|
||||
|
||||
private static String[] readAllLines(Path file) throws IOException {
|
||||
String content = StreamUtils.copyToString(
|
||||
new FileInputStream(new File(file.toString())), StandardCharsets.UTF_8);
|
||||
String[] lines = content.split("\\r?\\n");
|
||||
assertThat(content).endsWith(System.lineSeparator());
|
||||
return lines;
|
||||
}
|
||||
|
||||
}
|
@ -46,9 +46,10 @@ import org.junit.jupiter.params.provider.MethodSource;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link GradleProjectGenerationConfiguration}.
|
||||
* Tests for {@link GradleProjectGenerationConfiguration} with Groovy DSL build system.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class GradleProjectGenerationConfigurationTests {
|
||||
|
||||
@ -81,6 +82,8 @@ class GradleProjectGenerationConfigurationTests {
|
||||
BuildWriter buildWriter = this.projectTester.generate(description,
|
||||
(context) -> context.getBean(BuildWriter.class));
|
||||
assertThat(buildWriter).isInstanceOf(GradleBuildProjectContributor.class);
|
||||
assertThat(buildWriter)
|
||||
.isNotInstanceOf(KotlinDslGradleBuildProjectContributor.class);
|
||||
}
|
||||
|
||||
static Stream<Arguments> gradleWrapperParameters() {
|
||||
|
@ -22,7 +22,7 @@ import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildWriter;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GroovyDslGradleBuildWriter;
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.io.SimpleIndentStrategy;
|
||||
import io.spring.initializr.generator.test.io.TextTestUtils;
|
||||
@ -32,19 +32,21 @@ import org.junit.jupiter.api.io.TempDir;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link GradleBuildProjectContributor}.
|
||||
* Tests for {@link GroovyDslGradleBuildProjectContributor}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Stephane Nicoll
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class GradleBuildProjectContributorTests {
|
||||
class GroovyDslGradleBuildProjectContributorTests {
|
||||
|
||||
@Test
|
||||
void gradleBuildIsContributedInProjectStructure(@TempDir Path projectDir)
|
||||
throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
new GradleBuildProjectContributor(new GradleBuildWriter(), build,
|
||||
IndentingWriterFactory.withDefaultSettings()).contribute(projectDir);
|
||||
new GroovyDslGradleBuildProjectContributor(new GroovyDslGradleBuildWriter(),
|
||||
build, IndentingWriterFactory.withDefaultSettings())
|
||||
.contribute(projectDir);
|
||||
Path buildGradle = projectDir.resolve("build.gradle");
|
||||
assertThat(buildGradle).isRegularFile();
|
||||
}
|
||||
@ -81,8 +83,8 @@ class GradleBuildProjectContributorTests {
|
||||
private List<String> generateBuild(GradleBuild build,
|
||||
IndentingWriterFactory indentingWriterFactory) throws IOException {
|
||||
StringWriter writer = new StringWriter();
|
||||
new GradleBuildProjectContributor(new GradleBuildWriter(), build,
|
||||
indentingWriterFactory).writeBuild(writer);
|
||||
new GroovyDslGradleBuildProjectContributor(new GroovyDslGradleBuildWriter(),
|
||||
build, indentingWriterFactory).writeBuild(writer);
|
||||
return TextTestUtils.readAllLines(writer.toString());
|
||||
}
|
||||
|
@ -31,11 +31,12 @@ import org.junit.jupiter.api.io.TempDir;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link SettingsGradleProjectContributor}.
|
||||
* Tests for {@link GroovyDslSettingsGradleProjectContributor}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class SettingsGradleProjectContributorTests {
|
||||
class GroovyDslSettingsGradleProjectContributorTests {
|
||||
|
||||
@TempDir
|
||||
Path directory;
|
||||
@ -77,7 +78,7 @@ class SettingsGradleProjectContributorTests {
|
||||
private List<String> generateSettings(GradleBuild build,
|
||||
IndentingWriterFactory indentingWriterFactory) throws IOException {
|
||||
Path projectDir = Files.createTempDirectory(this.directory, "project-");
|
||||
new SettingsGradleProjectContributor(build, indentingWriterFactory)
|
||||
new GroovyDslSettingsGradleProjectContributor(build, indentingWriterFactory)
|
||||
.contribute(projectDir);
|
||||
return new ProjectStructure(projectDir).readAllLines("settings.gradle");
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.build.gradle;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.KotlinDslGradleBuildWriter;
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.io.SimpleIndentStrategy;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link KotlinDslGradleBuildProjectContributor}.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class KotlinDslGradleBuildProjectContributorTests {
|
||||
|
||||
@Test
|
||||
void gradleBuildIsContributedInProjectStructure(@TempDir Path projectDir)
|
||||
throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
new KotlinDslGradleBuildProjectContributor(new KotlinDslGradleBuildWriter(),
|
||||
build, IndentingWriterFactory.withDefaultSettings())
|
||||
.contribute(projectDir);
|
||||
Path buildGradleKts = projectDir.resolve("build.gradle.kts");
|
||||
assertThat(buildGradleKts).isRegularFile();
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildIsContributedToProject() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.setGroup("com.example");
|
||||
build.setVersion("1.0.0-SNAPSHOT");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("group = \"com.example\"",
|
||||
"version = \"1.0.0-SNAPSHOT\"");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildIsContributedUsingGradleContentId() throws IOException {
|
||||
IndentingWriterFactory indentingWriterFactory = IndentingWriterFactory
|
||||
.create(new SimpleIndentStrategy(" "), (factory) -> factory
|
||||
.indentingStrategy("gradle", new SimpleIndentStrategy(" ")));
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.addPlugin("java");
|
||||
List<String> lines = generateBuild(build, indentingWriterFactory);
|
||||
assertThat(lines).containsSequence("plugins {", " java", "}");
|
||||
}
|
||||
|
||||
private List<String> generateBuild(GradleBuild build) throws IOException {
|
||||
return generateBuild(build, IndentingWriterFactory.withDefaultSettings());
|
||||
}
|
||||
|
||||
private List<String> generateBuild(GradleBuild build,
|
||||
IndentingWriterFactory indentingWriterFactory) throws IOException {
|
||||
StringWriter writer = new StringWriter();
|
||||
new KotlinDslGradleBuildProjectContributor(new KotlinDslGradleBuildWriter(),
|
||||
build, indentingWriterFactory).writeBuild(writer);
|
||||
return Arrays.asList(writer.toString().split("\\r?\\n"));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.build.gradle;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.io.SimpleIndentStrategy;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link KotlinDslSettingsGradleProjectContributor}.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class KotlinDslSettingsGradleProjectContributorTests {
|
||||
|
||||
@TempDir
|
||||
Path directory;
|
||||
|
||||
@Test
|
||||
void gradleSettingsIsContributedToProject() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.pluginRepositories().add("maven-central");
|
||||
List<String> lines = generateSettings(build);
|
||||
assertThat(lines).containsSequence("pluginManagement {", " repositories {",
|
||||
" mavenCentral()", " gradlePluginPortal()", " }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleSettingsIsContributedUsingGradleContentId() throws IOException {
|
||||
IndentingWriterFactory indentingWriterFactory = IndentingWriterFactory
|
||||
.create(new SimpleIndentStrategy(" "), (factory) -> factory
|
||||
.indentingStrategy("gradle", new SimpleIndentStrategy(" ")));
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.pluginRepositories().add("maven-central");
|
||||
List<String> lines = generateSettings(build, indentingWriterFactory);
|
||||
assertThat(lines).containsSequence("pluginManagement {", " repositories {",
|
||||
" mavenCentral()", " gradlePluginPortal()", " }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleSettingsDoesNotUseRepositories() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.repositories().add("maven-central");
|
||||
List<String> lines = generateSettings(build);
|
||||
assertThat(lines).containsSequence("pluginManagement {", " repositories {",
|
||||
" gradlePluginPortal()", " }", "}");
|
||||
}
|
||||
|
||||
private List<String> generateSettings(GradleBuild build) throws IOException {
|
||||
return generateSettings(build, IndentingWriterFactory.withDefaultSettings());
|
||||
}
|
||||
|
||||
private List<String> generateSettings(GradleBuild build,
|
||||
IndentingWriterFactory indentingWriterFactory) throws IOException {
|
||||
Path projectDir = Files.createTempDirectory(this.directory, "project-");
|
||||
new KotlinDslSettingsGradleProjectContributor(build, indentingWriterFactory)
|
||||
.contribute(projectDir);
|
||||
Path settingsGradle = projectDir.resolve("settings.gradle.kts");
|
||||
assertThat(settingsGradle).isRegularFile();
|
||||
return Files.readAllLines(settingsGradle);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.spring.code.kotlin;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link GroovyDslKotlinGradleBuildCustomizer}.
|
||||
*
|
||||
* @author Andy Wilkinson <<<<<<<
|
||||
* HEAD:initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/code/kotlin/KotlinGradleBuildCustomizerTests.java
|
||||
* @author Jean-Baptiste Nizet ======= >>>>>>> 7ec6a29a... Configure spring project
|
||||
* generation using Gradle Kotlin
|
||||
* DSL:initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/code/kotlin/GroovyDslKotlinGradleBuildCustomizerTests.java
|
||||
*/
|
||||
class GroovyDslKotlinGradleBuildCustomizerTests {
|
||||
|
||||
@Test
|
||||
void kotlinPluginsAreConfigured() {
|
||||
GradleBuild build = new GradleBuild();
|
||||
new GroovyDslKotlinGradleBuildCustomizer(
|
||||
new SimpleKotlinProjectSettings("1.2.70")).customize(build);
|
||||
assertThat(build.getPlugins()).hasSize(2);
|
||||
assertThat(build.getPlugins().get(0).getId())
|
||||
.isEqualTo("org.jetbrains.kotlin.jvm");
|
||||
assertThat(build.getPlugins().get(0).getVersion()).isEqualTo("1.2.70");
|
||||
assertThat(build.getPlugins().get(1).getId())
|
||||
.isEqualTo("org.jetbrains.kotlin.plugin.spring");
|
||||
assertThat(build.getPlugins().get(1).getVersion()).isEqualTo("1.2.70");
|
||||
}
|
||||
|
||||
@Test
|
||||
void kotlinCompilationTasksAreCustomized() {
|
||||
GradleBuild build = new GradleBuild();
|
||||
new GroovyDslKotlinGradleBuildCustomizer(
|
||||
new SimpleKotlinProjectSettings("1.2.70")).customize(build);
|
||||
assertThat(build.getTasksWithTypeCustomizations()).hasSize(1);
|
||||
assertThat(build.getTasksWithTypeCustomizations()).containsKeys("KotlinCompile");
|
||||
assertKotlinOptions(build.getTasksWithTypeCustomizations().get("KotlinCompile"));
|
||||
}
|
||||
|
||||
private void assertKotlinOptions(TaskCustomization compileTask) {
|
||||
assertThat(compileTask.getAssignments()).isEmpty();
|
||||
assertThat(compileTask.getInvocations()).isEmpty();
|
||||
assertThat(compileTask.getNested()).hasSize(1);
|
||||
TaskCustomization kotlinOptions = compileTask.getNested().get("kotlinOptions");
|
||||
assertThat(kotlinOptions.getInvocations()).hasSize(0);
|
||||
assertThat(kotlinOptions.getNested()).hasSize(0);
|
||||
assertThat(kotlinOptions.getAssignments()).hasSize(2);
|
||||
assertThat(kotlinOptions.getAssignments())
|
||||
.containsEntry("freeCompilerArgs", "['-Xjsr305=strict']")
|
||||
.containsEntry("jvmTarget", "'1.8'");
|
||||
}
|
||||
|
||||
}
|
@ -23,17 +23,17 @@ import org.junit.jupiter.api.Test;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link KotlinGradleBuildCustomizer}.
|
||||
* Tests for {@link KotlinDslKotlinGradleBuildCustomizer}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class KotlinGradleBuildCustomizerTests {
|
||||
class KotlinDslKotlinGradleBuildCustomizerTests {
|
||||
|
||||
@Test
|
||||
void kotlinPluginsAreConfigured() {
|
||||
GradleBuild build = new GradleBuild();
|
||||
new KotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70"))
|
||||
.customize(build);
|
||||
new KotlinDslKotlinGradleBuildCustomizer(
|
||||
new SimpleKotlinProjectSettings("1.2.70")).customize(build);
|
||||
assertThat(build.getPlugins()).hasSize(2);
|
||||
assertThat(build.getPlugins().get(0).getId())
|
||||
.isEqualTo("org.jetbrains.kotlin.jvm");
|
||||
@ -46,10 +46,8 @@ class KotlinGradleBuildCustomizerTests {
|
||||
@Test
|
||||
void kotlinCompilationTasksAreCustomized() {
|
||||
GradleBuild build = new GradleBuild();
|
||||
new KotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70"))
|
||||
.customize(build);
|
||||
assertThat(build.getImportedTypes())
|
||||
.contains("org.jetbrains.kotlin.gradle.tasks.KotlinCompile");
|
||||
new KotlinDslKotlinGradleBuildCustomizer(
|
||||
new SimpleKotlinProjectSettings("1.2.70")).customize(build);
|
||||
assertThat(build.getTasksWithTypeCustomizations()).hasSize(1);
|
||||
assertThat(build.getTasksWithTypeCustomizations()).containsKeys("KotlinCompile");
|
||||
assertKotlinOptions(build.getTasksWithTypeCustomizations().get("KotlinCompile"));
|
||||
@ -64,8 +62,8 @@ class KotlinGradleBuildCustomizerTests {
|
||||
assertThat(kotlinOptions.getNested()).hasSize(0);
|
||||
assertThat(kotlinOptions.getAssignments()).hasSize(2);
|
||||
assertThat(kotlinOptions.getAssignments())
|
||||
.containsEntry("freeCompilerArgs", "['-Xjsr305=strict']")
|
||||
.containsEntry("jvmTarget", "'1.8'");
|
||||
.containsEntry("freeCompilerArgs", "listOf(\"-Xjsr305=strict\")")
|
||||
.containsEntry("jvmTarget", "\"1.8\"");
|
||||
}
|
||||
|
||||
}
|
@ -80,7 +80,7 @@ public class InitializrMetadataTestBuilder {
|
||||
}
|
||||
|
||||
public InitializrMetadataTestBuilder addAllDefaults() {
|
||||
return addBasicDefaults().setGradleEnv("0.5.1.RELEASE").setKotlinEnv("1.1.1");
|
||||
return addBasicDefaults().setGradleEnv("1.0.6.RELEASE").setKotlinEnv("1.1.1");
|
||||
}
|
||||
|
||||
public InitializrMetadataTestBuilder addBasicDefaults() {
|
||||
|
@ -0,0 +1,26 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
java
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
configurations {
|
||||
compileOnly {
|
||||
extendsFrom(configurations.annotationProcessor.get())
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
java
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.acme:foo")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
||||
|
||||
dependencyManagement {
|
||||
imports {
|
||||
mavenBom("org.acme:bar-bom:1.0")
|
||||
mavenBom("org.acme:biz-bom:1.0")
|
||||
mavenBom("org.acme:foo-bom:1.0")
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
java
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
extra["fooVersion"] = "1.3.3"
|
||||
|
||||
dependencies {
|
||||
implementation("org.acme:foo")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
||||
|
||||
dependencyManagement {
|
||||
imports {
|
||||
mavenBom("org.acme:foo-bom:${fooVersion}")
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
java
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||
compileOnly("org.acme:foo")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
.gradle
|
||||
/build/
|
||||
!gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
/out/
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
@ -0,0 +1,30 @@
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
kotlin("jvm") version "1.1.1"
|
||||
kotlin("plugin.spring") version "1.1.1"
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_11
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter")
|
||||
implementation("org.jetbrains.kotlin:kotlin-reflect")
|
||||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
kotlinOptions {
|
||||
freeCompilerArgs = listOf("-Xjsr305=strict")
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
java
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url = uri("https://example.com/foo") }
|
||||
maven { url = uri("https://example.com/bar") }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.acme:bar")
|
||||
implementation("org.acme:foo")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.2.0.M1"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
java
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url = uri("https://repo.spring.io/snapshot") }
|
||||
maven { url = uri("https://repo.spring.io/milestone") }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.acme:foo")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
java
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
extra["springBarVersion"] = "0.2.0.RELEASE"
|
||||
extra["spring-foo.version"] = "0.1.0.RELEASE"
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
groovy
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter")
|
||||
implementation("org.codehaus.groovy:groovy")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
war
|
||||
groovy
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||
implementation("org.codehaus.groovy:groovy")
|
||||
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
java
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
java
|
||||
war
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
kotlin("jvm") version "1.1.1"
|
||||
kotlin("plugin.spring") version "1.1.1"
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter")
|
||||
implementation("org.jetbrains.kotlin:kotlin-reflect")
|
||||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
kotlinOptions {
|
||||
freeCompilerArgs = listOf("-Xjsr305=strict")
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
plugins {
|
||||
id("org.springframework.boot") version "2.1.1.RELEASE"
|
||||
id("io.spring.dependency-management") version "1.0.6.RELEASE"
|
||||
war
|
||||
kotlin("jvm") version "1.1.1"
|
||||
kotlin("plugin.spring") version "1.1.1"
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
version = "0.0.1-SNAPSHOT"
|
||||
java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||
implementation("org.jetbrains.kotlin:kotlin-reflect")
|
||||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
|
||||
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
kotlinOptions {
|
||||
freeCompilerArgs = listOf("-Xjsr305=strict")
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
}
|
@ -19,11 +19,11 @@ package io.spring.initializr.generator.buildsystem.gradle;
|
||||
import io.spring.initializr.generator.buildsystem.DependencyScope;
|
||||
|
||||
/**
|
||||
* A {@link GradleBuildWriter} suitable for Gradle 3.
|
||||
* A {@link GroovyDslGradleBuildWriter} suitable for Gradle 3.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
public class Gradle3BuildWriter extends GradleBuildWriter {
|
||||
public class Gradle3BuildWriter extends GroovyDslGradleBuildWriter {
|
||||
|
||||
protected String configurationForScope(DependencyScope type) {
|
||||
switch (type) {
|
||||
|
@ -43,23 +43,26 @@ import io.spring.initializr.generator.version.VersionProperty;
|
||||
import io.spring.initializr.generator.version.VersionReference;
|
||||
|
||||
/**
|
||||
* A {@link GradleBuild} writer for {@code build.gradle}.
|
||||
* A {@link GradleBuild} writer template for build.gradle and build.gradle.kts. A subclass
|
||||
* of this class exists for the Groovy DSL and for the Kotlin DSL.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Stephane Nicoll
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
public class GradleBuildWriter {
|
||||
public abstract class GradleBuildWriter {
|
||||
|
||||
public void writeTo(IndentingWriter writer, GradleBuild build) throws IOException {
|
||||
public final void writeTo(IndentingWriter writer, GradleBuild build)
|
||||
throws IOException {
|
||||
writeImports(writer, build);
|
||||
boolean buildScriptWritten = writeBuildscript(writer, build);
|
||||
writePlugins(writer, build, buildScriptWritten);
|
||||
writeBuildscript(writer, build);
|
||||
writePlugins(writer, build);
|
||||
writeProperty(writer, "group", build.getGroup());
|
||||
writeProperty(writer, "version", build.getVersion());
|
||||
writeProperty(writer, "sourceCompatibility", build.getSourceCompatibility());
|
||||
writeJavaSourceCompatibility(writer, build);
|
||||
writer.println();
|
||||
writeConfigurations(writer, build);
|
||||
writeRepositories(writer, build, writer::println);
|
||||
writeRepositories(writer, build);
|
||||
writeProperties(writer, build);
|
||||
writeDependencies(writer, build);
|
||||
writeBoms(writer, build);
|
||||
@ -75,61 +78,12 @@ public class GradleBuildWriter {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean writeBuildscript(IndentingWriter writer, GradleBuild build) {
|
||||
List<String> dependencies = build.getBuildscript().getDependencies();
|
||||
Map<String, String> ext = build.getBuildscript().getExt();
|
||||
if (dependencies.isEmpty() && ext.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
writer.println("buildscript {");
|
||||
writer.indented(() -> {
|
||||
writeBuildscriptExt(writer, build);
|
||||
writeBuildscriptRepositories(writer, build);
|
||||
writeBuildscriptDependencies(writer, build);
|
||||
});
|
||||
writer.println("}");
|
||||
return true;
|
||||
}
|
||||
protected abstract void writeBuildscript(IndentingWriter writer, GradleBuild build);
|
||||
|
||||
private void writeBuildscriptExt(IndentingWriter writer, GradleBuild build) {
|
||||
writeNestedMap(writer, "ext", build.getBuildscript().getExt(),
|
||||
(key, value) -> key + " = " + value);
|
||||
}
|
||||
protected abstract void writePlugins(IndentingWriter writer, GradleBuild build);
|
||||
|
||||
private void writeBuildscriptRepositories(IndentingWriter writer, GradleBuild build) {
|
||||
writeRepositories(writer, build);
|
||||
}
|
||||
|
||||
private void writeBuildscriptDependencies(IndentingWriter writer, GradleBuild build) {
|
||||
writeNestedCollection(writer, "dependencies",
|
||||
build.getBuildscript().getDependencies(),
|
||||
(dependency) -> "classpath '" + dependency + "'");
|
||||
}
|
||||
|
||||
private void writePlugins(IndentingWriter writer, GradleBuild build,
|
||||
boolean buildScriptWritten) {
|
||||
writeNestedCollection(writer, "plugins", build.getPlugins(), this::pluginAsString,
|
||||
determineBeforeWriting(buildScriptWritten, writer));
|
||||
writeCollection(writer, build.getAppliedPlugins(),
|
||||
(plugin) -> "apply plugin: '" + plugin + "'", writer::println);
|
||||
writer.println();
|
||||
}
|
||||
|
||||
private Runnable determineBeforeWriting(boolean buildScriptWritten,
|
||||
IndentingWriter writer) {
|
||||
if (buildScriptWritten) {
|
||||
return writer::println;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String pluginAsString(GradlePlugin plugin) {
|
||||
String string = "id '" + plugin.getId() + "'";
|
||||
if (plugin.getVersion() != null) {
|
||||
string += " version '" + plugin.getVersion() + "'";
|
||||
}
|
||||
return string;
|
||||
}
|
||||
protected abstract void writeJavaSourceCompatibility(IndentingWriter writer,
|
||||
GradleBuild build);
|
||||
|
||||
private void writeConfigurations(IndentingWriter writer, GradleBuild build) {
|
||||
Map<String, ConfigurationCustomization> configurationCustomizations = build
|
||||
@ -137,43 +91,24 @@ public class GradleBuildWriter {
|
||||
if (configurationCustomizations.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
writer.println();
|
||||
writer.println("configurations {");
|
||||
writer.indented(() -> configurationCustomizations.forEach((name,
|
||||
customization) -> writeConfiguration(writer, name, customization)));
|
||||
writer.println("}");
|
||||
writer.println("");
|
||||
}
|
||||
|
||||
private void writeConfiguration(IndentingWriter writer, String configurationName,
|
||||
ConfigurationCustomization configurationCustomization) {
|
||||
if (configurationCustomization.getExtendsFrom().isEmpty()) {
|
||||
writer.println(configurationName);
|
||||
}
|
||||
else {
|
||||
writer.println(configurationName + " {");
|
||||
writer.indented(() -> writer.println(String.format("extendsFrom %s",
|
||||
String.join(", ", configurationCustomization.getExtendsFrom()))));
|
||||
writer.println("}");
|
||||
}
|
||||
}
|
||||
protected abstract void writeConfiguration(IndentingWriter writer,
|
||||
String configurationName,
|
||||
ConfigurationCustomization configurationCustomization);
|
||||
|
||||
private void writeRepositories(IndentingWriter writer, GradleBuild build) {
|
||||
writeRepositories(writer, build, null);
|
||||
}
|
||||
|
||||
private void writeRepositories(IndentingWriter writer, GradleBuild build,
|
||||
Runnable beforeWriting) {
|
||||
protected final void writeRepositories(IndentingWriter writer, GradleBuild build) {
|
||||
writeNestedCollection(writer, "repositories",
|
||||
build.repositories().items().collect(Collectors.toList()),
|
||||
this::repositoryAsString, beforeWriting);
|
||||
this::repositoryAsString);
|
||||
}
|
||||
|
||||
private String repositoryAsString(MavenRepository repository) {
|
||||
if (MavenRepository.MAVEN_CENTRAL.equals(repository)) {
|
||||
return "mavenCentral()";
|
||||
}
|
||||
return "maven { url '" + repository.getUrl() + "' }";
|
||||
}
|
||||
protected abstract String repositoryAsString(MavenRepository repository);
|
||||
|
||||
private void writeProperties(IndentingWriter writer, GradleBuild build) {
|
||||
if (build.getExt().isEmpty() && build.getVersionProperties().isEmpty()) {
|
||||
@ -182,19 +117,17 @@ public class GradleBuildWriter {
|
||||
Map<String, String> allProperties = new LinkedHashMap<>(build.getExt());
|
||||
build.getVersionProperties().entrySet().forEach((entry) -> allProperties
|
||||
.put(getVersionPropertyKey(entry), "'" + entry.getValue() + "'"));
|
||||
writeNestedCollection(writer, "ext", allProperties.entrySet(),
|
||||
(e) -> getFormattedProperty(e.getKey(), e.getValue()), writer::println);
|
||||
writeExtraProperties(writer, allProperties);
|
||||
}
|
||||
|
||||
protected abstract void writeExtraProperties(IndentingWriter writer,
|
||||
Map<String, String> allProperties);
|
||||
|
||||
private String getVersionPropertyKey(Entry<VersionProperty, String> entry) {
|
||||
return entry.getKey().isInternal() ? entry.getKey().toCamelCaseFormat()
|
||||
: entry.getKey().toStandardFormat();
|
||||
}
|
||||
|
||||
private String getFormattedProperty(String key, String value) {
|
||||
return String.format("set('%s', %s)", key, value);
|
||||
}
|
||||
|
||||
private void writeDependencies(IndentingWriter writer, GradleBuild build) {
|
||||
Set<Dependency> sortedDependencies = new LinkedHashSet<>();
|
||||
DependencyContainer dependencies = build.dependencies();
|
||||
@ -216,15 +149,7 @@ public class GradleBuildWriter {
|
||||
this::dependencyAsString, writer::println);
|
||||
}
|
||||
|
||||
private String dependencyAsString(Dependency dependency) {
|
||||
String quoteStyle = determineQuoteStyle(dependency.getVersion());
|
||||
String version = determineVersion(dependency.getVersion());
|
||||
String type = dependency.getType();
|
||||
return configurationForScope(dependency.getScope()) + " " + quoteStyle
|
||||
+ dependency.getGroupId() + ":" + dependency.getArtifactId()
|
||||
+ ((version != null) ? ":" + version : "")
|
||||
+ ((type != null) ? "@" + type : "") + quoteStyle;
|
||||
}
|
||||
protected abstract String dependencyAsString(Dependency dependency);
|
||||
|
||||
protected String configurationForScope(DependencyScope type) {
|
||||
switch (type) {
|
||||
@ -263,23 +188,18 @@ public class GradleBuildWriter {
|
||||
}
|
||||
|
||||
private String bomAsString(BillOfMaterials bom) {
|
||||
String quoteStyle = determineQuoteStyle(bom.getVersion());
|
||||
String version = determineVersion(bom.getVersion());
|
||||
return "mavenBom " + quoteStyle + bom.getGroupId() + ":" + bom.getArtifactId()
|
||||
+ ":" + version + quoteStyle;
|
||||
return bomAsString(bom, version);
|
||||
}
|
||||
|
||||
private String determineQuoteStyle(VersionReference versionReference) {
|
||||
return (versionReference != null && versionReference.isProperty()) ? "\"" : "'";
|
||||
}
|
||||
protected abstract String bomAsString(BillOfMaterials bom, String version);
|
||||
|
||||
private String determineVersion(VersionReference versionReference) {
|
||||
protected final String determineVersion(VersionReference versionReference) {
|
||||
if (versionReference != null) {
|
||||
if (versionReference.isProperty()) {
|
||||
VersionProperty property = versionReference.getProperty();
|
||||
return "${"
|
||||
+ (property.isInternal() ? property.toCamelCaseFormat()
|
||||
: "property('" + property.toStandardFormat() + "')")
|
||||
return "${" + (property.isInternal() ? property.toCamelCaseFormat()
|
||||
: externalVersionPropertyAsString(property.toStandardFormat()))
|
||||
+ "}";
|
||||
}
|
||||
return versionReference.getValue();
|
||||
@ -287,33 +207,17 @@ public class GradleBuildWriter {
|
||||
return null;
|
||||
}
|
||||
|
||||
private void writeTasksWithTypeCustomizations(IndentingWriter writer,
|
||||
GradleBuild build) {
|
||||
Map<String, GradleBuild.TaskCustomization> tasksWithTypeCustomizations = build
|
||||
.getTasksWithTypeCustomizations();
|
||||
tasksWithTypeCustomizations.forEach((typeName, customization) -> {
|
||||
writer.println();
|
||||
writer.println("tasks.withType(" + typeName + ") {");
|
||||
writer.indented(() -> writeTaskCustomization(writer, customization));
|
||||
writer.println("}");
|
||||
});
|
||||
}
|
||||
protected abstract String externalVersionPropertyAsString(String standardFormat);
|
||||
|
||||
private void writeTaskCustomizations(IndentingWriter writer, GradleBuild build) {
|
||||
Map<String, TaskCustomization> taskCustomizations = build.getTaskCustomizations();
|
||||
taskCustomizations.forEach((name, customization) -> {
|
||||
writer.println();
|
||||
writer.println(name + " {");
|
||||
writer.indented(() -> writeTaskCustomization(writer, customization));
|
||||
writer.println("}");
|
||||
});
|
||||
}
|
||||
protected abstract void writeTasksWithTypeCustomizations(IndentingWriter writer,
|
||||
GradleBuild build);
|
||||
|
||||
private void writeTaskCustomization(IndentingWriter writer,
|
||||
protected abstract void writeTaskCustomizations(IndentingWriter writer,
|
||||
GradleBuild build);
|
||||
|
||||
protected final void writeTaskCustomization(IndentingWriter writer,
|
||||
TaskCustomization customization) {
|
||||
writeCollection(writer, customization.getInvocations(),
|
||||
(invocation) -> invocation.getTarget() + " "
|
||||
+ String.join(", ", invocation.getArguments()));
|
||||
writeCollection(writer, customization.getInvocations(), this::invocationAsString);
|
||||
writeMap(writer, customization.getAssignments(),
|
||||
(key, value) -> key + " = " + value);
|
||||
customization.getNested().forEach((property, nestedCustomization) -> {
|
||||
@ -323,12 +227,14 @@ public class GradleBuildWriter {
|
||||
});
|
||||
}
|
||||
|
||||
private <T> void writeNestedCollection(IndentingWriter writer, String name,
|
||||
protected abstract String invocationAsString(TaskCustomization.Invocation invocation);
|
||||
|
||||
protected final <T> void writeNestedCollection(IndentingWriter writer, String name,
|
||||
Collection<T> collection, Function<T, String> itemToStringConverter) {
|
||||
this.writeNestedCollection(writer, name, collection, itemToStringConverter, null);
|
||||
}
|
||||
|
||||
private <T> void writeNestedCollection(IndentingWriter writer, String name,
|
||||
protected final <T> void writeNestedCollection(IndentingWriter writer, String name,
|
||||
Collection<T> collection, Function<T, String> converter,
|
||||
Runnable beforeWriting) {
|
||||
if (!collection.isEmpty()) {
|
||||
@ -347,8 +253,9 @@ public class GradleBuildWriter {
|
||||
writeCollection(writer, collection, converter, null);
|
||||
}
|
||||
|
||||
private <T> void writeCollection(IndentingWriter writer, Collection<T> collection,
|
||||
Function<T, String> itemToStringConverter, Runnable beforeWriting) {
|
||||
protected final <T> void writeCollection(IndentingWriter writer,
|
||||
Collection<T> collection, Function<T, String> itemToStringConverter,
|
||||
Runnable beforeWriting) {
|
||||
if (!collection.isEmpty()) {
|
||||
if (beforeWriting != null) {
|
||||
beforeWriting.run();
|
||||
@ -357,25 +264,13 @@ public class GradleBuildWriter {
|
||||
}
|
||||
}
|
||||
|
||||
private <T, U> void writeNestedMap(IndentingWriter writer, String name, Map<T, U> map,
|
||||
BiFunction<T, U, String> converter) {
|
||||
if (!map.isEmpty()) {
|
||||
writer.println(name + " {");
|
||||
writer.indented(() -> writeMap(writer, map, converter));
|
||||
writer.println("}");
|
||||
}
|
||||
}
|
||||
|
||||
private <T, U> void writeMap(IndentingWriter writer, Map<T, U> map,
|
||||
protected final <T, U> void writeMap(IndentingWriter writer, Map<T, U> map,
|
||||
BiFunction<T, U, String> converter) {
|
||||
map.forEach((key, value) -> writer.println(converter.apply(key, value)));
|
||||
}
|
||||
|
||||
private void writeProperty(IndentingWriter writer, String name, String value) {
|
||||
if (value != null) {
|
||||
writer.println(String.format("%s = '%s'", name, value));
|
||||
}
|
||||
}
|
||||
protected abstract void writeProperty(IndentingWriter writer, String name,
|
||||
String value);
|
||||
|
||||
private static Collection<Dependency> filterDependencies(
|
||||
DependencyContainer dependencies, DependencyScope... types) {
|
||||
|
@ -22,15 +22,19 @@ import io.spring.initializr.generator.buildsystem.MavenRepository;
|
||||
import io.spring.initializr.generator.io.IndentingWriter;
|
||||
|
||||
/**
|
||||
* A {@link GradleBuild} writer for {@code settings.gradle}.
|
||||
* A {@link GradleBuild} writer template for {@code settings.gradle} and
|
||||
* {@code settings.gradle.kts}. A subclass of this class exists for the Groovy DSL and for
|
||||
* the Kotlin DSL.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
public class GradleSettingsWriter {
|
||||
public abstract class GradleSettingsWriter {
|
||||
|
||||
public void writeTo(IndentingWriter writer, GradleBuild build) throws IOException {
|
||||
public final void writeTo(IndentingWriter writer, GradleBuild build)
|
||||
throws IOException {
|
||||
writePluginManagement(writer, build);
|
||||
writer.println("rootProject.name = '" + build.getArtifact() + "'");
|
||||
writer.println("rootProject.name = " + wrapWithQuotes(build.getArtifact()));
|
||||
}
|
||||
|
||||
private void writePluginManagement(IndentingWriter writer, GradleBuild build) {
|
||||
@ -62,7 +66,8 @@ public class GradleSettingsWriter {
|
||||
writer.indented(() -> {
|
||||
writer.println("eachPlugin {");
|
||||
writer.indented(() -> {
|
||||
writer.println("if (requested.id.id == 'org.springframework.boot') {");
|
||||
writer.println("if (requested.id.id == "
|
||||
+ wrapWithQuotes("org.springframework.boot") + ") {");
|
||||
writer.indented(() -> writer.println(
|
||||
"useModule(\"org.springframework.boot:spring-boot-gradle-plugin:${requested.version}\")"));
|
||||
writer.println("}");
|
||||
@ -76,7 +81,11 @@ public class GradleSettingsWriter {
|
||||
if (MavenRepository.MAVEN_CENTRAL.equals(repository)) {
|
||||
return "mavenCentral()";
|
||||
}
|
||||
return "maven { url '" + repository.getUrl() + "' }";
|
||||
return "maven { " + urlAssignment(repository.getUrl()) + " }";
|
||||
}
|
||||
|
||||
protected abstract String wrapWithQuotes(String value);
|
||||
|
||||
protected abstract String urlAssignment(String url);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,202 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.buildsystem.gradle;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.BillOfMaterials;
|
||||
import io.spring.initializr.generator.buildsystem.Dependency;
|
||||
import io.spring.initializr.generator.buildsystem.MavenRepository;
|
||||
import io.spring.initializr.generator.io.IndentingWriter;
|
||||
import io.spring.initializr.generator.version.VersionReference;
|
||||
|
||||
/**
|
||||
* A {@link GradleBuild} writer for {@code build.gradle}.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
public class GroovyDslGradleBuildWriter extends GradleBuildWriter {
|
||||
|
||||
@Override
|
||||
protected void writeBuildscript(IndentingWriter writer, GradleBuild build) {
|
||||
List<String> dependencies = build.getBuildscript().getDependencies();
|
||||
Map<String, String> ext = build.getBuildscript().getExt();
|
||||
if (dependencies.isEmpty() && ext.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
writer.println("buildscript {");
|
||||
writer.indented(() -> {
|
||||
writeBuildscriptExt(writer, build);
|
||||
writeBuildscriptRepositories(writer, build);
|
||||
writeBuildscriptDependencies(writer, build);
|
||||
});
|
||||
writer.println("}");
|
||||
writer.println();
|
||||
}
|
||||
|
||||
private void writeBuildscriptExt(IndentingWriter writer, GradleBuild build) {
|
||||
writeNestedMap(writer, "ext", build.getBuildscript().getExt(),
|
||||
(key, value) -> key + " = " + value);
|
||||
}
|
||||
|
||||
private void writeBuildscriptRepositories(IndentingWriter writer, GradleBuild build) {
|
||||
writeRepositories(writer, build);
|
||||
}
|
||||
|
||||
private void writeBuildscriptDependencies(IndentingWriter writer, GradleBuild build) {
|
||||
writeNestedCollection(writer, "dependencies",
|
||||
build.getBuildscript().getDependencies(),
|
||||
(dependency) -> "classpath '" + dependency + "'");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writePlugins(IndentingWriter writer, GradleBuild build) {
|
||||
writeNestedCollection(writer, "plugins", build.getPlugins(),
|
||||
this::pluginAsString);
|
||||
writeCollection(writer, build.getAppliedPlugins(),
|
||||
(plugin) -> "apply plugin: '" + plugin + "'", writer::println);
|
||||
writer.println();
|
||||
}
|
||||
|
||||
private String pluginAsString(GradlePlugin plugin) {
|
||||
String string = "id '" + plugin.getId() + "'";
|
||||
if (plugin.getVersion() != null) {
|
||||
string += " version '" + plugin.getVersion() + "'";
|
||||
}
|
||||
return string;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeJavaSourceCompatibility(IndentingWriter writer,
|
||||
GradleBuild build) {
|
||||
writeProperty(writer, "sourceCompatibility", build.getSourceCompatibility());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeConfiguration(IndentingWriter writer, String configurationName,
|
||||
GradleBuild.ConfigurationCustomization configurationCustomization) {
|
||||
if (configurationCustomization.getExtendsFrom().isEmpty()) {
|
||||
writer.println(configurationName);
|
||||
}
|
||||
else {
|
||||
writer.println(configurationName + " {");
|
||||
writer.indented(() -> writer.println(String.format("extendsFrom %s",
|
||||
String.join(", ", configurationCustomization.getExtendsFrom()))));
|
||||
writer.println("}");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String repositoryAsString(MavenRepository repository) {
|
||||
if (MavenRepository.MAVEN_CENTRAL.equals(repository)) {
|
||||
return "mavenCentral()";
|
||||
}
|
||||
return "maven { url '" + repository.getUrl() + "' }";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeExtraProperties(IndentingWriter writer,
|
||||
Map<String, String> allProperties) {
|
||||
writeNestedCollection(writer, "ext", allProperties.entrySet(),
|
||||
(e) -> getFormattedExtraProperty(e.getKey(), e.getValue()),
|
||||
writer::println);
|
||||
}
|
||||
|
||||
private String getFormattedExtraProperty(String key, String value) {
|
||||
return String.format("set('%s', '%s')", key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String dependencyAsString(Dependency dependency) {
|
||||
String quoteStyle = determineQuoteStyle(dependency.getVersion());
|
||||
String version = determineVersion(dependency.getVersion());
|
||||
String type = dependency.getType();
|
||||
return configurationForScope(dependency.getScope()) + " " + quoteStyle
|
||||
+ dependency.getGroupId() + ":" + dependency.getArtifactId()
|
||||
+ ((version != null) ? ":" + version : "")
|
||||
+ ((type != null) ? "@" + type : "") + quoteStyle;
|
||||
}
|
||||
|
||||
private String determineQuoteStyle(VersionReference versionReference) {
|
||||
return (versionReference != null && versionReference.isProperty()) ? "\"" : "'";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bomAsString(BillOfMaterials bom, String version) {
|
||||
String quoteStyle = determineQuoteStyle(bom.getVersion());
|
||||
return "mavenBom " + quoteStyle + bom.getGroupId() + ":" + bom.getArtifactId()
|
||||
+ ":" + version + quoteStyle;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String externalVersionPropertyAsString(String standardFormat) {
|
||||
return "property('" + standardFormat + "')";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeTasksWithTypeCustomizations(IndentingWriter writer,
|
||||
GradleBuild build) {
|
||||
Map<String, GradleBuild.TaskCustomization> tasksWithTypeCustomizations = build
|
||||
.getTasksWithTypeCustomizations();
|
||||
|
||||
tasksWithTypeCustomizations.forEach((typeName, customization) -> {
|
||||
writer.println();
|
||||
writer.println("tasks.withType(" + typeName + ") {");
|
||||
writer.indented(() -> writeTaskCustomization(writer, customization));
|
||||
writer.println("}");
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeTaskCustomizations(IndentingWriter writer, GradleBuild build) {
|
||||
Map<String, GradleBuild.TaskCustomization> taskCustomizations = build
|
||||
.getTaskCustomizations();
|
||||
|
||||
taskCustomizations.forEach((name, customization) -> {
|
||||
writer.println();
|
||||
writer.println(name + " {");
|
||||
writer.indented(() -> writeTaskCustomization(writer, customization));
|
||||
writer.println("}");
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String invocationAsString(
|
||||
GradleBuild.TaskCustomization.Invocation invocation) {
|
||||
return invocation.getTarget() + " "
|
||||
+ String.join(", ", invocation.getArguments());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeProperty(IndentingWriter writer, String name, String value) {
|
||||
if (value != null) {
|
||||
writer.println(String.format("%s = '%s'", name, value));
|
||||
}
|
||||
}
|
||||
|
||||
private <T, U> void writeNestedMap(IndentingWriter writer, String name, Map<T, U> map,
|
||||
BiFunction<T, U, String> converter) {
|
||||
if (!map.isEmpty()) {
|
||||
writer.println(name + " {");
|
||||
writer.indented(() -> writeMap(writer, map, converter));
|
||||
writer.println("}");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.buildsystem.gradle;
|
||||
|
||||
/**
|
||||
* A {@link GradleBuild} writer for {@code settings.gradle}.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
public class GroovyDslGradleSettingsWriter extends GradleSettingsWriter {
|
||||
|
||||
@Override
|
||||
protected String wrapWithQuotes(String value) {
|
||||
return "'" + value + "'";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String urlAssignment(String url) {
|
||||
return "url " + wrapWithQuotes(url);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,203 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.buildsystem.gradle;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.BillOfMaterials;
|
||||
import io.spring.initializr.generator.buildsystem.Dependency;
|
||||
import io.spring.initializr.generator.buildsystem.MavenRepository;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.ConfigurationCustomization;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
|
||||
import io.spring.initializr.generator.io.IndentingWriter;
|
||||
|
||||
/**
|
||||
* A {@link GradleBuild} writer for {@code build.gradle.kts}.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
|
||||
|
||||
private static final Map<String, String> sourceCompatibilitiesToJavaVersion = createSourceCompatibilitiesToJavaVersion();
|
||||
|
||||
private static Map<String, String> createSourceCompatibilitiesToJavaVersion() {
|
||||
Map<String, String> result = new HashMap<>();
|
||||
for (int version = 6; version <= 10; version++) {
|
||||
result.put(Integer.toString(version), "VERSION_1_" + version);
|
||||
result.put("1." + version, "VERSION_1_" + version);
|
||||
}
|
||||
for (int version = 11; version <= 12; version++) {
|
||||
result.put(Integer.toString(version), "VERSION_" + version);
|
||||
result.put("1." + version, "VERSION_" + version);
|
||||
}
|
||||
|
||||
return Collections.unmodifiableMap(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeBuildscript(IndentingWriter writer, GradleBuild build) {
|
||||
if (!(build.getBuildscript().getDependencies().isEmpty()
|
||||
&& build.getBuildscript().getExt().isEmpty())) {
|
||||
throw new IllegalStateException(
|
||||
"build.gradle.kts scripts shouldn't need a buildscript");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writePlugins(IndentingWriter writer, GradleBuild build) {
|
||||
writeNestedCollection(writer, "plugins", build.getPlugins(), this::pluginAsString,
|
||||
null);
|
||||
writer.println();
|
||||
|
||||
if (!build.getAppliedPlugins().isEmpty()) {
|
||||
throw new IllegalStateException(
|
||||
"build.gradle.kts scripts shouldn't apply plugins. They should use the plugins block instead.");
|
||||
}
|
||||
}
|
||||
|
||||
private String pluginAsString(GradlePlugin plugin) {
|
||||
String result = shortPluginNotation(plugin.getId());
|
||||
if (result == null) {
|
||||
result = "id(\"" + plugin.getId() + "\")";
|
||||
}
|
||||
if (plugin.getVersion() != null) {
|
||||
result += " version \"" + plugin.getVersion() + "\"";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private String shortPluginNotation(String pluginId) {
|
||||
if (pluginId.equals("java") || pluginId.equals("war")
|
||||
|| pluginId.equals("groovy")) {
|
||||
return pluginId;
|
||||
}
|
||||
|
||||
String kotlinPluginPrefix = "org.jetbrains.kotlin.";
|
||||
if (pluginId.startsWith(kotlinPluginPrefix)) {
|
||||
return "kotlin(\"" + pluginId.substring(kotlinPluginPrefix.length()) + "\")";
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeJavaSourceCompatibility(IndentingWriter writer,
|
||||
GradleBuild build) {
|
||||
writer.println("java.sourceCompatibility = JavaVersion."
|
||||
+ sourceCompatibilitiesToJavaVersion.get(build.getSourceCompatibility()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeConfiguration(IndentingWriter writer, String configurationName,
|
||||
ConfigurationCustomization configurationCustomization) {
|
||||
if (configurationCustomization.getExtendsFrom().isEmpty()) {
|
||||
writer.println(configurationName);
|
||||
}
|
||||
else {
|
||||
writer.println(configurationName + " {");
|
||||
writer.indented(() -> writer.println(String.format("extendsFrom(%s)",
|
||||
configurationCustomization.getExtendsFrom().stream()
|
||||
.map((c) -> "configurations." + c + ".get()")
|
||||
.collect(Collectors.joining(", ")))));
|
||||
writer.println("}");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String repositoryAsString(MavenRepository repository) {
|
||||
if (MavenRepository.MAVEN_CENTRAL.equals(repository)) {
|
||||
return "mavenCentral()";
|
||||
}
|
||||
return "maven { url = uri(\"" + repository.getUrl() + "\") }";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String dependencyAsString(Dependency dependency) {
|
||||
String version = determineVersion(dependency.getVersion());
|
||||
String type = dependency.getType();
|
||||
return configurationForScope(dependency.getScope()) + "(\""
|
||||
+ dependency.getGroupId() + ":" + dependency.getArtifactId()
|
||||
+ ((version != null) ? ":" + version : "")
|
||||
+ ((type != null) ? "@" + type : "") + "\")";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeExtraProperties(IndentingWriter writer,
|
||||
Map<String, String> allProperties) {
|
||||
writeCollection(writer, allProperties.entrySet(),
|
||||
(e) -> getFormattedExtraProperty(e.getKey(), e.getValue()),
|
||||
writer::println);
|
||||
}
|
||||
|
||||
private String getFormattedExtraProperty(String key, String value) {
|
||||
return String.format("extra[\"%s\"] = \"%s\"", key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bomAsString(BillOfMaterials bom, String version) {
|
||||
return "mavenBom(\"" + bom.getGroupId() + ":" + bom.getArtifactId() + ":"
|
||||
+ version + "\")";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String externalVersionPropertyAsString(String standardFormat) {
|
||||
return "property(\"" + standardFormat + "\")";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeTasksWithTypeCustomizations(IndentingWriter writer,
|
||||
GradleBuild build) {
|
||||
Map<String, TaskCustomization> tasksWithTypeCustomizations = build
|
||||
.getTasksWithTypeCustomizations();
|
||||
|
||||
tasksWithTypeCustomizations.forEach((typeName, customization) -> {
|
||||
writer.println();
|
||||
writer.println("tasks.withType<" + typeName + "> {");
|
||||
writer.indented(() -> writeTaskCustomization(writer, customization));
|
||||
writer.println("}");
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeTaskCustomizations(IndentingWriter writer, GradleBuild build) {
|
||||
Map<String, TaskCustomization> taskCustomizations = build.getTaskCustomizations();
|
||||
|
||||
taskCustomizations.forEach((name, customization) -> {
|
||||
writer.println();
|
||||
writer.println("tasks." + name + " {");
|
||||
writer.indented(() -> writeTaskCustomization(writer, customization));
|
||||
writer.println("}");
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String invocationAsString(TaskCustomization.Invocation invocation) {
|
||||
return invocation.getTarget() + "(" + String.join(", ", invocation.getArguments())
|
||||
+ ")";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeProperty(IndentingWriter writer, String name, String value) {
|
||||
if (value != null) {
|
||||
writer.println(String.format("%s = \"%s\"", name, value));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.buildsystem.gradle;
|
||||
|
||||
/**
|
||||
* A {@link GradleBuild} writer for {@code settings.gradle.kts}.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
public class KotlinDslGradleSettingsWriter extends GradleSettingsWriter {
|
||||
|
||||
@Override
|
||||
protected String wrapWithQuotes(String value) {
|
||||
return "\"" + value + "\"";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String urlAssignment(String url) {
|
||||
return "url = uri(\"" + url + "\")";
|
||||
}
|
||||
|
||||
}
|
@ -30,13 +30,13 @@ import org.junit.jupiter.api.Test;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link GradleBuildWriter}
|
||||
* Tests for {@link GroovyDslGradleBuildWriter}
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
class GradleBuildWriterTests {
|
||||
class GroovyDslGradleBuildWriterTests {
|
||||
|
||||
@Test
|
||||
void gradleBuildWithCoordinates() throws IOException {
|
||||
@ -426,7 +426,7 @@ class GradleBuildWriterTests {
|
||||
}
|
||||
|
||||
private List<String> generateBuild(GradleBuild build) throws IOException {
|
||||
GradleBuildWriter writer = new GradleBuildWriter();
|
||||
GradleBuildWriter writer = new GroovyDslGradleBuildWriter();
|
||||
StringWriter out = new StringWriter();
|
||||
writer.writeTo(new IndentingWriter(out), build);
|
||||
return TextTestUtils.readAllLines(out.toString());
|
@ -27,11 +27,12 @@ import org.junit.jupiter.api.Test;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link GradleSettingsWriter}.
|
||||
* Tests for {@link GroovyDslGradleSettingsWriter}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class GradleSettingsWriterTests {
|
||||
class GroovyDslGradleSettingsWriterTests {
|
||||
|
||||
@Test
|
||||
void gradleBuildWithMavenCentralPluginRepository() throws IOException {
|
||||
@ -81,7 +82,7 @@ class GradleSettingsWriterTests {
|
||||
}
|
||||
|
||||
private List<String> generateSettings(GradleBuild build) throws IOException {
|
||||
GradleSettingsWriter writer = new GradleSettingsWriter();
|
||||
GradleSettingsWriter writer = new GroovyDslGradleSettingsWriter();
|
||||
StringWriter out = new StringWriter();
|
||||
writer.writeTo(new IndentingWriter(out), build);
|
||||
return TextTestUtils.readAllLines(out.toString());
|
@ -0,0 +1,457 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.buildsystem.gradle;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.DependencyScope;
|
||||
import io.spring.initializr.generator.io.IndentingWriter;
|
||||
import io.spring.initializr.generator.version.VersionProperty;
|
||||
import io.spring.initializr.generator.version.VersionReference;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||
|
||||
/**
|
||||
* Tests for {@link KotlinDslGradleBuildWriter}
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class KotlinDslGradleBuildWriterTests {
|
||||
|
||||
@Test
|
||||
void gradleBuildWithImports() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.addImportedType(
|
||||
"org.springframework.boot.gradle.tasks.buildinfo.BuildInfo");
|
||||
build.addImportedType("org.jetbrains.kotlin.gradle.tasks.KotlinCompile");
|
||||
build.addImportedType("org.jetbrains.kotlin.gradle.tasks.KotlinCompile"); // same
|
||||
// import
|
||||
// added
|
||||
// twice
|
||||
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines.subList(0, 3)).containsExactly(
|
||||
"import org.jetbrains.kotlin.gradle.tasks.KotlinCompile",
|
||||
"import org.springframework.boot.gradle.tasks.buildinfo.BuildInfo", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithCoordinates() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.setGroup("com.example");
|
||||
build.setVersion("1.0.1-SNAPSHOT");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).contains("group = \"com.example\"",
|
||||
"version = \"1.0.1-SNAPSHOT\"");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithSourceCompatibility11() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.setSourceCompatibility("11");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).contains("java.sourceCompatibility = JavaVersion.VERSION_11");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithSourceCompatibility1Dot8() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.setSourceCompatibility("1.8");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).contains("java.sourceCompatibility = JavaVersion.VERSION_1_8");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithBuildscriptDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.buildscript((buildscript) -> buildscript.dependency(
|
||||
"org.springframework.boot:spring-boot-gradle-plugin:2.1.0.RELEASE"));
|
||||
|
||||
assertThatIllegalStateException().isThrownBy(() -> {
|
||||
generateBuild(build);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithBuildscriptExtProperty() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.buildscript((buildscript) -> buildscript.ext("kotlinVersion", "\1.2.51\""));
|
||||
assertThatIllegalStateException().isThrownBy(() -> {
|
||||
generateBuild(build);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithBuiltinPlugin() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.addPlugin("java");
|
||||
build.addPlugin("war");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("plugins {", " java", " war", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithKotlinPluginAndVersion() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.addPlugin("org.jetbrains.kotlin.jvm", "1.3.21");
|
||||
build.addPlugin("org.jetbrains.kotlin.plugin.spring", "1.3.21");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("plugins {",
|
||||
" kotlin(\"jvm\") version \"1.3.21\"",
|
||||
" kotlin(\"plugin.spring\") version \"1.3.21\"", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithPluginAndVersion() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.addPlugin("org.springframework.boot", "2.1.0.RELEASE");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("plugins {",
|
||||
" id(\"org.springframework.boot\") version \"2.1.0.RELEASE\"", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithApplyPlugin() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.applyPlugin("io.spring.dependency-management");
|
||||
|
||||
assertThatIllegalStateException().isThrownBy(() -> generateBuild(build));
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithMavenCentralRepository() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.repositories().add("maven-central");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("repositories {", " mavenCentral()", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithRepository() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.repositories().add("spring-milestones", "Spring Milestones",
|
||||
"https://repo.spring.io/milestone");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("repositories {",
|
||||
" maven { url = uri(\"https://repo.spring.io/milestone\") }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithSnapshotRepository() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.repositories().add("spring-snapshots", "Spring Snapshots",
|
||||
"https://repo.spring.io/snapshot", true);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("repositories {",
|
||||
" maven { url = uri(\"https://repo.spring.io/snapshot\") }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithPluginRepository() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.pluginRepositories().add("spring-milestones", "Spring Milestones",
|
||||
"https://repo.spring.io/milestone");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).doesNotContain("repositories {");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithTaskWithTypesCustomizedWithNestedAssignments()
|
||||
throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.customizeTasksWithType("KotlinCompile", (task) -> {
|
||||
task.nested("kotlinOptions", (kotlinOptions) -> {
|
||||
kotlinOptions.set("freeCompilerArgs", "listOf(\"-Xjsr305=strict\")");
|
||||
kotlinOptions.set("jvmTarget", "\"1.8\"");
|
||||
});
|
||||
});
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("tasks.withType<KotlinCompile> {",
|
||||
" kotlinOptions {",
|
||||
" freeCompilerArgs = listOf(\"-Xjsr305=strict\")",
|
||||
" jvmTarget = \"1.8\"", " }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithTaskCustomizedWithInvocations() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.customizeTask("asciidoctor", (task) -> {
|
||||
task.invoke("inputs.dir", "snippetsDir");
|
||||
task.invoke("dependsOn", "test");
|
||||
});
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("tasks.asciidoctor {",
|
||||
" inputs.dir(snippetsDir)", " dependsOn(test)", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithTaskCustomizedWithAssignments() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.customizeTask("compileKotlin", (task) -> {
|
||||
task.set("kotlinOptions.freeCompilerArgs", "listOf(\"-Xjsr305=strict\")");
|
||||
task.set("kotlinOptions.jvmTarget", "\"1.8\"");
|
||||
});
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("tasks.compileKotlin {",
|
||||
" kotlinOptions.freeCompilerArgs = listOf(\"-Xjsr305=strict\")",
|
||||
" kotlinOptions.jvmTarget = \"1.8\"", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithTaskCustomizedWithNestedCustomization() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.customizeTask("compileKotlin", (compileKotlin) -> compileKotlin
|
||||
.nested("kotlinOptions", (kotlinOptions) -> {
|
||||
kotlinOptions.set("freeCompilerArgs", "listOf(\"-Xjsr305=strict\")");
|
||||
kotlinOptions.set("jvmTarget", "\"1.8\"");
|
||||
}));
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("tasks.compileKotlin {", " kotlinOptions {",
|
||||
" freeCompilerArgs = listOf(\"-Xjsr305=strict\")",
|
||||
" jvmTarget = \"1.8\"", " }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithExt() throws Exception {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.setGroup("com.example.demo");
|
||||
build.setArtifact("demo");
|
||||
build.ext("java.version", "1.8").ext("alpha", "a");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("extra[\"alpha\"] = \"a\"",
|
||||
"extra[\"java.version\"] = \"1.8\"");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithVersionProperties() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.addVersionProperty(VersionProperty.of("version.property"), "1.2.3");
|
||||
build.addInternalVersionProperty("internal.property", "4.5.6");
|
||||
build.addExternalVersionProperty("external.property", "7.8.9");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("extra[\"external.property\"] = \"7.8.9\"",
|
||||
"extra[\"internalProperty\"] = \"4.5.6\"",
|
||||
"extra[\"versionProperty\"] = \"1.2.3\"");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithVersionedDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("kotlin-stdlib", "org.jetbrains.kotlin",
|
||||
"kotlin-stdlib-jdk8", VersionReference.ofProperty("kotlin.version"),
|
||||
DependencyScope.COMPILE);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" implementation(\"org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithExternalVersionedDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("acme", "com.example", "acme",
|
||||
VersionReference.ofProperty(VersionProperty.of("acme.version", false)),
|
||||
DependencyScope.COMPILE);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" implementation(\"com.example:acme:${property(\"acme.version\")}\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithExtAndVersionProperties() throws Exception {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.setGroup("com.example.demo");
|
||||
build.setArtifact("demo");
|
||||
build.addInternalVersionProperty("test-version", "1.0");
|
||||
build.addExternalVersionProperty("alpha-version", "0.1");
|
||||
build.ext("myProperty", "42");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("extra[\"myProperty\"] = \"42\"",
|
||||
"extra[\"alpha-version\"] = \"0.1\"", "extra[\"testVersion\"] = \"1.0\"");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithConfiguration() throws Exception {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.addConfiguration("developmentOnly");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("configurations {", " developmentOnly",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithConfigurationCustomization() throws Exception {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.customizeConfiguration("developmentOnly",
|
||||
(configuration) -> configuration.extendsFrom("compile"));
|
||||
build.customizeConfiguration("developmentOnly",
|
||||
(configuration) -> configuration.extendsFrom("testCompile"));
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("configurations {", " developmentOnly {",
|
||||
" extendsFrom(configurations.compile.get(), configurations.testCompile.get())",
|
||||
" }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithConfigurationCustomizations() throws Exception {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.customizeConfiguration("developmentOnly",
|
||||
(configuration) -> configuration.extendsFrom("compile"));
|
||||
build.customizeConfiguration("testOnly",
|
||||
(configuration) -> configuration.extendsFrom("testCompile"));
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("configurations {", " developmentOnly {",
|
||||
" extendsFrom(configurations.compile.get())", " }",
|
||||
" testOnly {", " extendsFrom(configurations.testCompile.get())",
|
||||
" }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithAnnotationProcessorDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("annotation-processor", "org.springframework.boot",
|
||||
"spring-boot-configuration-processor",
|
||||
DependencyScope.ANNOTATION_PROCESSOR);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" annotationProcessor(\"org.springframework.boot:spring-boot-configuration-processor\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithCompileDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("root", "org.springframework.boot",
|
||||
"spring-boot-starter", DependencyScope.COMPILE);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" implementation(\"org.springframework.boot:spring-boot-starter\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithRuntimeDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("driver", "com.example", "jdbc-driver",
|
||||
VersionReference.ofValue("1.0.0"), DependencyScope.RUNTIME);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" runtimeOnly(\"com.example:jdbc-driver:1.0.0\")", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithProvidedRuntimeDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("tomcat", "org.springframework.boot",
|
||||
"spring-boot-starter-tomcat", DependencyScope.PROVIDED_RUNTIME);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" providedRuntime(\"org.springframework.boot:spring-boot-starter-tomcat\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithTestCompileDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("test", "org.springframework.boot",
|
||||
"spring-boot-starter-test", DependencyScope.TEST_COMPILE);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" testImplementation(\"org.springframework.boot:spring-boot-starter-test\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithCompileOnlyDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("test", "org.springframework.boot",
|
||||
"spring-boot-starter-foobar", DependencyScope.COMPILE_ONLY);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" compileOnly(\"org.springframework.boot:spring-boot-starter-foobar\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithTestRuntimeDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("embed-mongo", "de.flapdoodle.embed",
|
||||
"de.flapdoodle.embed.mongo", DependencyScope.TEST_RUNTIME);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" testRuntimeOnly(\"de.flapdoodle.embed:de.flapdoodle.embed.mongo\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithNonNullArtifactTypeDependency() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.dependencies().add("root", "org.springframework.boot",
|
||||
"spring-boot-starter", null, DependencyScope.COMPILE, "tar.gz");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencies {",
|
||||
" implementation(\"org.springframework.boot:spring-boot-starter@tar.gz\")",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithBom() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.boms().add("test", "com.example", "my-project-dependencies",
|
||||
VersionReference.ofValue("1.0.0.RELEASE"));
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencyManagement {", " imports {",
|
||||
" mavenBom(\"com.example:my-project-dependencies:1.0.0.RELEASE\")",
|
||||
" }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithOrderedBoms() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.boms().add("bom1", "com.example", "my-project-dependencies",
|
||||
VersionReference.ofValue("1.0.0.RELEASE"), 5);
|
||||
build.boms().add("bom2", "com.example", "root-dependencies",
|
||||
VersionReference.ofProperty("root.version"), 2);
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("dependencyManagement {", " imports {",
|
||||
" mavenBom(\"com.example:my-project-dependencies:1.0.0.RELEASE\")",
|
||||
" mavenBom(\"com.example:root-dependencies:${rootVersion}\")",
|
||||
" }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithCustomVersion() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.setVersion("1.2.4.RELEASE");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).contains("version = \"1.2.4.RELEASE\"");
|
||||
}
|
||||
|
||||
private List<String> generateBuild(GradleBuild build) throws IOException {
|
||||
GradleBuildWriter writer = new KotlinDslGradleBuildWriter();
|
||||
StringWriter out = new StringWriter();
|
||||
writer.writeTo(new IndentingWriter(out), build);
|
||||
return Arrays.asList(out.toString().split("\\r?\\n"));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.spring.initializr.generator.buildsystem.gradle;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import io.spring.initializr.generator.io.IndentingWriter;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link KotlinDslGradleSettingsWriter}.
|
||||
*
|
||||
* @author Jean-Baptiste Nizet
|
||||
*/
|
||||
class KotlinDslGradleSettingsWriterTests {
|
||||
|
||||
@Test
|
||||
void gradleBuildWithMavenCentralPluginRepository() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.pluginRepositories().add("maven-central");
|
||||
List<String> lines = generateSettings(build);
|
||||
assertThat(lines).containsSequence("pluginManagement {", " repositories {",
|
||||
" mavenCentral()", " gradlePluginPortal()", " }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithPluginRepository() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.pluginRepositories().add("spring-milestones", "Spring Milestones",
|
||||
"https://repo.spring.io/milestone");
|
||||
List<String> lines = generateSettings(build);
|
||||
assertThat(lines).containsSequence("pluginManagement {", " repositories {",
|
||||
" maven { url = uri(\"https://repo.spring.io/milestone\") }",
|
||||
" gradlePluginPortal()", " }", " resolutionStrategy {",
|
||||
" eachPlugin {",
|
||||
" if (requested.id.id == \"org.springframework.boot\") {",
|
||||
" useModule(\"org.springframework.boot:spring-boot-gradle-plugin:${requested.version}\")",
|
||||
" }", " }", " }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithSnapshotPluginRepository() throws IOException {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.pluginRepositories().add("spring-snapshots", "Spring Snapshots",
|
||||
"https://repo.spring.io/snapshot", true);
|
||||
List<String> lines = generateSettings(build);
|
||||
assertThat(lines).containsSequence("pluginManagement {", " repositories {",
|
||||
" maven { url = uri(\"https://repo.spring.io/snapshot\") }",
|
||||
" gradlePluginPortal()", " }", " resolutionStrategy {",
|
||||
" eachPlugin {",
|
||||
" if (requested.id.id == \"org.springframework.boot\") {",
|
||||
" useModule(\"org.springframework.boot:spring-boot-gradle-plugin:${requested.version}\")",
|
||||
" }", " }", " }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void artifactIdShouldBeUsedAsTheRootProjectName() throws Exception {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.setArtifact("my-application");
|
||||
List<String> lines = generateSettings(build);
|
||||
assertThat(lines).containsSequence("rootProject.name = \"my-application\"");
|
||||
}
|
||||
|
||||
private List<String> generateSettings(GradleBuild build) throws IOException {
|
||||
GradleSettingsWriter writer = new KotlinDslGradleSettingsWriter();
|
||||
StringWriter out = new StringWriter();
|
||||
writer.writeTo(new IndentingWriter(out), build);
|
||||
return Arrays.asList(out.toString().split("\\r?\\n"));
|
||||
}
|
||||
|
||||
}
|
@ -26,7 +26,7 @@ import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.BuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
|
||||
import io.spring.initializr.generator.io.template.TemplateRenderer;
|
||||
import io.spring.initializr.generator.project.ResolvedProjectDescription;
|
||||
import io.spring.initializr.generator.version.Version;
|
||||
@ -316,8 +316,7 @@ public class MainController extends AbstractInitializrController {
|
||||
|
||||
private static String getWrapperScript(ResolvedProjectDescription description) {
|
||||
BuildSystem buildSystem = description.getBuildSystem();
|
||||
String script = buildSystem.id().equals(GradleBuildSystem.ID) ? "gradlew"
|
||||
: "mvnw";
|
||||
String script = buildSystem.id().equals(MavenBuildSystem.ID) ? "mvnw" : "gradlew";
|
||||
return (description.getBaseDirectory() != null)
|
||||
? description.getBaseDirectory() + "/" + script : script;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user