【发布时间】:2018-02-26 07:04:28
【问题描述】:
我的 Spring Boot 应用程序中有两个带有 main 方法的类。
1. XYZToolApplication
2. XYZWebApplication
它们都扩展了SpringBootServletInitializer。两者都用@SpringBootApplication 和@Configuration 注释。
我使用 Gradle 作为构建工具。
我想做两件事:
1. 使用bootRun 和战争部署运行XYZWebApplication。
2. 每当bootRun 命令提供命令行参数args 时,仅使用bootRun 运行XYZToolApplication。
我将build.gradle修改为:
bootRun {
main = 'com.XYZWebApplication'
if ( project.hasProperty('args') ) {
main = 'com.XYZToolApplication'
args project.args.split('\\s+')
}
classpath = sourceSets.main.runtimeClasspath + configurations.dev
jvmArgs = ["-Dspring.output.ansi.enabled=ALWAYS"]
}
war {
doFirst {
manifest {
attributes(
"Implementation-Title": project.name,
"Implementation-Version": version,
"Implementation-Timestamp": new Date())
}
}
archiveName 'xyz.war'
}
虽然我可以根据需要运行 bootRun,但是当我创建一个 war 存档并将其部署到 Tomcat8 时,会创建两个上下文,一个用于 XYZWebApplication,一个用于 XYZToolApplication。我可以在日志(catalina.out)中看到这一点。我只想创建 XYZWebApplication 上下文。
日志快照:
...
2017-09-15 19:20:59.209 INFO 23727 --- [ost-startStop-1] XYZWebApplication : Started XYZWebApplication in 7.677 seconds (JVM running for 10.57)
....
2017-09-15 19:21:01.197 INFO 23727 --- [ost-startStop-1] XYZToolApplication : Started XYZToolApplication in 1.983 seconds (JVM running for 12.557)
我尝试在springBoot 任务和/或bootRepackage 任务和/或war 任务中指定主类,但没有帮助。
【问题讨论】:
标签: tomcat spring-boot gradle