2017-09-03 29 views
4

我有一個Spring Boot和Angular 2/4項目,我想打包成一個WAR並在Tomcat上提供服務。我有2個模塊(1折角和1彈簧引導)一個父項目,具有以下的pom.xml配置:maven - Spring Boot/Angular 2/4項目戰爭版本

父/ 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>mk.edu.ukim.feit.bolt</groupId> 
<artifactId>parent</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>pom</packaging> 

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

<modules> 
    <module>api</module> 
    <module>frontend</module> 
</modules> 

前端/ 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> 

<artifactId>frontend</artifactId> 


<name>Bolt Client</name> 
<description>Bolt messaging app frontend client</description> 

<parent> 
    <groupId>mk.edu.ukim.feit.bolt</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0-SNAPSHOT</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> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>com.github.eirslett</groupId> 
      <artifactId>frontend-maven-plugin</artifactId> 
      <version>1.4</version> 

      <configuration> 
       <nodeVersion>v7.9.0</nodeVersion> 
       <npmVersion>4.6.1</npmVersion> 
       <workingDirectory>src/main/frontend</workingDirectory> 
      </configuration> 

      <executions> 
       <execution> 
        <id>install node and npm</id> 
        <goals> 
         <goal>install-node-and-npm</goal> 
        </goals> 
       </execution> 

       <execution> 
        <id>npm install</id> 
        <goals> 
         <goal>npm</goal> 
        </goals> 
       </execution> 

       <execution> 
        <id>npm run prod</id> 

        <goals> 
         <goal>npm</goal> 
        </goals> 

        <configuration> 
         <arguments>run prod</arguments> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

    <resources> 
     <resource> 
      <directory>target/frontend</directory> 
      <targetPath>static</targetPath> 
     </resource> 
    </resources> 
</build> 

API/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> 

<artifactId>api</artifactId> 
<version>1.0-SNAPSHOT</version> 

<name>Bolt API</name> 
<description>Bolt messaging app REST API</description> 
<packaging>war</packaging> 

<parent> 
    <groupId>mk.edu.ukim.feit.bolt</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0-SNAPSHOT</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> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-aop</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-rest</artifactId> 
    </dependency> 
    <!--<dependency>--> 
     <!--<groupId>org.springframework.boot</groupId>--> 
     <!--<artifactId>spring-boot-starter-jdbc</artifactId>--> 
    <!--</dependency>--> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web-services</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-websocket</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-mail</artifactId> 
     <version>1.5.6.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-logging</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.restdocs</groupId> 
     <artifactId>spring-restdocs-mockmvc</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
     <version>${h2.version}</version> 
     <scope>compile</scope> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt --> 
    <dependency> 
     <groupId>io.jsonwebtoken</groupId> 
     <artifactId>jjwt</artifactId> 
     <version>0.6.0</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/joda-time/joda-time --> 
    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.9.9</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/commons-validator/commons-validator --> 
    <dependency> 
     <groupId>commons-validator</groupId> 
     <artifactId>commons-validator</artifactId> 
     <version>1.6</version> 
    </dependency> 
    <dependency> 
     <groupId>mk.edu.ukim.feit.bolt</groupId> 
     <artifactId>frontend</artifactId> 
     <version>${project.version}</version> 
     <scope>runtime</scope> 
    </dependency> 
</dependencies> 

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

我下面this教程,我最終成功地建立MVN運行從父目錄全新安裝的項目,然後進入該API目錄並運行MVN春季啓動:運行時,應用程序是服務於localhost:8080,但是在構建戰爭文件Maven時不知道如何選擇從Angular編譯的靜態文件,並在http://localhost:8080上給我404。任何人都可以提供關於可能出錯的提示嗎?

我也嘗試將「prod」NPM腳本設置爲「ng build --prod --base-href = \」./ \「」,認爲它可能不得不對它做些什麼,但它沒有幫助。有任何想法嗎?

回答

0

我找到了解決辦法:

  1. 下副本的服務器項目單 「的index.html」 文件 「的src /主/資源/模板」 文件夾。請注意,HTML文件結構必須非常嚴格(所有打開的標籤必須關閉等)。
  2. 添加行家依賴 「彈簧引導起動thymeleaf」
  3. 的請求映射創建的HomeController 「/」 到 「指數」 模板

樣品:

@Controller 
public class HomeContoller { 
    @RequestMapping("/") 
    public String index() { 
     return "index"; 
    } 
} 

GitHub commit with HomeController
如果有人知道更清潔/更好的解決方案並且可以共享,那將會很棒。