Java 在tomcat7上的类路径上未检测到Spring WebApplicationInitializer类型

Java 在tomcat7上的类路径上未检测到Spring WebApplicationInitializer类型,java,spring,tomcat,war,build.gradle,Java,Spring,Tomcat,War,Build.gradle,我是tomcat的新手。我经营“gradle tomcatRunWar”。此web应用程序可以在本地运行,并调用了WebApplicationInitializer。然后,我用“gradlewar”来获取war文件。我删除了/var/lib/tomcat7/webapps/中的所有内容。我将myproject.war复制到/var/lib/tomcat7/webapps/目录。将其重命名为ROOT.war。重新启动tomcat7。服务器开始运行。但我无法通过我的ip:8080/登录或我的ip:8

我是tomcat的新手。我经营“gradle tomcatRunWar”。此web应用程序可以在本地运行,并调用了WebApplicationInitializer。然后,我用“gradlewar”来获取war文件。我删除了/var/lib/tomcat7/webapps/中的所有内容。我将myproject.war复制到/var/lib/tomcat7/webapps/目录。将其重命名为ROOT.war。重新启动tomcat7。服务器开始运行。但我无法通过我的ip:8080/登录或我的ip:8080/我的项目/登录访问我的网页。错误为“HTTP状态404-/login”。在localhost.log中,有一个信息:“信息:在类路径上未检测到Spring WebApplicationInitializer类型。”。我通过谷歌搜索了这个问题,一些人因为lib版本,jdk版本而有同样的问题。我不知道如何调试

Apache Tomcat/7.0.52, java版本“1.8.0_45”java(TM)SE运行时环境(构建1.8.0_45-b14)java热点(TM)64位服务器虚拟机(构建25.45-b02,混合模式)

build.gradle是:

    buildscript {
    repositories {
        maven { url "http://repo.spring.io/libs-release" }
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.0.1.RELEASE")
        classpath 'org.gradle.api.plugins:gradle-tomcat-plugin:1.2.4'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'war'
apply plugin: 'groovy'
apply plugin: 'tomcat'


eclipse {
    jdt {
        sourceCompatibility = 1.6
        targetCompatibility = 1.7
    }
}

jar {
    baseName = 'myproject'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/libs-release" }
}


dependencies {
    compile('commons-fileupload:commons-fileupload:1.3.1')
    compile("org.codehaus.jackson:jackson-mapper-asl:1.9.0")
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude group: 'ch.qos.logback', module: 'logback-classic'
        exclude group: 'org.slf4j'
    }
    compile("javax.servlet:javax.servlet-api:3.0.1")
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
    compile("org.springframework.data:spring-data-mongodb")  {
        exclude group: 'org.slf4j'
    }
    compile("org.springframework.security:spring-security-crypto:3.2.3.RELEASE")
    compile("com.fasterxml.jackson.core:jackson-databind")
    compile("joda-time:joda-time:2.2")
    compile("org.apache.directory.studio:org.apache.commons.codec:1.6")
    compile('com.amazonaws:aws-java-sdk:1.2.1')
    testCompile("junit:junit")
        runtime 'javax.servlet:jstl:1.2'
    providedCompile group:"org.apache.tomcat", name:"tomcat-catalina", version:"7.0.52" 
}

dependencies { 
    def tomcatVersion = '7.0.52' 
    tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}", 
    "org.apache.tomcat.embed:tomcat-embed-logging-log4j:${tomcatVersion}" 
    tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") { 
        exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj' 
    } 
}

tomcatRun { 
    daemon = true 
    httpPort = 8080 
    outputFile = file('/logs/tomcat.log') 
    stopKey = 'ctl-d'  
}

tomcatRunWar { 
    outputFile = file('/logs/tomcat.log') 
}

tomcatStop { 
    stopKey = 'ctl-d' 
}
/var/lib/tomcat7/logs/catalina.out是:

Aug 03, 2015 12:41:30 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Aug 03, 2015 12:41:30 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1009 ms
Aug 03, 2015 12:41:30 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Aug 03, 2015 12:41:30 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.52 (Ubuntu)
Aug 03, 2015 12:41:30 AM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/examples.xml
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/xml is already defined
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/docs.xml
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/manager.xml
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/host-manager.xml
Aug 03, 2015 12:41:31 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/ROOT.war

Aug 03, 2015 12:41:37 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Aug 03, 2015 12:41:37 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 7788 ms
在localhost.log中,有一条信息:信息:在类路径上未检测到Spring WebApplicationInitializer类型

My Application.java是:

    @Configuration
@EnableAutoConfiguration
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, args);
        }

}
我的WebAppInitializer.java是:

@Configuration
public class WebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext)
            throws ServletException {

        AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
        appContext.register(Application.class);
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
                "SpringDispatcher", new DispatcherServlet(appContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}
更新


我使用web.xml代替WebApplicationInitializer。现在它可以工作了。

问题是关于您的访问目录,您需要验证什么是您的CATALINA_HOME环境变量,日志中清楚显示“目录不存在”

无法从执行位置访问

解决方案: 1.首先,尝试在不使用Gradle的情况下单独启动tomcat。 2.在tomcat中部署任何hello world web应用程序 3.试着一步一步地使用Gradle 4.要了解更多关于Gradle的信息,请查看以下内容:


注意。

显示整个tomcat日志。作为文本,而不是图片,我遇到了同样的问题(我碰巧使用的是Eclipse/Spring/Maven,而不是Gradle)。这里讨论了这个问题以及几种可能的解决方法(除了使用web.xml和punting之外):我的CATALINA_主页是/usr/share/tomcat7。我的CATALINA_基本id/var/lib/tomcat7可能是一个bug: