Java org.springframework.boot.web.support 不存在

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/38413594/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 20:17:57  来源:igfitidea点击:

org.springframework.boot.web.support does not exist

javamavengradlespring-boot

提问by Niklas

I'm changing build systems from maven to gradle for a spring boot project. I get this stacktrace

我正在将构建系统从 maven 更改为 Spring Boot 项目的 gradle。我得到这个堆栈跟踪

19:03:08: Executing external task 'bootRun'...
/home/dac/proj/spring-boot-master/spring-boot-samples/spring-boot-sample-jetty-jsp/src/main/java/sample/jetty/jsp/SampleJettyJspApplication.java:22: error: package org.springframework.boot.web.support does not exist
import org.springframework.boot.web.support.SpringBootServletInitializer;
                                           ^
/home/dac/proj/spring-boot-master/spring-boot-samples/spring-boot-sample-jetty-jsp/src/main/java/sample/jetty/jsp/SampleJettyJspApplication.java:25: error: cannot find symbol
public class SampleJettyJspApplication extends SpringBootServletInitializer {
                                               ^
  symbol: class SpringBootServletInitializer
/home/dac/proj/spring-boot-master/spring-boot-samples/spring-boot-sample-jetty-jsp/src/main/java/sample/jetty/jsp/SampleJettyJspApplication.java:27: error: method does not override or implement a method from a supertype
    @Override
    ^
3 errors
:compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 2.334 secs
Compilation failed; see the compiler error output for details.
19:03:10: External task execution finished 'bootRun'.

My build.gradle

我的 build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE"
        classpath 'org.springframework:springloaded:1.2.5.RELEASE'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'rebel'

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath group: 'org.zeroturnaround', name: 'gradle-jrebel-plugin', version: '1.1.3'
    }
}
jar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    // tag::jetty[]
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile("org.springframework.boot:spring-boot-starter-jetty")
    // end::jetty[]
    // tag::actuator[]
    compile("org.springframework.boot:spring-boot-starter-actuator")

    testCompile("org.springframework.boot:spring-boot-starter-test")
    testCompile("junit:junit")

}

// change default IntelliJ output directory for compiling classes
idea {
    module {
        inheritOutputDirs = false
        outputDir = file("$buildDir/classes/main/")
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

My pom.xml

我的 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <!-- Your own application should inherit from spring-boot-starter-parent -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-samples</artifactId>
        <version>1.4.0.BUILD-SNAPSHOT</version>
    </parent>
    <artifactId>spring-boot-sample-jetty-jsp</artifactId>
    <packaging>war</packaging>
    <name>Spring Boot Jetty JSP Sample</name>
    <description>Spring Boot Jetty JSP Sample</description>
    <url>http://projects.spring.io/spring-boot/</url>
    <organization>
        <name>Pivotal Software, Inc.</name>
        <url>http://www.spring.io</url>
    </organization>
    <properties>
        <main.basedir>${basedir}/../..</main.basedir>
        <m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-el</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>apache-jsp</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                </configuration>
            </plugin>



        </plugins>
    </build>
</project>

How should I make the package available to gradle?

我应该如何使包可用于 gradle?

采纳答案by Milo? Milivojevi?

It's probably an import issue in your source code - your Gradle build script uses Spring Boot 1.3.6.RELEASE in which SpringBootServletInitializer has the following fully qualified name:

这可能是您的源代码中的导入问题 - 您的 Gradle 构建脚本使用 Spring Boot 1.3.6.RELEASE,其中 SpringBootServletInitializer 具有以下完全限定名称:

org.springframework.boot.context.web.SpringBootServletInitializer 

Your Maven pom.xml, however, uses Spring Boot 1.4.0.BUILD-SNAPSHOT, in which the package name was changed to:

但是,您的 Maven pom.xml 使用 Spring Boot 1.4.0.BUILD-SNAPSHOT,其中包名称更改为:

org.springframework.boot.web.support.SpringBootServletInitializer

So if you go to your SampleJettyJspApplication and change the import to

因此,如果您转到 SampleJettyJspApplication 并将导入更改为

import org.springframework.boot.context.web.SpringBootServletInitializer;

everything should be fine.

一切都应该没问题。

Alternatively, you could alter your Gradle build script to import 1.4.0.BUILD-SNAPSHOT, but that would require adding Spring's snapshot repository:

或者,您可以更改 Gradle 构建脚本以导入 1.4.0.BUILD-SNAPSHOT,但这需要添加 Spring 的快照存储库:

buildscript {
    repositories {
        maven.url "http://repo.spring.io/snapshot"
        mavenCentral()
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.BUILD-SNAPSHOT")
    }
}

回答by Issam EL-ATIF

You should use the same spring boot version 1.4.0.BUILD-SNAPSHOT as in maven. org.springframework.boot.web.support.SpringBootServletInitializerwas introduced since 1.4.0 that's why gradle cannot find it.

您应该使用与 maven 中相同的 Spring Boot 版本 1.4.0.BUILD-SNAPSHOT。org.springframework.boot.web.support.SpringBootServletInitializer从 1.4.0 开始引入,这就是 gradle 找不到它的原因。

回答by Kaidul

You are using org.springframework.boot.context.web.SpringBootServletInitializerthis is deprecated. Instead:

您正在使用org.springframework.boot.context.web.SpringBootServletInitializer它已被弃用。反而:

Use

org.springframework.boot.web.support.SpringBootServletInitializer

org.springframework.boot.web.support.SpringBootServletInitializer

For SpringBoot 2.0

对于 SpringBoot 2.0

org.springframework.boot.web.servlet.support.SpringBootServletInitializer

org.springframework.boot.web.servlet.support.SpringBootServletInitializer

回答by Satish Babu

org.springframework.boot.web.support.SpringBootServletInitializer 

is deprecated.

已弃用。

use below instead:

使用下面代替:

org.springframework.boot.web.servlet.support.SpringBootServletInitializer