From a335a9d213ad16e311d2f517cc2f3722842f7094 Mon Sep 17 00:00:00 2001 From: Febbweiss Date: Wed, 6 Apr 2016 14:23:39 +0200 Subject: [PATCH] Feature: add README.md --- README.md | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..dddecad --- /dev/null +++ b/README.md @@ -0,0 +1,144 @@ +# springboot-react-webpack +A demo project with Spring Boot, React and Webpack + +This project includes : +* Spring Boot as backend resource +* React as client JS framework +* webpack to translate JSX to JS and manage client resources link +* maven-release-plugin +* cf-maven-plugin +* docker-maven-plugin (from Spotify) + +## Profile + +There are 3 profiles : +* the default one (without specification) is for development mode. +* _production_ used to generate the production ready client resources +* _docker_ to access to the Docker plugin and generate an image + +## Launching + +To launch this project, just use the following command line : + +In development mode : +mvn clean spring-boot:run +npm run watch + +In production mode : +mvn clean spring-boot:run -P production + +Without a profile, you have to run the webpack watcher to deliver client resources. With the _production_ profile, no needs to launch the wepback watcher. + +## Configuration +To use the CloudFoundry and Release plugins, the _settings.xml_ must contains the following lines : + +```xml + + + cloudfoundry + username + password + + + github + username + password + + +``` + +## Spring Boot + +Spring Boot is used as the backend server. It provides the HTML pages and the REST endpoints. +React is server side compiled at runtime using nashorn. + +## React + +React is the client side library. It's possible to write JSX which will be translate by webpack. + + +## Webpack + +### Configuration + +Webpack configuration is done by the _webpack.config.js_ file at the project's root. + +### Usage + +Webpack is launched at the _generate-resources_ maven phase. +In this configuration, webpack provides resources (JS and CSS) for commons librairies and custom JS scripts. It takes in account LESS. The HTML final resource is generated from a template adding the needed resources. +Using the default profile and the watcher, the HotModuleReplacement module is activated, so no need to refresh the page when updating a JS or a CSS, webpack does it. + + +## Plugin release + +### Configuration + +To manage the release process with Git, you have to replace the link in the _developerConnection_ tag with the Git project URL. + +### Usage + +The _maven-release-plugin_ allows to release an app tagging the repository. A release is : +* changing from SNAPSHOT to stable +* creating a tag (locally and remotely) +* increasing the SNAPSHOT version + +Two steps : +``` +mvn release:prepare +mvn release:perform +``` + +To rollback a _prepare_ : +``` +mvn release:rollback +``` + +To test the release : +``` +mvn -DdryRun=true release:prepare +mvn release:clean (test cleaning) +``` + +### Documentation + +https://maven.apache.org/maven-release/maven-release-plugin/index.html + +## Plugin CloudFoundry + +### Configuration + +Change the _TOFILL_ strings in the comment plugin's section. + +### Usage + +The _cf-maven-plugin_ plugin allows to manage the application in a CloudFoundry platform and specifically to push it : + +``` +mvn cf:push +``` + +### Documentation + +http://docs.cloudfoundry.org/buildpacks/java/build-tool-int.html + + +## Plugin Docker + +### Configuration + +The _docker-maven-plugin_ (from Spotify) plugin has no configuration. + +### Usage + +The default project packaging (for CloudFoundry) is a WAR. In the Docker image, we use a JAR. To use this plugin (and the correct packaging), use the _docker_ profile : + +``` +mvn package -P docker +``` + +This command generates a local Docker image. To manage it, use the _docker_ profile to access the _docker-maven-plugin_ (such as push it). + +### Documentation + +https://github.com/spotify/docker-maven-plugin