2016-11-30 62 views
0

这是整个的pom.xmlspringboot应用程序如何在main方法中运行并在tomcat中运行,其配置与下面相同?

<?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> 

    <groupId>com.example</groupId> 
    <artifactId>demo</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>demo</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.0.RELEASE</version> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <start-class>com.example.Application</start-class> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

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

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

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

的应用类应该是这样的

Application.java

package com.example; 

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

@SpringBootApplication 
@Controller 
public class Application extends SpringBootServletInitializer { 


    /** 
    * Used when run as JAR 
    */ 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @RequestMapping("/") 
    public @ResponseBody String hello(){ 
     return "hello world!"; 
    } 

    /** 
    * Used when run as WAR 
    */ 
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     return builder.sources(Application.class); 
    } 

} 

整个项目是你可以为above.However看到,主要方法不能运行,如果我设置范围

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

提供。但是,如果我删除范围,主要方法可以正常运行。问题是我应该怎么做而不删除范围运行主要方法。

+0

您需要先学习的'@ controller'注释 – emotionlessbananas

+0

spring-boot-maven-plugin将提供的'作用域依赖包打包成'WEB-INF/lib提供的',该位置不会被容器挑选当您将它部署为.WAR时。您应该将异常堆栈跟踪发布到__“主要方法无法运行”__供其他人帮忙。 – tan9

回答

0
  • 在maven中,当您省略scope时,它默认为compile
  • 当您在servlet容器外面运行时(即作为java 应用程序),您需要提供的compile(或删除范围,因为compile是默认值)。这样做是为了将这些罐子添加为依赖关系。
  • 在servlet容器(tomcat或jetty)中运行时,scope可能设置为provided,因为这些jar由servlet容器在运行时提供,不应包含在打包的应用程序中。

现在,为了解决手头上的问题,您可以使用maven配置文件。执行maven任务时,您可以使用-P开关激活配置文件。

+0

非常感谢!它为我提供了一个好主意! – Wulh

+0

@Wulh请接受答案,如果它帮助你! –

相关问题