我目前正在使用Spring 4、Java 1.8和Gradle(https://spring.io/guides/gs/scheduling-tasks/)完成调度任务的示例。
但是,在运行此示例时,我收到以下错误:
错误:(11,8)java:无法访问org.springframework.web的org.springframework. web应用程序初始化程序类文件。未找到Web应用程序初始化程序
我的Application.java的源代码如下:
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class);
}
}
字符串
我的Gradle文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
jar {
baseName = 'gs-scheduling-tasks'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile("org.springframework.boot:spring-boot-starter")
testCompile("org.springframework.boot:spring-boot-starter-test")
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}
型
为什么org.springframework.web.WebApplicationInitializer在指南中甚至都没有提到它的时候会导致这个错误呢?
谢谢.
4条答案
按热度按时间lsmd5eda1#
添加此依赖项来解决此问题。我完美地为我工作。
字符串
kr98yfug2#
本指南不会扩展SpringBootServletInitializer,如果您想在应用程序中启动Tomcat Web服务器,请将其删除或添加spring-boot-starter-web作为依赖项。
vi4fp9gy3#
您正在扩展实现
WebApplicationInitializer
的SpringBootServletInitializer
检查http://grepcode.com/file/repo1.maven.org/maven2/org.springframework.boot/spring-boot/1.0.2.RELEASE/org/springframework/boot/context/web/SpringBootServletInitializer.java
请使用此Application类,如指南所示
字符串
vyu0f0g14#
正如@萨利指出的,
SpringBootServletInitializer
确实实现了WebApplicationInitializer
,但两者都在不同的JAR-s(工件)中。当你想将WAR文件部署到独立的Tomcat时,不使用spring-boot-starter-web
是完全合理的-否则你会包括Tomcat的引擎(除非你显式地将其从依赖项中排除)。如果是这样的话,那么我建议放入父POM:字符串
然后在你的“web模块”项目中:
型
spring-boot-dependencies
提供了spring-boot-starter和spring-web(包含缺少的类)。但是为了使一切正常工作,您还需要提供servlet API,因此我们也添加了那个。使用这种方法,您可以获得最小的WAR大小,并且不必记住排除Tomcat依赖项。