Java Spring Boot - 不会在Tomcat上部署的war文件Apache

问题描述:

我正在构建Java Spring引导项目 - 并且作为需要将项目生成为war文件的需求 - 然后让Tomcat Apache从此单独运行。Java Spring Boot - 不会在Tomcat上部署的war文件Apache

我已经构建了war文件,但是当我尝试部署它时,它的结构不正确,并且它生成404尝试查看项目。

  • 问题 enter image description here

enter image description here enter image description here

  • 我POM

    http://maven.apache.org/xsd/maven-4.0.0 .xsd“> 4.0.0

    <groupId>org.springframework</groupId> 
    <artifactId>gs-spring-boot</artifactId> 
    <version>0.1.0</version> 
    <packaging>war</packaging> 
    
    <parent> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-parent</artifactId> 
        <version>1.5.7.RELEASE</version> 
    </parent> 
    
    <dependencies> 
        <!-- web --> 
        <dependency> 
         <groupId>org.springframework.boot</groupId> 
         <artifactId>spring-boot-starter-web</artifactId> 
        </dependency> 
        <!-- test --> 
        <dependency> 
         <groupId>org.springframework.boot</groupId> 
         <artifactId>spring-boot-starter-test</artifactId> 
         <scope>test</scope> 
        </dependency> 
        <!-- Spring Security --> 
        <dependency> 
         <groupId>org.springframework.boot</groupId> 
         <artifactId>spring-boot-starter-security</artifactId> 
        </dependency> 
        <!-- jpa --> 
        <dependency> 
         <groupId>org.springframework.boot</groupId> 
         <artifactId>spring-boot-starter-data-jpa</artifactId> 
        </dependency> 
        <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.0-api --> 
        <dependency> 
         <groupId>org.hibernate.javax.persistence</groupId> 
         <artifactId>hibernate-jpa-2.0-api</artifactId> 
         <version>1.0.1.Final</version> 
        </dependency> 
        <!-- mysql connector --> 
        <dependency> 
         <groupId>mysql</groupId> 
         <artifactId>mysql-connector-java</artifactId> 
        </dependency> 
        <!-- mail service --> 
        <dependency> 
         <groupId>org.springframework.boot</groupId> 
         <artifactId>spring-boot-starter-mail</artifactId> 
        </dependency>  
        <!-- hot swapping, disable cache for template, enable live reload --> 
        <dependency> 
         <groupId>org.springframework.boot</groupId> 
         <artifactId>spring-boot-devtools</artifactId> 
         <optional>true</optional> 
         <scope>provided</scope> 
        </dependency> 
        <!-- freemarker template --> 
        <dependency> 
         <groupId>org.freemarker</groupId> 
         <artifactId>freemarker</artifactId> 
         <version>2.3.23</version> 
        </dependency> 
        <!-- json simple --> 
        <dependency> 
         <groupId>com.googlecode.json-simple</groupId> 
         <artifactId>json-simple</artifactId> 
         <version>1.1.1</version> 
        </dependency> 
    
        <!-- tag::actuator[] --> 
        <dependency> 
         <groupId>org.springframework.boot</groupId> 
         <artifactId>spring-boot-starter-actuator</artifactId> 
        </dependency> 
        <!-- end::actuator[] --> 
        <dependency> 
         <groupId>org.springframework.boot</groupId> 
         <artifactId>spring-boot-configuration-processor</artifactId> 
         <optional>true</optional> 
        </dependency> 
        <dependency> 
         <groupId>com.h2database</groupId> 
         <artifactId>h2</artifactId> 
         <version>1.4.194</version> 
         <scope>test</scope> 
        </dependency> 
    </dependencies> 
    
    <properties> 
        <java.version>1.8</java.version> 
    </properties> 
    
    <build> 
        <plugins> 
         <plugin> 
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot-maven-plugin</artifactId> 
         </plugin> 
         <plugin> 
          <artifactId>maven-failsafe-plugin</artifactId> 
          <executions> 
           <execution> 
            <goals> 
             <goal>integration-test</goal> 
             <goal>verify</goal> 
            </goals> 
           </execution> 
          </executions> 
         </plugin> 
        </plugins> 
    </build> 
    

+0

更新你的问题与web.xml&项目目录结构与您尝试的404 URL – 2017-10-12 00:33:22

+0

- 那么web.xml似乎丢失 –

+0

https://stackoverflow.com/questions/3136177/maven-error-while- building-war-package-web-xml-missing –

让Spring启动部署作为战争 - 你需要重新配置应用程序类。

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file

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

} 

在pom.xml ,因为我是使用maven我还添加了依赖添加

<packaging>war</packaging> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <scope>provided</scope> 
</dependency> 

我的申请被在复杂的我用reactjs作为前端表现层和Java一样的API层。我必须将reactjs构建版本移动到main/src/webapps中 - 然后将它作为js,css和html文件包正确显示在war文件中。使用reactjs作为表示层,它只能通过api连接到java端 - 所以url结构很重要,我已经把所有东西都放在了预期它会从根目录运行的地方。所以如果你部署到tomcat - 你可能需要重命名war文件ROOT.war。

+0

很好,让它工作 – Acewin

Java的春季启动 - 战争文件不部署在Tomcat的Apache

弹簧引导与application.jar里面包括应用服务器builed。

Spring Boot旨在让您轻松创建弹簧驱动的生产级应用程序和服务,而且大惊小怪。它采用Spring平台的观点,以便新用户和现有用户可以快速找到他们需要的位。您可以使用它创建可以使用'java -jar'或更传统的WAR部署启动的独立Java应用程序。我们还提供了一个运行“春天脚本”的命令行工具。

https://spring.io/blog/2013/08/06/spring-boot-simplifying-spring-for-everyone

所以,你不需要再在Apache Tomcat应用服务器部署。 只需运行它就像简单的java .jar文件。

nohup java -jar app.jar & 
+0

我不能说男人 - 他们希望它打包成一个战争文件 - 所以它可以放在一个安全的医院服务器上。我正在本地运行项目,只是使用Maven构建并运行jar文件,很可能就像刚刚列出的那样。但是他们希望它只是通过战争文件来完成部署。 –

+0

Spring团队创建SpringBoot来解决配置的复杂性。所以你可以通过删除pom.xml依赖关系配置和注释来删除SpringBoot配置,将它构建为.war,它会正常工作。 – 2017-10-12 02:39:33

+0

- 从哪里删除弹簧引导配置? - 我将它作为war文件构建 - 它会产生404错误 –

春季启动Web项目Spring Boot WebApp as WAR

定期SpringBoot应用程序构建基于Maven的工作示例是一个打包的罐子。

您需要将其修改为WAR并检查WEB-INF的内容是否正确。

打包为war的Spring引导应用程序不是单独部署到Tomcat中,而是直接通过Spring Boot App(通过main方法)运行。你需要测试,但根据我的理解,如果有人建议你在tomcat中部署它,那么你需要通知他们,他们需要一个普通的Web应用程序,而不是SpringBoot应用程序。

每个SpringBoot应用程序都运行它自己的容器。

此外,您将视图文件保留在模板目录中,如果您未使用Thymeleaf,则无法从模板目录中将它们选为静态内容。

根据Traditional deployment page你必须添加依赖

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <scope>provided</scope> 
</dependency>