mirror of
https://github.com/jlengrand/picocli.git
synced 2026-03-10 08:41:17 +00:00
Create spring boot starter with spring factory
This commit is contained in:
committed by
Remko Popma
parent
2e825a3ca8
commit
8569785fdc
@@ -10,6 +10,7 @@ jlineVersion = 2.14.6
|
||||
jline3Version = 3.9.0
|
||||
junitDepVersion = 4.11
|
||||
junitVersion = 4.12
|
||||
springBootVersion = 2.1.6.RELEASE
|
||||
|
||||
# projectPreviousReleaseVersion is non-SNAPSHOT, only published releases
|
||||
projectPreviousReleaseVersion = 4\\.0\\.0-beta-2
|
||||
@@ -20,4 +21,4 @@ projectVersion = 4.0.0-rc-1-SNAPSHOT
|
||||
releaseDate = 2019-06-20
|
||||
releaseDatePreviousRegex = 2019\\-06\\-20
|
||||
|
||||
systemRulesVersion = 1.17.1
|
||||
systemRulesVersion = 1.17.1
|
||||
|
||||
19
picocli-spring-boot-autoconfigure/build.gradle
Normal file
19
picocli-spring-boot-autoconfigure/build.gradle
Normal file
@@ -0,0 +1,19 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
}
|
||||
|
||||
group 'info.picocli'
|
||||
version '4.0.0-rc-1-SNAPSHOT'
|
||||
|
||||
sourceCompatibility = 1.8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile rootProject
|
||||
compile (group: 'org.springframework.boot', name: 'spring-boot-starter', version: "$springBootVersion" )
|
||||
compileOnly("org.springframework.boot:spring-boot-configuration-processor:$springBootVersion")
|
||||
testCompile group: 'junit', name: 'junit', version: '4.12'
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package picocli.spring.boot.autoconfigure;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import picocli.CommandLine;
|
||||
|
||||
/**
|
||||
* @author Thibaud Leprêtre
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnClass(CommandLine.class)
|
||||
public class PicocliAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(CommandLine.IFactory.class)
|
||||
CommandLine.IFactory springPicocliFactory(ApplicationContext applicationContext) {
|
||||
return new SpringPicocliFactory(applicationContext);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package picocli.spring.boot.autoconfigure;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import picocli.CommandLine;
|
||||
|
||||
/**
|
||||
* @author Thibaud Leprêtre
|
||||
*/
|
||||
public class SpringPicocliFactory implements CommandLine.IFactory {
|
||||
private static final Logger logger = LoggerFactory.getLogger(SpringPicocliFactory.class);
|
||||
|
||||
private final ApplicationContext applicationContext;
|
||||
|
||||
public SpringPicocliFactory(ApplicationContext applicationContext) {
|
||||
this.applicationContext = applicationContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <K> K create(Class<K> clazz) throws Exception {
|
||||
try {
|
||||
return getBeanOrCreate(clazz);
|
||||
} catch (Exception e) {
|
||||
logger.warn("unable to get bean of class {}, use default Picocli factory creation", clazz);
|
||||
return CommandLine.defaultFactory().create(clazz);
|
||||
}
|
||||
}
|
||||
|
||||
private <K> K getBeanOrCreate(Class<K> clazz) {
|
||||
try {
|
||||
return applicationContext.getBean(clazz);
|
||||
} catch (Exception e) {
|
||||
return applicationContext.getAutowireCapableBeanFactory().createBean(clazz);
|
||||
}
|
||||
}
|
||||
}
|
||||
17
picocli-spring-boot-starter/build.gradle
Normal file
17
picocli-spring-boot-starter/build.gradle
Normal file
@@ -0,0 +1,17 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
}
|
||||
|
||||
group 'info.picocli'
|
||||
version '4.0.0-rc-1-SNAPSHOT'
|
||||
|
||||
sourceCompatibility = 1.8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile (group: 'org.springframework.boot', name: 'spring-boot-starter', version: '2.1.6.RELEASE' )
|
||||
compileOnly("org.springframework.boot:spring-boot-configuration-processor:2.1.6.RELEASE")
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
provides: picocli
|
||||
@@ -10,3 +10,6 @@ if (org.gradle.api.JavaVersion.current().isJava8Compatible()) {
|
||||
} else {
|
||||
println("Excluding module picocli-annotation-processing-tests from the build: they require Java 8 but we have Java version ${org.gradle.api.JavaVersion.current()}")
|
||||
}
|
||||
include 'picocli-spring-boot-starter'
|
||||
include 'picocli-spring-boot-autoconfigure'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user