<?xml version="1.0"?>
<!--

    Copyright 2017 ZTE Corporation.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

-->
<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/maven-v4_0_0.xsd">    
    <parent>
        <groupId>org.openo.client.gui</groupId>
        <artifactId>client-gui</artifactId>
        <version>1.1.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>holmes</artifactId>
    <packaging>war</packaging>
    <version>1.1.0-SNAPSHOT</version>
	<name>client-gui/holmes</name>

    <properties>
      <sonar.exclusions>src/main/webapp/node_modules/**,src/main/webapp/node/**</sonar.exclusions>
    </properties>

<build>
<plugins>
        <plugin>
            <groupId>com.github.eirslett</groupId>
            <artifactId>frontend-maven-plugin</artifactId>
            <version>1.3</version>
            <executions>
                <execution>
                    <id>install node and npm</id>
                    <goals>
                        <goal>install-node-and-npm</goal>
                    </goals>
                    <phase>generate-resources</phase>
                </execution>
                <execution>
                    <id>npm install</id>
                    <goals>
                        <goal>npm</goal>
                    </goals>
                    <configuration>
                        <arguments>install</arguments>
                    </configuration>
                </execution>
                <execution>
                    <id>webpack build</id>
                    <goals>
                        <goal>webpack</goal>
                    </goals>
                    <phase>generate-resources</phase>
                </execution>
            </executions>
            <configuration>
                <workingDirectory>src/main/webapp</workingDirectory>
                <nodeVersion>v6.9.5</nodeVersion>
                <npmVersion>3.10.10</npmVersion>
                <nodeDownloadRoot>https://nodejs.org/dist/</nodeDownloadRoot>
                <npmDownloadRoot>https://registry.npmjs.org/npm/-/</npmDownloadRoot>
            </configuration>
        </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warSourceExcludes>
                        alarm/**,
                        config/**,
                        foo/**,
                        i18n/**,
                        node/**,
                        node_modules/**,
                        public/**,
                        *.json,
                        *.js
                    </warSourceExcludes>
                </configuration>
            </plugin>    
        
    </plugins>
</build> 
</project>
