【发布时间】:2016-04-11 13:06:40
【问题描述】:
我是 Spring 新手,所以经过一整天的失败尝试后,我需要问一下 ;)
是否可以将Spring boot 和Spring shell 组合在一起?
我的用例是构建一个包含 webapp 的 jar(Spring-boot 默认嵌入 jetty 或 tomcat),同时能够从 shell 执行一些项目命令。夸脱不是一种选择。如果这些命令和 webapp 共享相同的应用程序上下文,那就太好了。
我的 src/main/java 中有两个类(加上其他目录中的一些命令和控制器)
应用程序.java
package dk.mrok.carmonitor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Bootstrap webapp
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Cli.java
package dk.mrok.carmonitor;
import java.io.IOException;
import org.springframework.shell.Bootstrap;
public class Cli {
/**
* Main class that delegates to Spring Shell's Bootstrap class in order to simplify debugging inside an IDE
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Bootstrap.main(args);
}
}
这是我的构建脚本:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'spring-boot'
apply plugin: 'application'
apply plugin: 'idea'
jar {
baseName = 'carmonitor-backend'
version = '0.0.1'
}
repositories {
mavenCentral()
maven {url 'https://repo.spring.io/libs-snapshot'}
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
mainClassName = "dk.mrok.carmonitor.Cli"
dependencies {
compile 'org.springframework.shell:spring-shell:1.2.0.BUILD-SNAPSHOT'
compile "org.springframework.boot:spring-boot-starter-web"
testCompile "junit:junit"
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
不幸的是,生成的 jar 是 spring-shell 项目,而不是 webapp。
执行 ./build/script/carmonitor (我期望这里的 shell 项目)输出
Error: Could not find or load main class dk.mrok.carmonitor.Cli
任何建议我做错了什么?
【问题讨论】:
-
只需将其设为 Web 应用程序,添加
spring-boot-starter-remote-shell并编写您的命令。那应该行得通。您不应该创建 2 个单独的应用程序(这就是您现在正在做的事情)。 -
使用 spring-boot-starter-remote-shell 有很大帮助。谢谢
-
@mrok 你是怎么解决这个问题的?
-
@vishal 请看示例github.com/mrok/spring-web-shell-example
标签: java spring spring-boot spring-shell