mirror of
https://gitee.com/dcren/initializr.git
synced 2025-04-05 17:38:06 +08:00
Simplify KotlinVersionResolver arrangement
This commit makes sure KotlinVersionResolver works with the actual metadata instance used by the project to generate rather than potentially using a different instance via the provider. Rather than requiring such a bean to be present, the configuration fallbacks to the metadata implementation if none is provided.
This commit is contained in:
parent
e343e3c0fc
commit
9c30905003
@ -17,7 +17,6 @@
|
|||||||
package io.spring.initializr.stub;
|
package io.spring.initializr.stub;
|
||||||
|
|
||||||
import io.spring.initializr.actuate.autoconfigure.InitializrActuatorEndpointsAutoConfiguration;
|
import io.spring.initializr.actuate.autoconfigure.InitializrActuatorEndpointsAutoConfiguration;
|
||||||
import io.spring.initializr.generator.spring.autoconfigure.GeneratorSpringAutoConfiguration;
|
|
||||||
import io.spring.initializr.web.autoconfigure.InitializrAutoConfiguration;
|
import io.spring.initializr.web.autoconfigure.InitializrAutoConfiguration;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
@ -27,8 +26,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|||||||
*
|
*
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
*/
|
*/
|
||||||
@SpringBootApplication(exclude = { InitializrAutoConfiguration.class,
|
@SpringBootApplication(
|
||||||
InitializrActuatorEndpointsAutoConfiguration.class, GeneratorSpringAutoConfiguration.class })
|
exclude = { InitializrAutoConfiguration.class, InitializrActuatorEndpointsAutoConfiguration.class })
|
||||||
public class SampleApp {
|
public class SampleApp {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*
|
|
||||||
* https://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.autoconfigure;
|
|
||||||
|
|
||||||
import io.spring.initializr.generator.spring.code.kotlin.InitializrMetadataKotlinVersionResolver;
|
|
||||||
import io.spring.initializr.generator.spring.code.kotlin.KotlinVersionResolver;
|
|
||||||
import io.spring.initializr.metadata.InitializrMetadataProvider;
|
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link EnableAutoConfiguration Auto-configuration} for generation of Spring-based
|
|
||||||
* projects.
|
|
||||||
*
|
|
||||||
* @author Andy Wilkinson
|
|
||||||
*/
|
|
||||||
public class GeneratorSpringAutoConfiguration {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnMissingBean
|
|
||||||
public KotlinVersionResolver kotlinVersionResolver(InitializrMetadataProvider metadataProvider) {
|
|
||||||
return new InitializrMetadataKotlinVersionResolver(metadataProvider);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -18,7 +18,6 @@ package io.spring.initializr.generator.spring.code.kotlin;
|
|||||||
|
|
||||||
import io.spring.initializr.generator.project.ResolvedProjectDescription;
|
import io.spring.initializr.generator.project.ResolvedProjectDescription;
|
||||||
import io.spring.initializr.metadata.InitializrMetadata;
|
import io.spring.initializr.metadata.InitializrMetadata;
|
||||||
import io.spring.initializr.metadata.InitializrMetadataProvider;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link KotlinVersionResolver} that resolves the version from the
|
* {@link KotlinVersionResolver} that resolves the version from the
|
||||||
@ -28,15 +27,15 @@ import io.spring.initializr.metadata.InitializrMetadataProvider;
|
|||||||
*/
|
*/
|
||||||
public class InitializrMetadataKotlinVersionResolver implements KotlinVersionResolver {
|
public class InitializrMetadataKotlinVersionResolver implements KotlinVersionResolver {
|
||||||
|
|
||||||
private final InitializrMetadataProvider metadataProvider;
|
private final InitializrMetadata metadata;
|
||||||
|
|
||||||
public InitializrMetadataKotlinVersionResolver(InitializrMetadataProvider metadataProvider) {
|
public InitializrMetadataKotlinVersionResolver(InitializrMetadata metadata) {
|
||||||
this.metadataProvider = metadataProvider;
|
this.metadata = metadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String resolveKotlinVersion(ResolvedProjectDescription description) {
|
public String resolveKotlinVersion(ResolvedProjectDescription description) {
|
||||||
return this.metadataProvider.get().getConfiguration().getEnv().getKotlin()
|
return this.metadata.getConfiguration().getEnv().getKotlin()
|
||||||
.resolveKotlinVersion(description.getPlatformVersion());
|
.resolveKotlinVersion(description.getPlatformVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,8 +80,12 @@ public class KotlinProjectGenerationConfiguration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public KotlinProjectSettings kotlinProjectSettings(KotlinVersionResolver kotlinVersionResolver) {
|
public KotlinProjectSettings kotlinProjectSettings(ObjectProvider<KotlinVersionResolver> kotlinVersionResolver,
|
||||||
return new SimpleKotlinProjectSettings(kotlinVersionResolver.resolveKotlinVersion(this.projectDescription));
|
InitializrMetadata metadata) {
|
||||||
|
String kotlinVersion = kotlinVersionResolver
|
||||||
|
.getIfAvailable(() -> new InitializrMetadataKotlinVersionResolver(metadata))
|
||||||
|
.resolveKotlinVersion(this.projectDescription);
|
||||||
|
return new SimpleKotlinProjectSettings(kotlinVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -9,6 +9,3 @@ io.spring.initializr.generator.spring.code.kotlin.KotlinProjectGenerationConfigu
|
|||||||
io.spring.initializr.generator.spring.configuration.ApplicationConfigurationProjectGenerationConfiguration,\
|
io.spring.initializr.generator.spring.configuration.ApplicationConfigurationProjectGenerationConfiguration,\
|
||||||
io.spring.initializr.generator.spring.documentation.HelpDocumentProjectGenerationConfiguration,\
|
io.spring.initializr.generator.spring.documentation.HelpDocumentProjectGenerationConfiguration,\
|
||||||
io.spring.initializr.generator.spring.scm.git.GitProjectGenerationConfiguration
|
io.spring.initializr.generator.spring.scm.git.GitProjectGenerationConfiguration
|
||||||
|
|
||||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
|
||||||
io.spring.initializr.generator.spring.autoconfigure.GeneratorSpringAutoConfiguration
|
|
||||||
|
@ -27,8 +27,6 @@ import io.spring.initializr.generator.language.Language;
|
|||||||
import io.spring.initializr.generator.project.ProjectDescription;
|
import io.spring.initializr.generator.project.ProjectDescription;
|
||||||
import io.spring.initializr.generator.project.ProjectGenerationContext;
|
import io.spring.initializr.generator.project.ProjectGenerationContext;
|
||||||
import io.spring.initializr.generator.project.ResolvedProjectDescription;
|
import io.spring.initializr.generator.project.ResolvedProjectDescription;
|
||||||
import io.spring.initializr.generator.spring.code.kotlin.InitializrMetadataKotlinVersionResolver;
|
|
||||||
import io.spring.initializr.generator.spring.code.kotlin.KotlinVersionResolver;
|
|
||||||
import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder;
|
import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder;
|
||||||
import io.spring.initializr.generator.spring.test.ProjectAssert;
|
import io.spring.initializr.generator.spring.test.ProjectAssert;
|
||||||
import io.spring.initializr.generator.test.project.ProjectGeneratorTester;
|
import io.spring.initializr.generator.test.project.ProjectGeneratorTester;
|
||||||
@ -104,8 +102,6 @@ public abstract class AbstractComplianceTests {
|
|||||||
context.getBean(ResolvedProjectDescription.class).getPlatformVersion()));
|
context.getBean(ResolvedProjectDescription.class).getPlatformVersion()));
|
||||||
context.registerBean(IndentingWriterFactory.class,
|
context.registerBean(IndentingWriterFactory.class,
|
||||||
() -> IndentingWriterFactory.create(new SimpleIndentStrategy("\t")));
|
() -> IndentingWriterFactory.create(new SimpleIndentStrategy("\t")));
|
||||||
context.registerBean(KotlinVersionResolver.class,
|
|
||||||
() -> new InitializrMetadataKotlinVersionResolver(() -> metadata));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupProjectDescription(Language language, String version, BuildSystem buildSystem,
|
private void setupProjectDescription(Language language, String version, BuildSystem buildSystem,
|
||||||
|
@ -54,9 +54,7 @@ class KotlinProjectGenerationConfigurationTests {
|
|||||||
.withConfiguration(SourceCodeProjectGenerationConfiguration.class,
|
.withConfiguration(SourceCodeProjectGenerationConfiguration.class,
|
||||||
KotlinProjectGenerationConfiguration.class, BuildProjectGenerationConfiguration.class,
|
KotlinProjectGenerationConfiguration.class, BuildProjectGenerationConfiguration.class,
|
||||||
MavenProjectGenerationConfiguration.class)
|
MavenProjectGenerationConfiguration.class)
|
||||||
.withDirectory(directory)
|
.withDirectory(directory).withBean(InitializrMetadata.class, () -> {
|
||||||
.withBean(KotlinProjectSettings.class, () -> new SimpleKotlinProjectSettings("1.2.70"))
|
|
||||||
.withBean(InitializrMetadata.class, () -> {
|
|
||||||
io.spring.initializr.metadata.Dependency dependency = io.spring.initializr.metadata.Dependency
|
io.spring.initializr.metadata.Dependency dependency = io.spring.initializr.metadata.Dependency
|
||||||
.withId("foo");
|
.withId("foo");
|
||||||
dependency.setFacets(Collections.singletonList("json"));
|
dependency.setFacets(Collections.singletonList("json"));
|
||||||
@ -70,6 +68,21 @@ class KotlinProjectGenerationConfigurationTests {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void kotlinVersionFallbacksToMetadataIfNotPresent() {
|
||||||
|
KotlinProjectSettings settings = this.projectTester.generate(new ProjectDescription(),
|
||||||
|
(context) -> context.getBean(KotlinProjectSettings.class));
|
||||||
|
assertThat(settings.getVersion()).isEqualTo("1.1.1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void kotlinVersionResolverIsUsedIfPresent() {
|
||||||
|
KotlinProjectSettings settings = this.projectTester
|
||||||
|
.withBean(KotlinProjectSettings.class, () -> new SimpleKotlinProjectSettings("0.9.12"))
|
||||||
|
.generate(new ProjectDescription(), (context) -> context.getBean(KotlinProjectSettings.class));
|
||||||
|
assertThat(settings.getVersion()).isEqualTo("0.9.12");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void mainClassIsContributedWhenGeneratingProject() {
|
void mainClassIsContributedWhenGeneratingProject() {
|
||||||
ProjectStructure projectStructure = this.projectTester.generate(new ProjectDescription());
|
ProjectStructure projectStructure = this.projectTester.generate(new ProjectDescription());
|
||||||
|
Loading…
Reference in New Issue
Block a user