From 052d5a501799aa007e5ae4490651e923ba6f9b72 Mon Sep 17 00:00:00 2001 From: Kai Moritz <kai@juplo.de> Date: Mon, 24 Aug 2015 18:27:31 +0200 Subject: [PATCH] Integration of the Grunt-Frontend- with the Maven-Backend-Project --- .gitignore | 3 + .gitmodules | 3 + Gruntfile.js | 35 ++++++++ package.json | 12 +++ pom.xml | 49 ++++++++++- src/main/frontend | 1 + .../webapp/thymeleaf/templates/layout.html | 87 ------------------- 7 files changed, 102 insertions(+), 88 deletions(-) create mode 100644 .gitmodules create mode 100644 Gruntfile.js create mode 100644 package.json create mode 160000 src/main/frontend delete mode 100644 src/main/webapp/thymeleaf/templates/layout.html diff --git a/.gitignore b/.gitignore index eb5a316..28dba0a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ target +node +**/node_modules +src/main/frontend/dist diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..c37f606 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/main/frontend"] + path = src/main/frontend + url = ../template-development diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..a704356 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,35 @@ +module.exports = function(grunt) { + + grunt.loadNpmTasks('grunt-newer'); + + grunt.registerTask('frontend','Build HTML & CSS for Frontend', function() { + var + done = this.async(), + path = './src/main/frontend'; + + grunt.util.spawn({ + cmd: 'npm', + args: ['install'], + opts: { cwd: path, stdio: 'inherit' } + }, function (err, result, code) { + if (err || code > 0) { + grunt.fail.warn('Failed installing node modules in "' + path + '".'); + } + else { + grunt.log.ok('Installed node modules in "' + path + '".'); + } + + process.chdir(path); + require(path + '/Gruntfile.js')(grunt); + grunt.task.run('newer:copy'); + grunt.task.run('newer:less'); + grunt.task.run('newer:svgstore'); + + done(); + }); + }); + + + grunt.registerTask('default', [ 'frontend' ]); + +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..81fefa0 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "maven-grunt-integration", + "description": "Example, how to ingegrat maven with a frontend developed with Grunt", + "homepage": "http://juplo.de/maven-grunt-integration", + "author": "kai@juplo.de", + "version": "1.0.0", + "devDependencies": { + "grunt": "~0.4.5", + "grunt-cli": "~0.1.13", + "grunt-newer": "~1.1.1" + } +} diff --git a/pom.xml b/pom.xml index 3cb5566..7cfed12 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ <groupId>de.juplo</groupId> <artifactId>maven-grunt-integration</artifactId> <name>Juplo - Example Integration of Maven and Grunt</name> - <version>0.1</version> + <version>2.0.0</version> <packaging>war</packaging> <url>http://www.juplo.de/maven-grunt-integration</url> @@ -134,6 +134,18 @@ <showWarnings>true</showWarnings> </configuration> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-war-plugin</artifactId> + <version>2.6</version> + <configuration> + <webResources> + <resource> + <directory>src/main/frontend/dist</directory> + </resource> + </webResources> + </configuration> + </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> @@ -153,9 +165,44 @@ <artifactId>jetty-maven-plugin</artifactId> <version>9.2.13.v20150730</version> <configuration> + <webApp> + <resourceBases> + <resourceBase>src/main/frontend/dist</resourceBase> + <resourceBase>src/main/webapp</resourceBase> + </resourceBases> + </webApp> <useTestScope>true</useTestScope> </configuration> </plugin> + <plugin> + <groupId>com.github.eirslett</groupId> + <artifactId>frontend-maven-plugin</artifactId> + <version>0.0.24</version> + <executions> + <execution> + <id>install node and npm</id> + <goals> + <goal>install-node-and-npm</goal> + </goals> + <configuration> + <nodeVersion>v0.10.18</nodeVersion> + <npmVersion>1.3.8</npmVersion> + </configuration> + </execution> + <execution> + <id>npm install</id> + <goals> + <goal>npm</goal> + </goals> + </execution> + <execution> + <id>grunt build</id> + <goals> + <goal>grunt</goal> + </goals> + </execution> + </executions> + </plugin> </plugins> </build> diff --git a/src/main/frontend b/src/main/frontend new file mode 160000 index 0000000..72b4e8d --- /dev/null +++ b/src/main/frontend @@ -0,0 +1 @@ +Subproject commit 72b4e8d3ea9ab5d4312605df4839779847a55773 diff --git a/src/main/webapp/thymeleaf/templates/layout.html b/src/main/webapp/thymeleaf/templates/layout.html deleted file mode 100644 index 7f69a65..0000000 --- a/src/main/webapp/thymeleaf/templates/layout.html +++ /dev/null @@ -1,87 +0,0 @@ -<!DOCTYPE html> -<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.thymeleaf.org"> - -<head> - - <meta charset="utf-8" /> - <meta http-equiv="X-UA-Compatible" content="IE=edge" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - - <title layout:title-pattern="Maven/Grunt-Integration - $CONTENT_TITLE">Layout-Template</title> - -</head> - -<body> - - <header> - <h2 th:text="'Maven/Grunt-Integration :: ' + ${title}">Maven/Grunt-Integration :: Layout-Template</h2> - <hr /> - <!-- Navigation --> - <nav id="menu" class="navbar navbar-submenu navbar-fixed-top"> - <h3 class="sr-only">Navigation</h3> - <ul layout:fragment="menu"> - <li><strong>Home</strong></li> - <li><a href="#">A</a></li> - <li><a href="#">B</a></li> - <li><a href="#">C</a></li> - </ul> - </nav> - <hr /> - </header> - - - <main> - - <article layout:fragment="content"> - <h1>Layout-Template</h1> - <p> - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla - pariatur. Excepteur sint occaecat cupidatat non proident, sunt in - culpa qui officia deserunt mollit anim id est laborum. - </p> - <h2>Duis aute irure dolor</h2> - <ul> - <li>Operators and other mathematical stuff: -+/*</li> - <li> - Characters offten used in programming languages: - {(<>)}@$?%*#;:&/\!^"'`~ - </li> - <li>Special german characters: ÃäÃöÃü</li> - <li>Other special characters: @?¢§%°</li> - </ul> - <h2>Excepteur sint occaecat cupidatat</h2> - <p> - Lorem ipsum dolor <em>sit amet</em>, consectetur adipisicing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris - nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla - pariatur. Excepteur sint occaecat cupidatat non proident, sunt in - culpa qui officia deserunt mollit anim id est laborum. - </p> - <p> - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. - <strong>Ut enim ad minim veniam, quis nostrud <em>exercitation - ullamco</em> laboris nisi ut aliquip ex ea commodo consequat</strong>. - Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit - anim id est laborum. - </p> - </article> - - </main> - - <footer> - <hr /> - Brought to you by <a href="http://juplo.de/">juplo.de</a>! - </footer> - -</body> - -</html> -- 2.20.1