在tomcat 8上部署战争时未加载Spring Boot应用程序

Posted

技术标签:

【中文标题】在tomcat 8上部署战争时未加载Spring Boot应用程序【英文标题】:Spring boot app not loading when deploying war on tomcat 8 【发布时间】:2017-12-17 21:03:58 【问题描述】:

这是我的 build.gradle

plugins 
    id 'net.ltgt.apt' version '0.10'
    id 'org.springframework.boot' version '1.5.4.RELEASE'
    id 'com.github.johnrengelman.shadow' version '1.2.4'

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse'
apply plugin: 'eclipse-wtp'
apply plugin: 'groovy'
apply plugin: 'jetty'
apply plugin: "net.ltgt.apt"
apply plugin: "org.springframework.boot"
bootRepackage.enabled=false
apply plugin: "com.github.johnrengelman.shadow"



def jdkVersion = 1.8

sourceCompatibility = jdkVersion
targetCompatibility = jdkVersion

jettyRun 
     httpPort = 8080


repositories 
    mavenCentral()


sourceSets.all  set ->
    def jarTask = task("$set.nameJar", type: Jar) 
        baseName = baseName + "-$set.name"
        from set.output
    

    artifacts 
        archives jarTask
    


dependencies


     def springpluginCore="1.2.0.RELEASE"
     def hibernateVersion="5.2.10.Final"
     def sqlServerVersion="6.1.7.jre8-preview"
     def springfoxSwaggerVersion="2.7.0"
     def springfoxSwaggerUiVersion="2.7.0"
     def jsonPathVersion="2.2.0"
     def jsonSchemaVersion="2.6.3"
     def junitVersion="4.9"
     def mapstructVersion="1.1.0.Final"
     def mapstructProcessorVersion="1.1.0.Final"

      // Infra dependency
     compile project(':pointin-infrastructure')

     //spring dependencies
     compile("org.springframework.boot:spring-boot-starter-hateoas")

     compile ("org.springframework.boot:spring-boot-starter-web")
     providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
  // compile('org.springframework.boot:spring-boot-starter-jetty')
     compile ("org.springframework.boot:spring-boot-starter-data-jpa")
     compile group: 'org.springframework.plugin', name: 'spring-plugin-core', version: "$springpluginCore"

     //datasource dependencies
     compile group: 'org.hibernate', name: 'hibernate-gradle-plugin', version: "$hibernateVersion"
     compile group: 'com.microsoft.sqlserver', name: 'mssql-jdbc', version:"$sqlServerVersion"
     compile ("org.springframework.boot:spring-boot-starter-data-mongodb")


     //swagger springfox dependencies
     compile group: 'io.springfox', name: 'springfox-swagger2', version: "$springfoxSwaggerVersion"
     compile group: 'io.springfox', name: 'springfox-swagger-ui', version: "$springfoxSwaggerUiVersion"

     //other dependencies
     compile group: 'com.jayway.jsonpath', name: 'json-path', version: "$jsonPathVersion"
     compile group: 'org.mapstruct', name: 'mapstruct-jdk8', version: "$mapstructVersion"
     apt "org.mapstruct:mapstruct-processor:$mapstructVersion"    

     compile "com.fasterxml.jackson.module:jackson-module-jsonSchema:$jsonSchemaVersion"    
     compile "com.fasterxml.jackson.core:jackson-databind:"



     //test dependencies
      testCompile 'junit:junit:4.9'

war 
    from('src/main/resources') 
        include 'application.properties'
    


sourceSets 
    main 
        java 
            srcDir 'src/main/java'
            srcDir project(':pointin-infrastructure').file('src/main/java')
        
        resources 
            srcDir 'src/main/resources'
        
        output.classesDir   = 'build/classes/main/java'
        output.resourcesDir = 'build/classes/main/resources'
    
    test 
        java 
            srcDir 'src/test/java'
        
        resources 
            srcDir 'src/test/resources'
        
        output.classesDir   = 'build/classes/test/java'
        output.resourcesDir = 'build/classes/test/resources'
    


这是我的主文件

package com.dxc.pt.application.config;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
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);
    


我正在尝试在 tomcat 8 上部署它,但它没有加载,因为我无法在战争中获取 lib 提供的文件夹。请不要说我对 gradle 很陌生

【问题讨论】:

所有sourceSets 块都应该被删除,因为它要么是错误的,要么只指定了与默认值相同的值。这:srcDir project(':pointin-infrastructure').file('src/main/java') 不是你依赖另一个项目的方式,当你做 compile project(':pointin-infrastructure') 时你已经拥有了。 我同意@nickb,我认为 sourceSets 主要是作为约定。我很好奇这个配置:bootRepackage.enabled=false,我们为什么需要它? @chenrui bootreapackage.enabled 设置为 false,因为我不需要它,启用后它会给我一个异常“无法重命名依赖的 jar” 这有什么更新吗?我觉得在这里贴一些错误日志会更好。 【参考方案1】:

在我重新安装 java 后它最终开始工作。发现这是环境变量中设置的 JAVA_HOME 冲突的问题。 除了 eclipse 导出的战争不支持 gradle 并且在战争中产生战争而不是在战争中产生 gradle 产生的子项目的 jar

【讨论】:

以上是关于在tomcat 8上部署战争时未加载Spring Boot应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 8 Unicode 文件名战争文件部署问题

在 WildFly 8.0.0.Beta 1 上部署 spring 应用程序错误

如何使用 Tomcat 部署(和访问)Spring Boot 战争? (使用入门指南)

Tomcat中的spring-boot应用程序战争部署,现有的spring web应用程序失败

无法在一台特定服务器上部署战争

运行带有 SSL 和同时未加密的 Spring Boot 应用程序(嵌入式 Tomcat)