2015-10-06 90 views
4

我試圖配置Maven以使用多模塊Spring Boot。我是Maven和Spring Boot Stuff的新手,我不確定這是如何協同工作的。所以我開始創建一個簡單的結構。一開始我想從一個模塊開始。Maven Spring Boot多模塊

myApp 
| 
|--web module 
|----java 
|------controller 
|------Application.java (Main Methode) 
|----resources 
|------templates 
|--------index.html 
|------application.propperties 
|------log4j2.json 
|----webapp 
|----pom.xml 
|--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> 

    <groupId>net.benteler.apps.saplication</groupId> 
    <artifactId>saplication</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <modules> 
     <module>web</module> 
    </modules> 
    <packaging>pom</packaging> 

    <name>saplication</name> 
    <description>Shows SAP Reports</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.2.6.RELEASE</version> 
     <relativePath/> 
     <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.7</java.version> 
    </properties> 

    <dependencyManagement> 
     <dependencies> 

      <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-jdbc</artifactId> 
       <version>4.1.7.RELEASE</version> 
      </dependency> 
      <dependency> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-c3p0</artifactId> 
       <version>5.0.1.Final</version> 
      </dependency> 


      <!-- Database Driver--> 
      <dependency> 
       <groupId>mysql</groupId> 
       <artifactId>mysql-connector-java</artifactId> 
       <scope>runtime</scope> 
       <version>5.1.36</version> 
      </dependency> 
      <dependency> 
       <groupId>com.oracle</groupId> 
       <artifactId>ojdbc</artifactId> 
       <version>6</version> 
      </dependency> 


      <!-- JSON handling--> 
      <dependency> 
       <groupId>com.fasterxml.jackson.core</groupId> 
       <artifactId>jackson-core</artifactId> 
       <version>2.6.2</version> 
      </dependency> 

      <dependency> 
       <groupId>com.fasterxml.jackson.core</groupId> 
       <artifactId>jackson-databind</artifactId> 
       <version>2.6.2</version> 
      </dependency> 

      <dependency> 
       <groupId>com.fasterxml.jackson.core</groupId> 
       <artifactId>jackson-annotations</artifactId> 
       <version>2.6.2</version> 
      </dependency> 

     </dependencies> 
    </dependencyManagement> 

    <build> 
     <finalName>saplication-snapshot</finalName> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

這裏我主要模塊的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"> 
    <parent> 
     <artifactId>saplication</artifactId> 
     <groupId>net.benteler.apps.saplication</groupId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>web</artifactId> 

    <dependencies> 
     <!-- Spring Boot --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </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-actuator</artifactId> 
     </dependency> 

     <!-- Spring Boot Logging with Log4J--> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-log4j2</artifactId> 
     </dependency> 
       <!-- Data handling --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>xml-apis</groupId> 
        <artifactId>xml-apis</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-core</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-beans</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-orm</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-context</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-aop</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-tx</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-c3p0</artifactId> 
     </dependency> 


     <!-- Database Driver--> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc</artifactId> 
     </dependency> 

     <!-- Unit testing --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <!-- JSON handling--> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
     </dependency> 

     <!-- Templating - deliver JSP--> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
     </dependency> 


    </dependencies> 

    <build> 
     <finalName>saplication-snapshot</finalName> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

要我application.propperties我添加

spring.view.prefix = /templates/ 
spring.view.suffix = .html 

而我的Application.java看起來像這樣:

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     System.out.println("Hallo"); 
     SpringApplication.run(SaplicationApplication.class, args); 
    } 
} 

我的控制器

@Controller 
public class MainController { 

    private static final Logger logger = LogManager.getLogger(MainController.class.getName()); 

    @RequestMapping("/test") 
    public String index(ModelAndView modelAndView) { 
     logger.info("/test"); 
     logger.debug("Hello world - debug log"); 
     logger.info("Hello world - info log"); 
     logger.warn("Hello world - warn log"); 
     logger.error("Hello world - error log"); 
     return "index"; 
    } 

} 

當我開始映射工作

Mapped "{[/test]}" onto public java.lang.String saplication.controller.MainController.index(org.springframework.web.servlet.ModelAndView) 

的應用程序和日誌消息顯示

[INFO ] 2015-10-06 08:41:37.477 [http-nio-8080-exec-1] MainController - /test 
[INFO ] 2015-10-06 08:41:37.478 [http-nio-8080-exec-1] MainController - Hello world - info log 
[WARN ] 2015-10-06 08:41:37.478 [http-nio-8080-exec-1] MainController - Hello world - warn log 
[ERROR] 2015-10-06 08:41:37.478 [http-nio-8080-exec-1] MainController - Hello world - error log 

但是當我輸入http://localhost:8080/test我剛看到消息

Whitelabel Error Page 

This application has no explicit mapping for /error, so you are seeing this as a fallback. 

Tue Oct 06 08:41:37 CEST 2015 
There was an unexpected error (type=Not Found, status=404). 
No message available 

在第一種觀點,似乎一切正常,但問題女巫我是春沒有找到我的index.html模板。

我readlly不知道我的配置中出了什麼問題!所以我需要你的幫助。

+0

你可以用[http:// localhost:8080//test](http:// localhost:8080//test)以及maven的快照名稱來嘗試它。 [http:// localhost:8080//test](http:// localhost:8080//test) – Patrick

+0

你有你的應用程序在github或者別的地方? –

+0

看起來像jsp頁面不存在('index.jsp')。所以,你可以嘗試創建它並再次檢查它嗎? –

回答

0

進行這些更改您的Application.java

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

    } 

SpringBootServletInitializer

這需要運行的Web應用程序。這將啓用servlet容器並將您的應用程序綁定到servlet容器。

更新: -

要運行的主模塊(Web模塊),你必須轉到在該目錄之後,使用mvn spring-boot:run命令運行項目。

例子: - [我@ linuxbox對myApp] $ cd /web2. [我@ linuxbox網] $ mvn spring-boot:run

+0

只有在構建戰爭並將其部署到獨立容器時才需要這樣做。如果您遵循使用嵌入式容器的推薦和默認方法,則無需此操作。 –

0

把你的資源文件夾src/main/resources在Web模塊內。這是資源的默認Maven結構。

0

解決方案:將您的IDE的工作DIR更改爲您的模塊,因爲spring-boot嵌入tomcat使用頂級路徑加上您定義的路由web根目錄。