IntelliJ Spring Gradle 项目注释不工作
IntelliJ Spring Gradle Project Annotations Not Working
所以我尝试在项目配置设置中使用 Spring 选项在 IntelliJ 中启动一个新的 Web 项目,但是当我最终完成项目设置时,似乎我制作了任何新控制器即使我注释它们也会被忽略。 @RequestMapping 似乎永远不会被映射。我所能访问的只是位于 web 目录根目录中的文件。
在无法让它工作之后,我切换到 Gradle 这样我就可以导入一些额外的库来测试我的项目。我的 gradle 文件如下所示:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.2.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
sourceSets {
main {
java {
srcDirs = ['src/main/java']
}
}
test {
java {
srcDirs = ['src/main/test']
}
}
}
jar {
baseName = 'gs-rest-service'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.7
targetCompatibility = 1.7
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("junit:junit")
testCompile "org.mockito:mockito-core:1.+"
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
我是否需要填写某种配置文件来告诉项目在哪里寻找控制器,或者精灵尘埃是否没有像我预期的那样工作?
这是我的控制器的样子:
@RestController
public class GreetingController {
public static final String greeting = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue = "World") String name){
return new Greeting(counter.incrementAndGet(), String.format(greeting, name));
}
}
并且用@Spring注释的classBootApplication:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我的文件夹结构:
Test
- .gradle
- .idea
- build
- gradle
- out
- src
- main
- java
- controllers
- Application.java
- GreetingController.java
- test
- web
- WEB-INF
- (empty)
此时我对 Spring 的工作方式感到非常困惑,因为注释尚未发挥作用。我缺少配置文件吗? Spring 入门教程说我不需要,但可能是因为我使用的是 IntelliJ。
最后一件事要注意的是,我 运行 使用本地 Tomcat 实例。
谢谢大家!
如果您在 Tomcat 中部署应用程序,则必须创建一个 class 扩展 SpringBootServletInitializer 以启动 Spring 容器。仅当您 运行 带有 java -jar yourfile.jar 的 JAR/WAR 和嵌入的 Tomcat(其中默认包含在 Spring Boot Starter Web 中)。
所以我尝试在项目配置设置中使用 Spring 选项在 IntelliJ 中启动一个新的 Web 项目,但是当我最终完成项目设置时,似乎我制作了任何新控制器即使我注释它们也会被忽略。 @RequestMapping 似乎永远不会被映射。我所能访问的只是位于 web 目录根目录中的文件。
在无法让它工作之后,我切换到 Gradle 这样我就可以导入一些额外的库来测试我的项目。我的 gradle 文件如下所示:
buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.2.RELEASE") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'spring-boot' sourceSets { main { java { srcDirs = ['src/main/java'] } } test { java { srcDirs = ['src/main/test'] } } } jar { baseName = 'gs-rest-service' version = '0.1.0' } repositories { mavenCentral() } sourceCompatibility = 1.7 targetCompatibility = 1.7 dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("junit:junit") testCompile "org.mockito:mockito-core:1.+" } task wrapper(type: Wrapper) { gradleVersion = '2.3' }
我是否需要填写某种配置文件来告诉项目在哪里寻找控制器,或者精灵尘埃是否没有像我预期的那样工作?
这是我的控制器的样子:
@RestController public class GreetingController { public static final String greeting = "Hello, %s!"; private final AtomicLong counter = new AtomicLong(); @RequestMapping("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue = "World") String name){ return new Greeting(counter.incrementAndGet(), String.format(greeting, name)); } }
并且用@Spring注释的classBootApplication:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
我的文件夹结构:
Test - .gradle - .idea - build - gradle - out - src - main - java - controllers - Application.java - GreetingController.java - test - web - WEB-INF - (empty)
此时我对 Spring 的工作方式感到非常困惑,因为注释尚未发挥作用。我缺少配置文件吗? Spring 入门教程说我不需要,但可能是因为我使用的是 IntelliJ。
最后一件事要注意的是,我 运行 使用本地 Tomcat 实例。
谢谢大家!
如果您在 Tomcat 中部署应用程序,则必须创建一个 class 扩展 SpringBootServletInitializer 以启动 Spring 容器。仅当您 运行 带有 java -jar yourfile.jar 的 JAR/WAR 和嵌入的 Tomcat(其中默认包含在 Spring Boot Starter Web 中)。