Skip to content

Instantly share code, notes, and snippets.

@PierreBesson
Created June 21, 2019 15:51
Show Gist options
  • Save PierreBesson/a68507a89be78c824552911a61f44188 to your computer and use it in GitHub Desktop.
Save PierreBesson/a68507a89be78c824552911a61f44188 to your computer and use it in GitHub Desktop.
diff --git a/_layouts/default.html b/_layouts/default.html
index a1dc85e..ccf461b 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -12,6 +12,7 @@
<meta name="twitter:description" content="JHipster is a fully Open Source, widely used application generator. It leverages cool technologies like Spring Boot, Angular and React to give you a high level of productivity and quality." />
<meta name="twitter:image:src" content="https://www.jhipster.tech/images/twitter-card.png?20170202" />
<meta name="twitter:url" content="https://www.jhipster.tech/" />{% endif %}
+ <meta name="google-site-verification" content="JSA7VC5gSwD5KKbXlxK8F9rXJtC91rKJq0aWhfpBC0k" />
<!-- Chrome, Firefox OS and Opera -->
<meta name="theme-color" content="#353d47">
<!-- Windows Phone -->
@@ -39,6 +40,7 @@
{% if page.home == true %}
<link rel="stylesheet" type="text/css" href="/css/home.css">
{% endif %}
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" />
<!-- Bootstrap Docs CSS subset to get icon -->
<!--<link href="/css/bootstrap-docs.css" rel="stylesheet">-->
@@ -74,6 +76,10 @@
</div>
<ul class="nav navbar-nav navbar-right">
{% if page.home == true %}
+ <li class="page-scroll">
+ <a href="https://jhipster-conf.github.io/" target="
+ "><i class="fa fa-bell"></i>&nbsp;JHipster Conf 2019</a>
+ </li>
<li class="page-scroll">
<a href="#sponsors">Sponsors</a>
</li>
@@ -91,12 +97,19 @@
</li>
{% endif %}
{% if page.home != true %}
+ <li class="page-scroll">
+ <a href="https://jhipster-conf.github.io/" target="
+ "><i class="fa fa-bell"></i>&nbsp;JHipster Conf 2019</a>
+ </li>
<li class="page-scroll">
<a href="{{ site.url }}/sponsors/">Sponsor</a>
</li>
{% endif %}
- <li class="">
- <a href="https://www.google.com/search?q=site:www.jhipster.tech" target="_blank">Search</a>
+ <li class="search-box">
+ <form id="content-search-form">
+ <i class="fa fa-search"></i>
+ <input type="text" name="search" class="doc-search-algolia" placeholder="Search..." />
+ </form>
</li>
<li>
<a href="https://github.com/jhipster/generator-jhipster" class="dropdown-toggle navlink" target="_blank" role="button"><i class="fa fa-github fa-2x"></i></a>
@@ -145,6 +158,7 @@
<li {% if '/presentation' == page.url %}class="active" {% endif %}><a href="/presentation" target="_blank"><i class="fa fa-fw fa-desktop"></i> Official JHipster slides</a></li>
<li {% if '/screenshots/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/screenshots/"><i class="fa fa-fw fa-picture-o"></i> JHipster in 5 screenshots</a></li>
<li {% if '/video-tutorial/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/video-tutorial/"><i class="fa fa-fw fa-film"></i> Video tutorial (16 minutes)</a></li>
+ <li><a href="https://github.com/jhipster/jhipster-guides" target="_blank"><i class="fa fa-fw fa-road"></i> Online guides</a></li>
<li {% if '/companies-using-jhipster/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/companies-using-jhipster/"><i class="fa fa-fw fa-thumbs-up"></i> Companies using JHipster</a></li>
<li {% if '/showcase/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/showcase/"><i class="fa fa-fw fa-file-image-o"></i> Showcase of JHipster apps</a></li>
</ul>
@@ -250,6 +264,7 @@
<li {% if '/managing-server-errors/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/managing-server-errors/"><i class="fa fa-fw fa-fire-extinguisher"></i> Managing server errors</a></li>
<li {% if '/using-angular/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/using-angular/"><i class="fa fa-fw fa-html5"></i> Using Angular</a></li>
<li {% if '/using-react/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/using-react/"><i class="fa fa-fw fa-html5"></i> Using React</a></li>
+ <li {% if '/using-vue/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/using-vue/"><i class="fa fa-fw fa-html5"></i> Using Vue</a></li>
<li {% if '/customizing-bootstrap-4/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/customizing-bootstrap-4/"><i class="fa fa-fw fa-css3"></i> Customizing Bootstrap 4</a></li>
<li {% if '/tls/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/tls/"><i class="fa fa-fw fa-lock"></i> Using TLS and HTTP/2</a></li>
</ul>
@@ -284,7 +299,6 @@
<li {% if '/aws/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/aws/"><i class="fa fa-fw fa-cloud-upload"></i> Deploying to AWS</a></li>
<li {% if '/azure/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/azure/"><i class="fa fa-fw fa-cloud-upload"></i> Deploying to Azure</a></li>
<li {% if '/gcp/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/gcp/"><i class="fa fa-fw fa-cloud-upload"></i> Deploying to Google Cloud Platform</a></li>
- <li {% if '/rancher/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/rancher/"><i class="fa fa-fw fa-cloud-upload"></i> Deploying to Rancher</a></li>
<li {% if '/boxfuse/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/boxfuse/"><i class="fa fa-fw fa-cloud-upload"></i> Deploying with Boxfuse</a></li>
</ul>
</div>
@@ -295,6 +309,7 @@
<div id="dropdown-10" class="panel-collapse collapse" style="height: 0px;">
<div class="panel-body">
<ul class="nav navbar-nav">
+ <li {% if '/modules/official-blueprints/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/modules/official-blueprints/"><i class="fa fa-fw fa-star"></i> Official blueprints</a></li>
<li {% if '/modules/marketplace/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/modules/marketplace/"><i class="fa fa-fw fa-shopping-cart"></i> Marketplace</a></li>
<li {% if '/modules/creating-a-module/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/modules/creating-a-module/"><i class="fa fa-fw fa-cube"></i> Creating a module</a></li>
<li {% if '/modules/creating-a-blueprint/' == page.url %}class="active" {% endif %}><a href="{{ site.url }}/modules/creating-a-blueprint/"><i class="fa fa-fw fa-cube"></i> Creating a blueprint</a></li>
@@ -360,31 +375,30 @@
<div class="col-12">
JHipster is sponsored by:
</div>
- <!-- change to below commented line when adding more logos -->
- <!-- <div class="col-xs-12 col-sm-6 col-md-4"> -->
- <div class="col-md-offset-4 col-sm-12 col-md-4">
+ <div class="col-md-offset-2 col-sm-12 col-md-4">
<div class="thumbnail no-margin-bottom">
<div class="logo-container">
- <a href="https://developer.okta.com/signup?utm_source=JHipster&utm_medium=logo&utm_campaign=Gold-Sponsor" target="_blank"><img src="{{ site.url }}/images/open-collective/okta.png" width="320px" height="108px"></a>
+ <a href="https://developer.okta.com/signup?utm_source=JHipster&utm_medium=logo&utm_campaign=Gold-Sponsor" target="_blank"><img src="{{ site.url }}/images/open-collective/okta.png" width="320px" height="175px"></a>
</div>
</div>
- </div>
- <!--
- <div class="col-xs-12 col-sm-6 col-md-4">
- <div class="thumbnail no-margin-bottom">
- <div class="logo-container">
- <a href="https://developer.okta.com/signup?utm_source=JHipster&utm_medium=logo&utm_campaign=Gold-Sponsor" target="_blank"><img src="{{ site.url }}/images/open-collective/okta.png" width="320px" height="108px"></a>
+ <div>
+ <div>
+ <a href="https://developer.okta.com/blog/2019/04/04/java-11-java-12-jhipster-oidc?utm_source=JHipster&utm_medium=text-link&utm_campaign=Gold-Sponsor" target="_blank">Add SSO to your JHipster apps with Okta</a>
</div>
</div>
</div>
- <div class="col-xs-12 col-sm-6 col-md-4">
+ <div class="col-sm-12 col-md-4">
<div class="thumbnail no-margin-bottom">
<div class="logo-container">
- <a href="https://developer.okta.com/signup?utm_source=JHipster&utm_medium=logo&utm_campaign=Gold-Sponsor" target="_blank"><img src="{{ site.url }}/images/open-collective/okta.png" width="320px" height="108px"></a>
+ <a href="http://www.octoconsulting.com/" target="_blank"><img src="{{ site.url }}/images/open-collective/octoconsulting.png" width="180px" height="175px"></a>
+ </div>
+ </div>
+ <div>
+ <div>
+ <a href="http://www.octoconsulting.com/" target="_blank">Octo Consulting Group</a>
</div>
</div>
</div>
- -->
</div>
</div>
</div>
@@ -418,6 +432,15 @@
</li>
</ul>
</div>
+ <div class="footer-col col-md-4">
+ <div class="col-md-4 col-sm-12">
+ </div>
+ <div class="col-md-4 col-sm-12">
+ </div>
+ <div class="col-md-4 col-sm-12">
+ <a href="{{ site.url }}/cn/"><i class="fa fa-fw fa-globe"></i> Chinese</a>
+ </div>
+ </div>
</div>
</div>
</div>
@@ -499,6 +522,15 @@
ga('create', 'UA-46075199-1', 'auto');
ga('send', 'pageview');
</script>
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
+ <script type="text/javascript">
+ docsearch({
+ apiKey: '9bd47d3de4af6f3662fd11a7f0e38819',
+ indexName: 'jhipster',
+ inputSelector: '.doc-search-algolia',
+ debug: false // Set debug to true if you want to inspect the dropdown
+ });
+ </script>
</body>
</html>
diff --git a/_posts/2019-04-04-jhipster-release-6.0.0-beta.0.md b/_posts/2019-04-04-jhipster-release-6.0.0-beta.0.md
new file mode 100644
index 0000000..30d392e
--- /dev/null
+++ b/_posts/2019-04-04-jhipster-release-6.0.0-beta.0.md
@@ -0,0 +1,81 @@
+---
+layout: default
+title: Release 6.0.0-beta.0
+---
+
+JHipster release v6.0.0-beta.0
+==================
+
+This is our first beta release for JHipster v6.
+
+It includes more than [400 closed tickets and pull requests on the main project](https://github.com/jhipster/generator-jhipster/issues?q=milestone%3A6.0.0-beta.0+is%3Aclosed), so it is really a huge work.
+
+_It is not available through the usual channels as this is a beta release, please read below for more information!_
+
+Most important new features and upgrades
+-------------
+
+- Migration to spring-boot 2.1.x
+- JDK 11 support (while keeping JDK 8+ compatibility)
+- HTML 5 pushstate [#9098](https://github.com/jhipster/generator-jhipster/pull/9098)
+- Kubernetes enhancements (Istio, Helm)
+- Migration to spring-cloud Greenwish.x
+- Upgrade to Spring Security 5.1's OIDC Support
+- FakerJS support to generate sample data for entities [#9104](https://github.com/jhipster/generator-jhipster/pull/9104)
+- Update to latest Angular version [#8161](https://github.com/jhipster/generator-jhipster/pull/8161)
+- Update to latest React version
+- Lazy Loading of Angular entities
+- Bootswatch theme selection
+- Removed CSS Option [#9350](https://github.com/jhipster/generator-jhipster/pull/9350)
+- Improvements in Sonar integration [#9423](https://github.com/jhipster/generator-jhipster/pull/9423) and [#9482](https://github.com/jhipster/generator-jhipster/pull/9482)
+- Gatling 3 support, including several improvements with better and faster incremental builds and BOM support.
+- Integration tests are set up in their separate phase for Maven and Gradle
+- Update to Gradle 5
+- Migration to Liquibase 3.6.x
+- Update Elastic to 6.4.x
+- Update to Couchbase 6.x
+- Update to Infinispan 9.4.x
+- Update to Cassandra 4.x
+- Update to Hazelcast 3.11.x
+- Logging to the console in json format
+- Changing the default packaging to Jar while still being able to produce a War [#9034](https://github.com/jhipster/generator-jhipster/pull/9034)
+- Prettier for formatting YAML [#9281](https://github.com/jhipster/generator-jhipster/pull/9281)
+- Prettier transform to prettify the output from all sub-generators [#9371](https://github.com/jhipster/generator-jhipster/pull/9371)
+- Removed deprecated 'rancher-compose' sub-generator
+
+How to install
+------------
+
+This is a beta release, so it is not available on our usual "stable" release channel.
+
+To install JHipster v6.0.0-beta.0 using using NPM:
+
+ npm install -g generator-jhipster@beta
+
+It is also available using the JHipster Docker image, as it is automatically built from our source code.
+
+However, as this is a BETA release it will not be available using our other usual channels like:
+
+- [JHipster Online](https://start.jhipster.tech)
+- Homebrew
+- Chocolatey
+- [JHipster Devbox](https://github.com/jhipster/jhipster-devbox)
+
+You also won’t be able to use the `jhipster upgrade` sub-generator, as it won’t “see” the BETA release, which is distributed through a specific beta channel on NPM.
+
+
+Closed tickets and merged pull requests
+------------
+As always, __[you can check all closed tickets and merged pull requests here](https://github.com/jhipster/generator-jhipster/issues?q=milestone%3A6.0.0-beta.0+is%3Aclosed)__.
+
+Help and bugs
+--------------
+
+If you find any issue with this release, don't hesitate to:
+
+- Add a bug on our [bug tracker](https://github.com/jhipster/generator-jhipster/issues?state=open)
+- Post a question on [Stack Overflow](http://stackoverflow.com/tags/jhipster/info)
+
+If the issue you have is an urgent bug or security issue, please:
+
+- Contact [@java_hipster](https://twitter.com/java_hipster) on Twitter
diff --git a/_posts/2019-05-02-jhipster-release-6.0.0.md b/_posts/2019-05-02-jhipster-release-6.0.0.md
new file mode 100644
index 0000000..434faca
--- /dev/null
+++ b/_posts/2019-05-02-jhipster-release-6.0.0.md
@@ -0,0 +1,112 @@
+---
+layout: default
+title: Release 6.0.0
+---
+
+JHipster release v6.0.0
+==================
+
+This is the first official release of JHipster v6.
+
+It builds upon our v6.0.0.beta.0 release, after one month of beta testing and [120 closed tickets and pull requests](https://github.com/jhipster/generator-jhipster/issues?q=milestone%3A6.0.0+is%3Aclosed).
+
+Most important new features and upgrades
+-------------
+
+Those are the release notes from our previous beta release (v6.0.0.beta.0), updated for this stable release (v6.0.0).
+
+- Migration to Spring Boot 2.1.x
+- JDK 11 support (while keeping JDK 8+ compatibility)
+- HTML 5 pushstate [#9098](https://github.com/jhipster/generator-jhipster/pull/9098)
+- Kubernetes enhancements (Istio, Helm)
+- Migration to Spring Cloud Greenwish.x
+- Upgrade to Spring Security 5.1's OIDC Support
+- Upgrade to JUnit 5
+- FakerJS support to generate sample data for entities [#9104](https://github.com/jhipster/generator-jhipster/pull/9104)
+- Update to latest Angular version [#8161](https://github.com/jhipster/generator-jhipster/pull/8161)
+- Update to latest React version
+- Lazy Loading of Angular entities
+- Bootswatch theme selection
+- Removed CSS Option [#9350](https://github.com/jhipster/generator-jhipster/pull/9350)
+- Improvements in Sonar integration [#9423](https://github.com/jhipster/generator-jhipster/pull/9423) and [#9482](https://github.com/jhipster/generator-jhipster/pull/9482), including an externalized sonar-project.properties file.
+- Gatling 3 support, including several improvements with better and faster incremental builds and BOM support.
+- Integration tests are set up in their separate phase for Maven and Gradle
+- Update to Gradle 5
+- Migration to Liquibase 3.6.x
+- Update Elastic to 6.4.x
+- Update to Couchbase 6.x
+- Update to Infinispan 9.4.x
+- Update to Cassandra 4.x
+- Update to Hazelcast 3.11.x
+- Logging to the console in json format
+- Changing the default packaging to Jar while still being able to produce a War [#9034](https://github.com/jhipster/generator-jhipster/pull/9034)
+- Prettier for formatting YAML [#9281](https://github.com/jhipster/generator-jhipster/pull/9281)
+- Prettier transform to prettify the output from all sub-generators [#9371](https://github.com/jhipster/generator-jhipster/pull/9371)
+
+We also removed a few features:
+
+- Removed deprecated 'rancher-compose' sub-generator
+- Removed Chocolatey and Homebrew installations, as we found out they didn't provide much benefits to users
+- Deprecated the [JHipster Devbox](https://github.com/jhipster/jhipster-devbox) for the moment: we are looking for a maintainer, if you are interested please ping us!
+
+Closed tickets and merged pull requests
+------------
+As always, __[you can check all closed tickets and merged pull requests here](https://github.com/jhipster/generator-jhipster/issues?q=milestone%3A6.0.0+is%3Aclosed)__.
+
+How to upgrade
+------------
+
+**Automatic upgrade**
+
+For an automatic upgrade, use the [JHipster upgrade sub-generator]({{ site.url }}/upgrading-an-application/) on an existing application:
+
+Upgrade your version of JHipster:
+
+```
+npm update -g generator-jhipster
+```
+
+And then run the upgrade sub-generator:
+
+```
+jhipster upgrade
+```
+
+**Manual upgrades**
+
+For a manual upgrade, first upgrade your version of JHipster with:
+
+```
+npm update -g generator-jhipster
+```
+
+If you have an existing project, it will still use the JHipster version with which it was generated.
+To upgrade your project, you must first delete its `node_modules` folder and then run:
+
+```
+jhipster
+```
+
+You can also update your project and all its entities by running
+
+```
+jhipster --with-entities
+```
+
+You can also update your entities one-by-one by running again the entity sub-generator, for example if your entity is named _Foo_
+
+```
+jhipster entity Foo
+```
+
+Help and bugs
+--------------
+
+If you find any issue with this release, don't hesitate to:
+
+- Add a bug on our [bug tracker](https://github.com/jhipster/generator-jhipster/issues?state=open)
+- Post a question on [Stack Overflow](http://stackoverflow.com/tags/jhipster/info)
+
+If the issue you have is an urgent bug or security issue, please:
+
+- Contact [@java_hipster](https://twitter.com/java_hipster) on Twitter
diff --git a/_posts/2019-05-10-jhipster-release-6.0.1.md b/_posts/2019-05-10-jhipster-release-6.0.1.md
new file mode 100644
index 0000000..db76573
--- /dev/null
+++ b/_posts/2019-05-10-jhipster-release-6.0.1.md
@@ -0,0 +1,71 @@
+---
+layout: default
+title: Release 6.0.1
+---
+
+JHipster release v6.0.1
+==================
+
+This is the first patch release of JHipster v6.
+
+Closed tickets and merged pull requests
+------------
+As always, __[you can check all closed tickets and merged pull requests here](https://github.com/jhipster/generator-jhipster/issues?q=milestone%3A6.0.1+is%3Aclosed)__.
+
+How to upgrade
+------------
+
+**Automatic upgrade**
+
+For an automatic upgrade, use the [JHipster upgrade sub-generator]({{ site.url }}/upgrading-an-application/) on an existing application:
+
+Upgrade your version of JHipster:
+
+```
+npm update -g generator-jhipster
+```
+
+And then run the upgrade sub-generator:
+
+```
+jhipster upgrade
+```
+
+**Manual upgrades**
+
+For a manual upgrade, first upgrade your version of JHipster with:
+
+```
+npm update -g generator-jhipster
+```
+
+If you have an existing project, it will still use the JHipster version with which it was generated.
+To upgrade your project, you must first delete its `node_modules` folder and then run:
+
+```
+jhipster
+```
+
+You can also update your project and all its entities by running
+
+```
+jhipster --with-entities
+```
+
+You can also update your entities one-by-one by running again the entity sub-generator, for example if your entity is named _Foo_
+
+```
+jhipster entity Foo
+```
+
+Help and bugs
+--------------
+
+If you find any issue with this release, don't hesitate to:
+
+- Add a bug on our [bug tracker](https://github.com/jhipster/generator-jhipster/issues?state=open)
+- Post a question on [Stack Overflow](http://stackoverflow.com/tags/jhipster/info)
+
+If the issue you have is an urgent bug or security issue, please:
+
+- Contact [@java_hipster](https://twitter.com/java_hipster) on Twitter
diff --git a/_posts/2019-06-11-jhipster-release-6.1.0.md b/_posts/2019-06-11-jhipster-release-6.1.0.md
new file mode 100644
index 0000000..fee1aa8
--- /dev/null
+++ b/_posts/2019-06-11-jhipster-release-6.1.0.md
@@ -0,0 +1,81 @@
+---
+layout: default
+title: Release 6.1.0
+---
+
+JHipster release v6.1.0
+==================
+
+This is the first minor release of JHipster v6 with [182 closed tickets and merged pull requests](https://github.com/jhipster/generator-jhipster/issues?q=milestone%3A6.1.0+is%3Aclosed).
+
+Here are the most significant ones:
+
+- Migration to Angular 8 - [#9817](https://github.com/jhipster/generator-jhipster/pull/9817)
+- Improve Kafka support - [#9567](https://github.com/jhipster/generator-jhipster/pull/9567)
+- Localized emails for complex locales - [#9722](https://github.com/jhipster/generator-jhipster/pull/9722)
+- New language: Finnish - [#9843](https://github.com/jhipster/generator-jhipster/pull/9843)
+- UUID field type for sql databases - [#9794](https://github.com/jhipster/generator-jhipster/pull/9794)
+- Many libraries upgrades
+
+
+Closed tickets and merged pull requests
+------------
+As always, __[you can check all closed tickets and merged pull requests here](https://github.com/jhipster/generator-jhipster/issues?q=milestone%3A6.1.0+is%3Aclosed)__.
+
+How to upgrade
+------------
+
+**Automatic upgrade**
+
+For an automatic upgrade, use the [JHipster upgrade sub-generator]({{ site.url }}/upgrading-an-application/) on an existing application:
+
+Upgrade your version of JHipster:
+
+```
+npm update -g generator-jhipster
+```
+
+And then run the upgrade sub-generator:
+
+```
+jhipster upgrade
+```
+
+**Manual upgrades**
+
+For a manual upgrade, first upgrade your version of JHipster with:
+
+```
+npm update -g generator-jhipster
+```
+
+If you have an existing project, it will still use the JHipster version with which it was generated.
+To upgrade your project, you must first delete its `node_modules` folder and then run:
+
+```
+jhipster
+```
+
+You can also update your project and all its entities by running
+
+```
+jhipster --with-entities
+```
+
+You can also update your entities one-by-one by running again the entity sub-generator, for example if your entity is named _Foo_
+
+```
+jhipster entity Foo
+```
+
+Help and bugs
+--------------
+
+If you find any issue with this release, don't hesitate to:
+
+- Add a bug on our [bug tracker](https://github.com/jhipster/generator-jhipster/issues?state=open)
+- Post a question on [Stack Overflow](http://stackoverflow.com/tags/jhipster/info)
+
+If the issue you have is an urgent bug or security issue, please:
+
+- Contact [@java_hipster](https://twitter.com/java_hipster) on Twitter
diff --git a/_posts/2019-06-21-jhipster-release-6.1.1.md b/_posts/2019-06-21-jhipster-release-6.1.1.md
new file mode 100644
index 0000000..94d567b
--- /dev/null
+++ b/_posts/2019-06-21-jhipster-release-6.1.1.md
@@ -0,0 +1,76 @@
+---
+layout: default
+title: Release 6.1.1
+---
+
+JHipster release v6.1.1
+==================
+
+This is an emergency patch release because of a broken transitive dependency, that blocks our command line. see [#9952](https://github.com/jhipster/generator-jhipster/issues/9952) for more information.
+
+Apart from this blocker issue, this release also includes many improvements, here are the most important ones:
+
+- Lots of work to improve how faker.js generates fake data - [#9862](https://github.com/jhipster/generator-jhipster/pull/9862) [#9663](https://github.com/jhipster/generator-jhipster/pull/9663) [#9890](https://github.com/jhipster/generator-jhipster/pull/9890)
+- Update to Spring Boot 2.1.6 - [#9930](https://github.com/jhipster/generator-jhipster/pull/9930)
+
+Closed tickets and merged pull requests
+------------
+As always, __[you can check all closed tickets and merged pull requests here](https://github.com/jhipster/generator-jhipster/issues?q=milestone%3A6.1.1+is%3Aclosed)__.
+
+How to upgrade
+------------
+
+**Automatic upgrade**
+
+For an automatic upgrade, use the [JHipster upgrade sub-generator]({{ site.url }}/upgrading-an-application/) on an existing application:
+
+Upgrade your version of JHipster:
+
+```
+npm update -g generator-jhipster
+```
+
+And then run the upgrade sub-generator:
+
+```
+jhipster upgrade
+```
+
+**Manual upgrades**
+
+For a manual upgrade, first upgrade your version of JHipster with:
+
+```
+npm update -g generator-jhipster
+```
+
+If you have an existing project, it will still use the JHipster version with which it was generated.
+To upgrade your project, you must first delete its `node_modules` folder and then run:
+
+```
+jhipster
+```
+
+You can also update your project and all its entities by running
+
+```
+jhipster --with-entities
+```
+
+You can also update your entities one-by-one by running again the entity sub-generator, for example if your entity is named _Foo_
+
+```
+jhipster entity Foo
+```
+
+Help and bugs
+--------------
+
+If you find any issue with this release, don't hesitate to:
+
+- Add a bug on our [bug tracker](https://github.com/jhipster/generator-jhipster/issues?state=open)
+- Post a question on [Stack Overflow](http://stackoverflow.com/tags/jhipster/info)
+
+If the issue you have is an urgent bug or security issue, please:
+
+- Contact [@java_hipster](https://twitter.com/java_hipster) on Twitter
diff --git a/companies-using-jhipster/images/bank-of-the-west.png b/companies-using-jhipster/images/bank-of-the-west.png
new file mode 100644
index 0000000..b2b2814
Binary files /dev/null and b/companies-using-jhipster/images/bank-of-the-west.png differ
diff --git a/companies-using-jhipster/images/carrefour.png b/companies-using-jhipster/images/carrefour.png
new file mode 100644
index 0000000..d0845d6
Binary files /dev/null and b/companies-using-jhipster/images/carrefour.png differ
diff --git a/companies-using-jhipster/users.json b/companies-using-jhipster/users.json
index 51560eb..8411252 100644
--- a/companies-using-jhipster/users.json
+++ b/companies-using-jhipster/users.json
@@ -360,6 +360,18 @@
"category": "Enterprise DevOps",
"country": "Netherlands"
},
+ {"name": "Carrefour",
+ "url": "https://www.carrefour.fr/",
+ "logo": "carrefour.png",
+ "category": "Retail",
+ "country": "France"
+ },
+ {"name": "Bank of the West",
+ "url": "https://www.bankofthewest.com/",
+ "logo": "bank-of-the-west.png",
+ "category": "Finance",
+ "country": "USA"
+ },
{"name": "K2innovation",
"url": "http://www.k2innovation.it"
},
@@ -951,8 +963,8 @@
{"name": "Itemis Schweiz GmbH",
"url": "https://itemis.ch/"
},
- {"name": "https://lavalabs.net/",
- "url": "Lava Labs"
+ {"name": "Lava Labs",
+ "url": "https://lavalabs.net/"
},
{"name": "Softdog",
"url": "https://softdog.pl/#/"
@@ -974,6 +986,51 @@
},
{"name": "Palo IT",
"url": "http://palo-it.com/"
+ },
+ {"name": "Taiger",
+ "url": "https://taiger.com/"
+ },
+ {"name": "HIVEO",
+ "url": "https://www.hiveo.fr/"
+ },
+ {"name": "Jobware",
+ "url": "https://www.jobware.de/"
+ },
+ {"name": "Humanbee AB",
+ "url": "http://humanbee.se/"
+ },
+ {"name": "Wolters Kluwer",
+ "url": "https://www.wkelmsolutions.com/"
+ },
+ {"name": "Continuum+",
+ "url": "http://www.continuumplus.net/"
+ },
+ {"name": "Raster Images Private Limited",
+ "url": "http://www.raster.in/"
+ },
+ {"name": "AiHello",
+ "url": "https://www.aihello.com/"
+ },
+ {"name": "Sonatel",
+ "url": "http://www.sonatel.sn/"
+ },
+ {"name": "Add Value Spa",
+ "url": "https://www.addvalue.it/"
+ },
+ {"name": "Aparna Systems",
+ "url": "http://aparnasystems.com/"
+ },
+ {"name": "neoSearch UG",
+ "url": "https://urteile-gesetze.de/"
+ },
+ {"name": "PureThink",
+ "url": "https://purethink.com/"
+ },
+ {"name": "Rohrer Revolution GmbH",
+ "url": "https://www.rohrer-revolution.ch/"
+ },
+ {"name": "Teachoo",
+ "url": "https://www.teachoo.com/"
}
]
}
diff --git a/css/scss/style.scss b/css/scss/style.scss
index 288aa92..3bfaff5 100644
--- a/css/scss/style.scss
+++ b/css/scss/style.scss
@@ -1934,14 +1934,14 @@ body.login-page {
}
footer {
- color: #fff;
+ color: #000000;
background-color: #fff;
a {
- color: #fff;
+ color: #000000;
&.link {
color: $color-clear-blue;
&:hover {
- color: #fff;
+ color: #000000;
}
}
}
@@ -1956,7 +1956,6 @@ footer {
.logo-container {
overflow:hidden;
a {
- display: inline-block;
width:50%;
height:50%;
padding: 10px;
@@ -1974,7 +1973,7 @@ footer {
padding: 25px 0;
background-color: #233140;
a {
- color: white;
+ color: 000000;
}
}
}
diff --git a/css/style.css b/css/style.css
index a262a05..d881a95 100644
--- a/css/style.css
+++ b/css/style.css
@@ -1391,14 +1391,14 @@ body.login-page {
display: none !important; }
footer {
- color: #fff;
+ color: #000000;
background-color: #fff; }
footer a {
- color: #fff; }
+ color: #000000; }
footer a.link {
color: #91d5fb; }
footer a.link:hover {
- color: #fff; }
+ color: #000000; }
footer h3 {
margin-bottom: 30px; }
footer .footer-logos {
@@ -1421,7 +1421,7 @@ footer {
padding: 25px 0;
background-color: #233140; }
footer .footer-below a {
- color: white; }
+ color: 000000; }
.btn-social {
display: inline-block;
@@ -1563,3 +1563,65 @@ table tr > td, th {
table tr:nth-child(even) {
background: #f0f0f0;
}
+@media (max-width: 1080px) {
+ #content-search-form {
+ display: none;
+ }
+ #mobile-content-search-form {
+ padding: 5px 0 5px 10px;
+ }
+ #mobile-content-search-form > span.algolia-autocomplete {
+ width: 90%;
+ margin-left: 5px;
+ }
+ #mobile-content-search-form input.mobile-doc-search-algolia {
+ width: 100%;
+ }
+ #mobile-content-search-form .algolia-autocomplete .ds-dropdown-menu {
+ min-width: auto;
+ }
+ #mobile-content-search-form .algolia-autocomplete .ds-dropdown-menu:before {
+ right: 90%;
+ }
+}
+@media (min-width: 1080px) {
+ #mobile-content-search-form {
+ display: none;
+ }
+}
+#content-search-form input[type=text] {
+ float: right;
+ width: 130px;
+ box-sizing: border-box;
+ border: 2px solid #ccc;
+ border-radius: 4px;
+ font-size: 14px;
+ background-color: white;
+ background-position: 10px 10px;
+ background-repeat: no-repeat;
+ padding: 10px 40px 10px 15px;
+ -webkit-transition: width 0.4s ease-in-out;
+ transition: width 0.4s ease-in-out;
+}
+#content-search-form input[type=text]:focus {
+ width: 100%;
+}
+#content-search-form i {
+ position: relative;
+ font-size: 20px;
+ top: 18px;
+ right: 25px;
+ color: #ccc;
+ z-index: 1;
+ float: right;
+}
+#content-search-form > span.algolia-autocomplete,
+#content-search-form > input {
+ margin-top: 7px;
+}
+#content-search-form .algolia-autocomplete .algolia-docsearch-suggestion--wrapper {
+ padding: 0;
+}
+#content-search-form .algolia-autocomplete .algolia-docsearch-suggestion--highlight {
+ color: #3d8acc;
+}
diff --git a/images/logo/azure-pipelines.png b/images/logo/azure-pipelines.png
new file mode 100644
index 0000000..9a312b1
Binary files /dev/null and b/images/logo/azure-pipelines.png differ
diff --git a/images/logo/gcp.png b/images/logo/gcp.png
new file mode 100644
index 0000000..0bede19
Binary files /dev/null and b/images/logo/gcp.png differ
diff --git a/images/logo/icons/gatling.png b/images/logo/icons/gatling.png
index f5c5087..b3a17d4 100644
Binary files a/images/logo/icons/gatling.png and b/images/logo/icons/gatling.png differ
diff --git a/images/logo/icons/gradle-new.jpg b/images/logo/icons/gradle-new.jpg
deleted file mode 100644
index d21c224..0000000
Binary files a/images/logo/icons/gradle-new.jpg and /dev/null differ
diff --git a/images/logo/icons/gradle-new.png b/images/logo/icons/gradle-new.png
deleted file mode 100644
index b0e2073..0000000
Binary files a/images/logo/icons/gradle-new.png and /dev/null differ
diff --git a/images/logo/icons/gradle.png b/images/logo/icons/gradle.png
index fee2820..bc304dd 100644
Binary files a/images/logo/icons/gradle.png and b/images/logo/icons/gradle.png differ
diff --git a/images/logo/svg/gradle.svg b/images/logo/svg/gradle.svg
index 0aec6d1..9e1c2e1 100644
--- a/images/logo/svg/gradle.svg
+++ b/images/logo/svg/gradle.svg
@@ -1,8 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg width="256px" height="257px" viewBox="0 0 256 257" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
- <g>
- <path d="M105.609463,45.7403268 L177.767595,45.7403268 L214.168405,108.789043 L255.737027,108.789043 C246.273992,47.34207 193.17242,0.290863813 129.076794,0.290863813 C112.867113,0.290863813 97.3746304,3.32999222 83.099393,8.82054475 L105.609463,45.7403268" fill="#006533"></path>
- <path d="M216.097868,146.762708 L177.767595,213.15337 L81.1121556,213.15337 L32.7849339,129.447346 L71.3951128,62.5715798 L50.0634397,27.584249 C20.1532763,51.0465992 0.913431907,87.4922335 0.913431907,128.454226 C0.913431907,199.236732 58.2942879,256.617588 129.076794,256.617588 C193.640591,256.617588 247.030039,208.869105 255.917323,146.762708 L216.097868,146.762708" fill="#82B816"></path>
- <path d="M174.510319,128.114553 C174.510319,153.394802 154.01737,173.887751 128.737121,173.887751 C103.457868,173.887751 82.9649183,153.394802 82.9649183,128.114553 C82.9649183,102.8353 103.457868,82.3423502 128.737121,82.3423502 C154.01737,82.3423502 174.510319,102.8353 174.510319,128.114553" fill="#006532"></path>
- </g>
-</svg>
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 90 66.06"><defs><style>.cls-1{fill:#02303a;}</style></defs><title>gradle-elephant-icon-dark-green-secondary</title><path class="cls-1" d="M85.11,4.18a14.27,14.27,0,0,0-19.83-.34,1.38,1.38,0,0,0,0,2L67,7.6a1.36,1.36,0,0,0,1.78.12A8.18,8.18,0,0,1,79.5,20.06C68.17,31.38,53.05-.36,18.73,16a4.65,4.65,0,0,0-2,6.54l5.89,10.17a4.64,4.64,0,0,0,6.3,1.73l.14-.08-.11.08L31.53,33a60.29,60.29,0,0,0,8.22-6.13,1.44,1.44,0,0,1,1.87-.06h0a1.34,1.34,0,0,1,.06,2A61.61,61.61,0,0,1,33,35.34l-.09,0-2.61,1.46a7.34,7.34,0,0,1-3.61.94,7.45,7.45,0,0,1-6.47-3.71l-5.57-9.61C4,32-2.54,46.56,1,65a1.36,1.36,0,0,0,1.33,1.11H8.61A1.36,1.36,0,0,0,10,64.87a9.29,9.29,0,0,1,18.42,0,1.35,1.35,0,0,0,1.34,1.19H35.9a1.36,1.36,0,0,0,1.34-1.19,9.29,9.29,0,0,1,18.42,0A1.36,1.36,0,0,0,57,66.06H63.1a1.36,1.36,0,0,0,1.36-1.34c.14-8.6,2.46-18.48,9.07-23.43C96.43,24.16,90.41,9.48,85.11,4.18ZM61.76,30.05l-4.37-2.19h0a2.74,2.74,0,1,1,4.37,2.2Z"/></svg>
\ No newline at end of file
diff --git a/images/logo/svg/vue.svg b/images/logo/svg/vue.svg
new file mode 100644
index 0000000..a1d285e
--- /dev/null
+++ b/images/logo/svg/vue.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 261.76 226.69" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"/></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"/></g></g></svg>
diff --git a/images/open-collective/blokt.png b/images/open-collective/blokt.png
new file mode 100644
index 0000000..d7431fa
Binary files /dev/null and b/images/open-collective/blokt.png differ
diff --git a/images/open-collective/clay.png b/images/open-collective/clay.png
new file mode 100644
index 0000000..19fee15
Binary files /dev/null and b/images/open-collective/clay.png differ
diff --git a/images/open-collective/octoconsulting.png b/images/open-collective/octoconsulting.png
new file mode 100644
index 0000000..61582ad
Binary files /dev/null and b/images/open-collective/octoconsulting.png differ
diff --git a/images/open-collective/okta.png b/images/open-collective/okta.png
index 154f863..4b75f60 100644
Binary files a/images/open-collective/okta.png and b/images/open-collective/okta.png differ
diff --git a/images/open-collective/talentplot.png b/images/open-collective/talentplot.png
deleted file mode 100644
index edbdfc4..0000000
Binary files a/images/open-collective/talentplot.png and /dev/null differ
diff --git a/images/security-add-claim.png b/images/security-add-claim.png
new file mode 100644
index 0000000..bfe9ba1
Binary files /dev/null and b/images/security-add-claim.png differ
diff --git a/index.html b/index.html
index e07be61..bb1d36e 100755
--- a/index.html
+++ b/index.html
@@ -9,6 +9,14 @@ sitemap:
lastmod: 2016-05-25T00:00:00-00:00
---
<div ng-app="jhipster.home" ng-controller="HomeController" class="home-container">
+ <div class="mobile-search-container container">
+ <div class="row">
+ <form id="mobile-content-search-form">
+ <i class="fa fa-search"></i>
+ <input type="text" name="search" class="form-control mobile-doc-search-algolia" placeholder="Search..." />
+ </form>
+ </div>
+ </div>
<!-- Header -->
<header id="header" class="home-section">
<div class="container">
@@ -92,30 +100,26 @@ sitemap:
<strong>Thank you to our gold sponsors!</strong>
</p>
<div class="row">
- <!-- change to below commented line when adding more logos -->
- <!-- <div class="col-xs-12 col-sm-6 col-md-4"> -->
- <div class="col-md-offset-4 col-sm-12 col-md-4">
+ <div class="col-md-offset-2 col-sm-12 col-md-4">
<div class="thumbnail no-margin-bottom">
<div class="logo-container">
- <a href="https://developer.okta.com/signup?utm_source=JHipster&utm_medium=logo&utm_campaign=Gold-Sponsor" target="_blank"><img src="{{ site.url }}/images/open-collective/okta.png" width="320px" height="108px"></a>
+ <a href="https://developer.okta.com/signup?utm_source=JHipster&utm_medium=logo&utm_campaign=Gold-Sponsor" target="_blank"><img src="{{ site.url }}/images/open-collective/okta.png" width="320px" height="175px"></a>
</div>
<div class="caption">
- <a href="https://developer.okta.com/blog/2017/10/20/oidc-with-jhipster?utm_source=JHipster&utm_medium=text-link&utm_campaign=Gold-Sponsor" target="_blank">Add SSO to your JHipster apps with Okta</a>
+ <a href="https://developer.okta.com/blog/2019/04/04/java-11-java-12-jhipster-oidc?utm_source=JHipster&utm_medium=text-link&utm_campaign=Gold-Sponsor" target="_blank">Add SSO to your JHipster apps with Okta</a>
</div>
</div>
</div>
- <!--
- <div class="col-xs-12 col-sm-6 col-md-4">
+ <div class="col-sm-12 col-md-4">
<div class="thumbnail no-margin-bottom">
<div class="logo-container">
- <a href="https://developer.okta.com/signup?utm_source=JHipster&utm_medium=logo&utm_campaign=Gold-Sponsor" target="_blank"><img src="{{ site.url }}/images/open-collective/okta.png" width="320px" height="108px"></a>
+ <a href="http://www.octoconsulting.com/" target="_blank"><img src="{{ site.url }}/images/open-collective/octoconsulting.png" width="180px" height="175px"></a>
</div>
<div class="caption">
- <a href="https://developer.okta.com/blog/2017/10/20/oidc-with-jhipster?utm_source=JHipster&utm_medium=text-link&utm_campaign=Gold-Sponsor" target="_blank">Add SSO to Your JHipster Apps with Okta</a>
+ <a href="http://www.octoconsulting.com/" target="_blank">Octo Consulting Group</a>
</div>
</div>
</div>
- -->
</div>
</div>
<!--
@@ -131,7 +135,6 @@ sitemap:
<strong>Thank you to our bronze sponsors!</strong>
</p>
<div class="row">
- <div class="col-md-1"></div>
<div class="col-sm-6 col-md-2">
<div class="thumbnail no-margin-bottom">
<div class="logo-container">
@@ -184,15 +187,26 @@ sitemap:
<div class="thumbnail no-margin-bottom">
<div class="logo-container">
<div class="logo-container">
- <a href="https://talentplot.com/" target="_blank" style="padding: 0px"><img src="{{ site.url }}/images/open-collective/talentplot.png" width="60px" height="16"></a>
+ <a href="https://blokt.com/" target="_blank" style="padding: 0px"><img src="{{ site.url }}/images/open-collective/blokt.png" width="60px" height="16"></a>
+ </div>
+ <div class="caption">
+ <a href="https://blokt.com/" target="_blank">Blokt</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="col-sm-6 col-md-2">
+ <div class="thumbnail no-margin-bottom">
+ <div class="logo-container">
+ <div class="logo-container">
+ <a href="https://clay.global/" target="_blank" style="padding: 0px"><img src="{{ site.url }}/images/open-collective/clay.png" width="60px" height="16"></a>
</div>
<div class="caption">
- <a href="https://talentplot.com/" target="_blank">TalentPlot</a>
+ <a href="https://clay.global/" target="_blank">Clay</a>
</div>
</div>
</div>
</div>
- <div class="col-md-1"></div>
</div>
</div>
<div class="col-md-12 text-center">
@@ -241,10 +255,6 @@ sitemap:
<li><i class="fa fa-trophy" aria-hidden="true"></i> JHipster won the bronze <a href="https://jaxenter.com/winners-jax-innovation-awards-2017-137993.html" target="_blank">JAX Innovation award</a> for most innovative contribution to the Java ecosystem at JAX London conference 2017.</li>
<li><i class="fa fa-trophy" aria-hidden="true"></i> JHipster won the <a href="https://blogs.oracle.com/java/announcing-2017-dukes-choice-award-nominations" target="_blank">Duke's Choice Award</a> for extreme innovation using Java technology at JavaOne 2017.</li>
</ul>
- <h3>Events</h3>
- <ul>
- <li><b>February 22nd, 2019:</b> at <a href="https://www.meetup.com/JHipster-NYC/events/258529587/">JHipster NYC</a>, Theo Lebrun will do a full-day workshop on Vue.js with JHipster.</li>
- </ul>
</div>
</div>
</div>
@@ -268,13 +278,15 @@ sitemap:
<a href="https://angular.io/" target="_blank"><img src="images/logo/svg/angular.svg" class="project-icon img-responsive"></a><br class="visible-xs">
<i class="fa fa-4x">/</i>
<a href="https://reactjs.org/" target="_blank"><img src="images/logo/svg/react.svg" class="project-icon img-responsive"></a><br class="visible-xs">
+ <i class="fa fa-4x">/</i>
+ <a href="https://vuejs.org/" target="_blank"><img src="images/logo/svg/vue.svg" class="project-icon img-responsive"></a><br class="visible-xs">
<i class="fa fa-4x">=</i>
<a href="/"><img id="hipster-head" src="images/logo/jhipster_family_member_0_head.svg" class="project-icon img-responsive"></a>
</div>
<p class="lead">
- JHipster is a development platform to generate, develop and deploy
- <a class="dark" href="http://projects.spring.io/spring-boot/" target="_blank">Spring Boot</a> + <a class="dark" href="https://angular.io/" target="_blank">Angular</a>/<a class="dark" href="https://reactjs.org/" target="_blank">React</a>
- Web applications and Spring microservices. <br>
+ JHipster is a development platform to generate, develop and deploy
+ <a class="dark" href="http://projects.spring.io/spring-boot/" target="_blank">Spring Boot</a> + <a class="dark" href="https://angular.io/" target="_blank">Angular</a> / <a class="dark" href="https://reactjs.org/" target="_blank">React</a> / <a class="dark" href="https://vuejs.org/" target="_blank">Vue</a>
+ Web applications and Spring microservices. <br>
</p>
</span>
</div>
@@ -301,6 +313,18 @@ sitemap:
You can checkout a sample generated React application
<a href="https://github.com/jhipster/jhipster-sample-app-react" target="_blank">here</a>.
</p>
+ <p>
+ You can checkout a sample generated Vue.js application
+ <a href="https://github.com/jhipster/jhipster-sample-app-vuejs" target="_blank">here</a>.
+ </p>
+ <p>
+ You can checkout a sample generated Kotlin application
+ <a href="https://github.com/jhipster/jhipster-sample-app-kotlin" target="_blank">here</a>.
+ </p>
+ <p>
+ You can checkout a sample generated .Net application
+ <a href="https://github.com/jhipster/jhipster-net-sample-app-template" target="_blank">here</a>.
+ </p>
<p>
JHipster is Open Source, and all development is done on
<a href="https://github.com/jhipster/generator-jhipster" target="_blank">GitHub</a>
@@ -346,11 +370,10 @@ sitemap:
<div class="row">
<div class="col-md-12">
<div>
- <h3>New online trainings (MOOCs)</h3>
+ <h3>Online trainings (MOOCs)</h3>
<ul>
<li><a href="https://www.pluralsight.com/courses/play-by-play-developing-microservices-mobile-apps-jhipster" target="_blank">Play by Play: Developing Microservices and Mobile Apps with JHipster</a> by <a href="https://twitter.com/mraible" target="_blank">Matt Raible</a> and <a href="https://twitter.com/mhi_inc">Michael Hoffman</a></li>
<li><a href="https://therealdanvega.teachable.com/p/jhipster/?product_id=456739&coupon_code=JHIPSTER" target="_blank">Angular 4 Java Developers by Dan Vega and John Thompson</a> (by using this link, you will get a big discount over the normal price!)</li>
- <li><a href="https://www.pluralsight.com/courses/scaffolding-spring-boot-and-angular-with-jhipster" target="_blank">Scaffolding Spring Boot and Angular Web Apps with JHipster by Michael Hoffman</a></li>
<li>JHipster: Build and Deploy Spring Boot Microservices by Chris Anatalio (<a href="https://linkedin-learning.pxf.io/c/1252615/449670/8005?u=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Fjhipster-build-and-deploy-spring-boot-microservices%3Ftrk%3Dinsiders_43129714_learning" target="_blank">LinkedIn Learning</a>, <a href="https://www.lynda.com/course-tutorials/JHipster-Build-Deploy-Microservices/624352-2.html" target="_blank">Lynda.com</a>)</li>
</ul>
<h3>New books</h3>
@@ -425,6 +448,10 @@ sitemap:
<img src="images/logo/svg/react.svg" />
<span class="title_sub_tech">React</span>
</li>
+ <li class="clip img-circle new">
+ <img src="images/logo/svg/vue.svg" />
+ <span class="title_sub_tech">Vue</span>
+ </li>
<li class="clip img-circle new">
<img src="images/logo/svg/redux.svg" />
<span class="title_sub_tech">Redux</span>
@@ -485,7 +512,7 @@ sitemap:
<span class="title_sub_tech">Consul</span>
</li>
<li class="clip img-circle new">
- <img src="images/logo/icons/gradle-new.png" class="invert-hover-white"/>
+ <img src="images/logo/icons/gradle.png" class="invert-hover-white"/>
<span class="title_sub_tech">Gradle</span>
</li>
<li class="clip img-circle new">
@@ -612,8 +639,8 @@ sitemap:
<span class="title_sub_tech">Boxfuse</span>
</li>
<li class="clip img-circle new">
- <img src="images/logo/svg/rancher.svg" class="width"/>
- <span class="title_sub_tech">Rancher</span>
+ <img src="images/logo/gcp.png"/>
+ <span class="title_sub_tech">Google Cloud<br/> Platform</span>
</li>
<li class="clip img-circle new">
<img src="images/logo/svg/openshift.svg"/>
@@ -643,8 +670,8 @@ sitemap:
<span class="title_sub_tech">GitLab CI</span>
</li>
<li class="clip img-circle new">
- <img src="images/logo/svg/circleci.svg"/>
- <span class="title_sub_tech">CircleCI</span>
+ <img src="images/logo/azure-pipelines.png"/>
+ <span class="title_sub_tech">Azure Pipelines</span>
</li>
<li class="clear"></li>
</ul>
@@ -691,12 +718,12 @@ sitemap:
<div align="center" style="margin-top:20px;">
<!-- Controls -->
- <a class="left" href="#carousel-customers" data-slide="prev">
+ <a class="left" href="#carousel-customers" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
- </a>
- <a class="right" href="#carousel-customers" data-slide="next">
+ </a>
+ <a class="right" href="#carousel-customers" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
- </a>
+ </a>
</div>
</div>
@@ -769,3 +796,12 @@ sitemap:
"https://github.com/jhipster/generator-jhipster"]
}
</script>
+<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
+<script type="text/javascript">
+ docsearch({
+ apiKey: '9bd47d3de4af6f3662fd11a7f0e38819',
+ indexName: 'jhipster',
+ inputSelector: '.mobile-doc-search-algolia',
+ debug: false // Set debug to true if you want to inspect the dropdown
+ });
+</script>
diff --git a/js/index.js b/js/index.js
index 46fd342..6ecb3cb 100644
--- a/js/index.js
+++ b/js/index.js
@@ -38,7 +38,7 @@ $('.navbar-collapse ul li a').click(function () {
GHService.getGitHubConfig('jhipster', 'generator-jhipster').success(function (data) {
$scope.gitConfig = data;
});
- $scope.gitContributors = '420+';
+ $scope.gitContributors = '500+';
/*
// Commented out as this isn't efficient now we have 400+ contributors
var page = 0;
diff --git a/modules/creating_a_blueprint.md b/modules/creating_a_blueprint.md
index 16c7bd2..fa4cbf0 100644
--- a/modules/creating_a_blueprint.md
+++ b/modules/creating_a_blueprint.md
@@ -113,7 +113,7 @@ There are multiple ways to customize a phase from JHipster.
}
```
-2) Override the entire phase, this is when the blueprint takes control of a phase
+2) Override the entire phase, this is when the blueprint takes control of a phase.
```javascript
get initializing() {
@@ -206,7 +206,6 @@ npm link generator-jhipster-myblueprint
npm link generator-jhipster (Optional: Needed only if you are using a non-released JHipster version)
jhipster -d --blueprint myblueprint
-
```
## Registering a blueprint to the JHipster marketplace
diff --git a/modules/creating_a_module.md b/modules/creating_a_module.md
index 4f5be7e..2a0b6f0 100644
--- a/modules/creating_a_module.md
+++ b/modules/creating_a_module.md
@@ -87,7 +87,7 @@ You have to use this function:
You can access to configuration in `.yo-rc.json`:
```
- this.jhipsterAppConfig = this.getJhipsterAppConfig();
+ this.jhipsterAppConfig = this.getAllJhipsterConfig();
this.baseName = this.jhipsterAppConfig.baseName;
this.packageName = this.jhipsterAppConfig.packageName;
this.clientFramework = this.jhipsterAppConfig.clientFramework;
diff --git a/modules/marketplace/data/modules-config.json b/modules/marketplace/data/modules-config.json
index fbb2a8f..a348bce 100644
--- a/modules/marketplace/data/modules-config.json
+++ b/modules/marketplace/data/modules-config.json
@@ -3,8 +3,13 @@
"generator-jhipster-fortune" : true
},
"blacklistedModules": {
+ "generator-jhipster-blueprint" : true,
+ "generator-jhipster-module" : true,
"generator-jhipster-webservice" : true,
"generator-jhipster-react" : true,
- "generator-jhipster-material" : true
+ "generator-jhipster-material" : true,
+ "jhipster-vuejs" : true,
+ "generator-jhipster-vuejs2" : true,
+ "generator-jhipster-vuejsx" : true
}
}
diff --git a/modules/official-blueprints.md b/modules/official-blueprints.md
new file mode 100644
index 0000000..5eb3e2c
--- /dev/null
+++ b/modules/official-blueprints.md
@@ -0,0 +1,37 @@
+---
+layout: default
+title: Official blueprints
+permalink: /modules/official-blueprints/
+redirect_from:
+ - /official-blueprints.html
+ - /modules/official-blueprints.html
+sitemap:
+ priority: 0.7
+ lastmod: 2019-03-29T18:40:00-00:00
+---
+
+# <i class="fa fa-star"></i> Officially supported blueprints
+
+JHipster supports several official blueprints. These blueprints have two main goals:
+
+* Enhance JHipster with new features using different languages and/or support
+* Demonstrate how the main generator behavior can be modified to fit anyone's needs
+
+## Kotlin
+
+First official blueprint, it replaces most of Java back-end code with Kotlin. Source code and documentation could be found here: [repository](https://github.com/jhipster/jhipster-kotlin).
+
+Stream lead is: [Sendil Kumar](https://github.com/sendilkumarn).
+
+## Vue.js
+
+Second official blueprint, it replaces the whole front-end logic with Vue.js. Source code and documentation could be found here: [repository](https://github.com/jhipster/jhipster-vuejs).
+
+Stream lead is: [Sahbi Ktifa](https://github.com/sahbi-ktifa).
+
+## .Net
+
+Latest official blueprint, this is the first attempt to leave the Java environment and join .Net world. Source code and documentation could be found here: [repository](https://github.com/jhipster/jhipster-dotnetcore).
+
+Stream lead is: [Daniel Petisme](https://github.com/danielpetisme).
+
diff --git a/pages/artwork.md b/pages/artwork.md
index dd63bfd..9d135ee 100644
--- a/pages/artwork.md
+++ b/pages/artwork.md
@@ -11,4 +11,36 @@ sitemap:
# <i class="fa fa-pencil"></i> Artwork
-All our artwork can be found in the our [artwork repository](https://github.com/jhipster/jhipster-artwork).
\ No newline at end of file
+All our artwork can be found in our [artwork repository](https://github.com/jhipster/jhipster-artwork).
+
+## The JHipster Logo
+<img src="/jhipster-artwork/logos/JHipster%20bowtie%20-%20square.png"
+ alt="JHipster Logo"
+ width="200">
+
+## The JHipster Banner
+
+<img src="/jhipster-artwork/logos/JHipster%20banner.png"
+ alt="JHipster Banner"
+ width="500">
+
+## The JHipster Family
+
+Below are some examples of the JHipster family members.
+
+<div width="500" align="center">
+ <img src="/jhipster-artwork/family/jhipster_family_member_0.svg" width="200">
+ <img src="/jhipster-artwork/family/jhipster_family_member_1.svg" width="200">
+ <img src="/jhipster-artwork/family/jhipster_family_member_2.svg" width="200">
+ <img src="/jhipster-artwork/family/jhipster_family_member_3.svg" width="200">
+</div>
+
+## Inclusiveness
+
+As with all JHipster projects, the JHipster Artwork project follows the [JHipster code of conduct](https://github.com/jhipster/generator-jhipster/blob/master/CODE_OF_CONDUCT.md). One of our goals is to have inclusive artwork: at the moment the "JHipster family" has a few members, but the idea is that this family grows, with many different members, as expressed in our code of conduct. If you want to help the project, you can either participate as an artist (the source files from all images are available in the [github repository](https://github.com/jhipster/jhipster-artwork)) or as a sponsor (so we can pay an artist to create those new images).
+
+All images are validated by [Audrey Neveu](https://twitter.com/Audrey_Neveu), who is well-known in the Java community for her involvement in [Devoxx4Kids](http://www.devoxx4kids.org/) and [Duchess France](https://www.duchess-france.org/).
+
+## Logos and images usage
+
+All logos and images are available under the [Apache 2 license](LICENSE.txt), and belong to the JHipster project.
diff --git a/pages/azure.md b/pages/azure.md
index 30e83af..2ac4fd3 100644
--- a/pages/azure.md
+++ b/pages/azure.md
@@ -43,11 +43,11 @@ Install and authenticate with the Azure CLI on your local environment. For more
## Monolithic JHipster Applications
-Monolithic applications are the easiest to deploy, as usual. In this section we will explore how to deploy WAR artifacts from JHipster projects using the Apache Maven Plugin for Azure App Service for Web Apps:
+Monolithic applications are the easiest to deploy, as usual. In this section we will explore how to deploy Jar artifacts from JHipster projects using the Apache Maven Plugin for Azure App Service for Web Apps:
-### WAR (non-executable)
+### Executable Jar files
-To deploy your JHipster project as a WAR file, make sure you build it with `spring-boot.repackage.skip` option enabled. This will skip building an executable WAR file and simply package the WAR file normally under `${finalName}.war`. This way you can deploy your application to a web runtime on Azure automatically configured for you.
+Azure App Service supports running executable Jar files as generated by JHipster.
To proceed with the deployment, follow these steps:
@@ -57,19 +57,47 @@ To proceed with the deployment, follow these steps:
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<!-- check Maven Central for the latest version -->
- <version>1.3.0</version>
+ <version>1.6.0</version>
<configuration>
- <resourceGroup>your-resource-group</resourceGroup>
- <appName>your-app-name</appName>
- <linuxRuntime>tomcat 9.0-jre8</linuxRuntime>-->
+ <schemaVersion>v2</schemaVersion>
+ <resourceGroup>your-application-resource-group</resourceGroup>
+ <appName>your-application-name</appName>
+ <runtime>
+ <os>Linux</os>
+ <javaVersion>java11</javaVersion>
+ </runtime>
+ <pricingTier>B1</pricingTier>
+ <region>France Central</region>
+ <deployment>
+ <resources>
+ <resource>
+ <directory>${project.basedir}/target</directory>
+ <includes>
+ <include>${project.build.finalName}.jar</include>
+ </includes>
+ </resource>
+ </resources>
+ </deployment>
</configuration>
</plugin>
+
+ ```
+ Be careful, the attributes `resourceGroup`, `appName`, `pricingTier` and `region` must be configured with
+ correct project values.
+1. As you will probably use a database, do not forget to modify the `application-prod.yml` file accordingly, for example with an Azure MySQL database:
```
-1. Build your project with the following command, and adjust your profile accordingly:
+ spring:
+ datasource:
+ url: jdbc:mysql://jhipster.mysql.database.azure.com:3306/sample?useUnicode=true&characterEncoding=utf8&useSSL=true&useLegacyDatetimeCode=false&serverTimezone=UTC
+ username: jhipster@jhipster
+ password: MyPasswordToChangeInProduction
+ ```
+
+1. Build the project with the following command, as usual for a JHipster production build:
```sh
- ./mvnw clean package -Pdev -Dspring-boot.repackage.skip=true
+ ./mvnw clean package -Pprod
```
-1. Deploy your application:
+1. Deploy the application:
```sh
./mvnw azure-webapp:deploy
```
diff --git a/pages/boxfuse.md b/pages/boxfuse.md
index ad78ed8..f62ed73 100644
--- a/pages/boxfuse.md
+++ b/pages/boxfuse.md
@@ -37,7 +37,7 @@ When your application is ready, you can prepare it for deployment by typing:
Or when using gradle:
-`./gradlew -Pprod bootWar -x test`
+`./gradlew -Pprod bootJar -x test`
## Deploying to AWS
diff --git a/pages/bug-bounties.md b/pages/bug-bounties.md
index da68ffc..9d6aedd 100644
--- a/pages/bug-bounties.md
+++ b/pages/bug-bounties.md
@@ -10,24 +10,24 @@ sitemap:
## Introduction
-Any ticket opened on the [JHipster bug tracker](https://github.com/jhipster/generator-jhipster/issues?q=is%3Aissue+is%3Aopen+label%3A%24100) can have a "$100" label: the person who solves that ticket will get the money!
+Any ticket opened on the [JHipster bug tracker](https://github.com/jhipster/generator-jhipster/issues) can have a "\$\$ bug-bounty \$\$" label: the person who solves that ticket will get the money, either $100, $200, $300 or $500 depending on the ticket!
## Who can create bug bounties?
- [Silver and gold sponsors]({{ site.url }}/sponsors/)
-- The two [core team project leads]({{ site.url }}/team/), [@jdubois](https://github.com/jdubois) and [@deepu105](https://github.com/deepu105)
+- The three [core team project leads]({{ site.url }}/team/), [@jdubois](https://github.com/jdubois), [@deepu105](https://github.com/deepu105) and [@pascalgrimaud](https://github.com/pascalgrimaud).
## How much is a bug bounty?
-At the moment, each bug bounty is $100 for the person solving that ticket.
+Next to the "\$\$ bug-bounty \$\$" label, there should be a "$100", "$200", "$300" or "$500" label, that tells how the much the bug bounty is worth.
## Where is the list of currently opened bug bounties?
Bug bounties are mostly available on the main project, but can also be opened on sub-projects under the JHipster organization on GitHub.
-- [Opened bug bounties on all projects](https://github.com/search?l=&p=2&q=is%3Aissue+is%3Aopen+label%3A%24100+user%3Ajhipster+label%3A%24100+state%3Aopen&ref=advsearch&type=Issues&utf8=%E2%9C%93)
-- [Opened bug bounties for the main project](https://github.com/jhipster/generator-jhipster/labels/%24100)
-- [Opened bug bounties for the JHipster VueJS sub-project](https://github.com/jhipster/jhipster-vuejs/issues?q=is%3Aissue+is%3Aopen+label%3A%24100)
+- [Opened bug bounties on all projects](https://github.com/search?l=&p=1&q=is%3Aissue+is%3Aopen+label%3A%22%24%24+bug-bounty+%24%24%22+user%3Ajhipster+state%3Aopen&ref=advsearch&type=Issues&utf8=%E2%9C%93)
+- [Opened bug bounties for the main project](https://github.com/jhipster/generator-jhipster/labels/%24%24%20bug-bounty%20%24%24)
+- [Opened bug bounties for the JHipster VueJS sub-project](https://github.com/jhipster/jhipster-vuejs/labels/%24%24%20bug-bounty%20%24%24)
Happy bug hunting :-)
@@ -35,21 +35,21 @@ Happy bug hunting :-)
Once a ticket is created, it can get the bug bounty label by two actions:
-- a silver or gold sponsor adds a comment asking to add the bug bounty label and mentioning [@jdubois](https://github.com/jdubois) or [@deepu105](https://github.com/deepu105) on GitHub.
-- [@jdubois](https://github.com/jdubois) or [@deepu105](https://github.com/deepu105) directly add the bug bounty label, as they believe it is an important new feature, a critical bug, a long-standing issue, or a time-consuming task.
+- a silver or gold sponsor adds a comment asking to add the bug bounty label and mentioning [@jdubois](https://github.com/jdubois), [@deepu105](https://github.com/deepu105) or [@pascalgrimaud](https://github.com/pascalgrimaud) on GitHub.
+- [@jdubois](https://github.com/jdubois), [@deepu105](https://github.com/deepu105) or [@pascalgrimaud](https://github.com/pascalgrimaud) directly add the bug bounty label, as they believe it is an important new feature, a critical bug, a long-standing issue, or a time-consuming task.
-To be valid, the bug bounty should then have the [$100 label](https://github.com/jhipster/generator-jhipster/labels/%24100) added by either
-[@jdubois](https://github.com/jdubois) or [@deepu105](https://github.com/deepu105).
+To be valid, the bug bounty should then have the [\$\$ bug-bounty \$\$](https://github.com/jhipster/generator-jhipster/labels/%24%24%20bug-bounty%20%24%24) label added by either
+[@jdubois](https://github.com/jdubois), [@deepu105](https://github.com/deepu105) or [@pascalgrimaud](https://github.com/pascalgrimaud). It should also have a "$100", "$200", "$300" or "$500" label to tell how much it is worth, but if that tag has been forgotten, it is by default worth "$100".
## How to get the money
-Once a bug bounty is created, anybody can propose a fix (even [@jdubois](https://github.com/jdubois) and [@deepu105](https://github.com/deepu105)!). Our goal is to spend that money so that something is fixed as quickly as possible.
+Once a bug bounty is created, anybody can propose a fix (even [@jdubois](https://github.com/jdubois), [@deepu105](https://github.com/deepu105) and [@pascalgrimaud](https://github.com/pascalgrimaud)!). Our goal is to spend that money so that something is fixed as quickly as possible.
In order to claim the money, you must:
-- Create a Pull Request that fixes a ticket with the "$100" label.
+- Create a Pull Request that fixes a ticket with the "\$\$ bug-bounty \$\$" label.
- In order to close the ticket automatically, you must have one commit message with the `Fix` keyword. For example, `Fix #1234` to close ticket `#1234`.
- That Pull Request must be merged by someone from the core team. If there are several Pull Requests, the core team member either selects the most recent one or the best one - that's up to him to decide what is best for the project.
-- You can then [add a $100 expense on the JHipster OpenCollective](https://opencollective.com/generator-jhipster/expenses/new). You must add a link to your Pull Request in the description (for example: `$100 bug bounty claim for https://github.com/jhipster/generator-jhipster/pull/1234`). You will also need to provide an invoice, see the [Open Collective FAQ for expenses](https://opencollective.com/faq/expenses) for more details, and to get a Google Docs template that you can use.
+- You can then [add a $100, $200, $300 or $500 expense on the JHipster OpenCollective](https://opencollective.com/generator-jhipster/expenses/new). You must add a link to your Pull Request in the description (for example: `$100 bug bounty claim for https://github.com/jhipster/generator-jhipster/pull/1234`). You will also need to provide an invoice, see the [Open Collective FAQ for expenses](https://opencollective.com/faq/expenses) for more details, and to get a Google Docs template that you can use.
- Then, you must add a comment on your Pull Request, telling that you claimed the money, with a link to your OpenCollective expense. This is to be sure it is the same person who fixed the issue and claimed the money.
-- That expense will then be validated by [@jdubois](https://github.com/jdubois) and [@deepu105](https://github.com/deepu105), and you will receive your money on your Paypal account.
+- That expense will then be validated by [@jdubois](https://github.com/jdubois), [@deepu105](https://github.com/deepu105) or [@pascalgrimaud](https://github.com/pascalgrimaud), and you will receive your money on your Paypal account.
diff --git a/pages/cloudfoundry.md b/pages/cloudfoundry.md
index e464fd3..76e65fe 100644
--- a/pages/cloudfoundry.md
+++ b/pages/cloudfoundry.md
@@ -46,13 +46,13 @@ When your application is already deployed, you can re-deploy it by building it n
`./mvnw -Pprod package`
-`cf push -f ./deploy/cloudfoundry/manifest.yml -p target/*.war`
+`cf push -f ./deploy/cloudfoundry/manifest.yml -p target/*.jar`
**With Gradle:**
-`./gradlew -Pprod bootWar`
+`./gradlew -Pprod bootJar`
-`cf push -f ./deploy/cloudfoundry/manifest.yml -p build/libs/*.war`
+`cf push -f ./deploy/cloudfoundry/manifest.yml -p build/libs/*.jar`
You can also run the sub-generator again, by typing another time:
diff --git a/pages/code-quality.md b/pages/code-quality.md
index 70483af..f6336ee 100644
--- a/pages/code-quality.md
+++ b/pages/code-quality.md
@@ -19,14 +19,111 @@ JHipster provides a specific Docker Compose configuration for Sonar ([here is th
If you use Maven, it has been automatically configured:
- ./mvnw -Pprod clean test sonar:sonar
+ ./mvnw -Pprod clean verify sonar:sonar -Dsonar.host.url=http://localhost:9001
+
+If you need to re-run the Sonar phase, please be sure to specify at least the `initialize` phase since Sonar properties are loaded from the sonar-project.properties file.
+
+ ./mvnw initialize sonar:sonar -Dsonar.host.url=http://localhost:9001
If you use Gradle, it has also been automatically configured:
- ./gradlew -Pprod clean test sonarqube
+ ./gradlew -Pprod clean check sonarqube -Dsonar.host.url=http://localhost:9001
+
+In every cases you can, now, run analysis with [sonar-scanner](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner) if you already have installed it.
+
+ sonar-scanner
Once the analysis completes, it will be available on the Sonar dashboard, which by default is available on [http://127.0.0.1:9001/](http://127.0.0.1:9001/).
+## Excluding Files from Jacoco Analysis
+
+In case you would like to exclude certain classes from coverage analysis (e.g. generated classes or the application class) and would like to have the correct
+coverage in the default jacoco html report you have to exclude the classes from analysis and from reporting.
+
+### Maven
+
+You need to add exclusions to the `prepare-agent` and `report` goal of both unit and integration tests:
+
+```xml
+<plugin>
+ <groupId>org.jacoco</groupId>
+ <artifactId>jacoco-maven-plugin</artifactId>
+ <version>${jacoco-maven-plugin.version}</version>
+ <executions>
+ <execution>
+ <id>pre-unit-tests</id>
+ <goals>
+ <goal>prepare-agent</goal>
+ </goals>
+ <configuration>
+ <!-- Exclude any class named Application from instrumentation -->
+ <excludes>**/Application.*</excludes>
+ <destFile>${jacoco.utReportFile}</destFile>
+ </configuration>
+ </execution>
+ <execution>
+ <id>post-unit-test</id>
+ <phase>test</phase>
+ <goals>
+ <goal>report</goal>
+ </goals>
+ <configuration>
+ <!-- Exclude any class named Application from reporting-->
+ <excludes>**/Application.*</excludes>
+ <dataFile>${jacoco.utReportFile}</dataFile>
+ <outputDirectory>${jacoco.reportFolder}</outputDirectory>
+ </configuration>
+ </execution>
+ <execution>
+ <id>pre-integration-tests</id>
+ <goals>
+ <goal>prepare-agent-integration</goal>
+ </goals>
+ <configuration>
+ <!-- Exclude any class named Application from instrumentation -->
+ <excludes>**/Application.*</excludes>
+ <destFile>${jacoco.itReportFile}</destFile>
+ </configuration>
+ </execution>
+ <execution>
+ <id>post-integration-tests</id>
+ <phase>post-integration-test</phase>
+ <goals>
+ <goal>report-integration</goal>
+ </goals>
+ <configuration>
+ <!-- Exclude any class named Application from reporting-->
+ <excludes>**/Application.*</excludes>
+ <dataFile>${jacoco.itReportFile}</dataFile>
+ <outputDirectory>${jacoco.reportFolder}</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+</plugin>
+```
+
+### Gradle
+
+You can add the following to `sonar.gradle` file:
+
+```gradle
+test {
+ jacoco {
+ excludes += ['build/generated/**']
+ }
+}
+
+jacocoTestReport {
+ afterEvaluate {
+ classDirectories = files(classDirectories.files.collect {
+ fileTree(dir: it, exclude: [
+ '**/*_.class'
+ ])
+ })
+ }
+}
+```
+
## Automatic analysis of the default generated project
The JHipster generator project publishes a sample project which is analyzed every time a new commit is merged in the "master" branch:
diff --git a/pages/configuring_a_corporate_proxy.md b/pages/configuring_a_corporate_proxy.md
index c4a954a..a9bf1f6 100644
--- a/pages/configuring_a_corporate_proxy.md
+++ b/pages/configuring_a_corporate_proxy.md
@@ -76,7 +76,7 @@ Or you can edit directly your `~/.gitconfig` file:
## Maven configuration
-Edit the `proxies` session in your `~/.m2/settings.xml` file
+Edit the `proxies` session in your `~/.m2/settings.xml` file:
```
<proxies>
diff --git a/pages/contributing-companies.md b/pages/contributing-companies.md
index 698e907..f68684b 100644
--- a/pages/contributing-companies.md
+++ b/pages/contributing-companies.md
@@ -30,7 +30,7 @@ sitemap:
These companies help us to develop JHipster
* [Google](https://google.com), which has given the project $7,000 worth of "Google cloud credits" since 2016.
-* Pivotal, which gives us free credits on their [Pivotal Web Services](http://run.pivotal.io/) cloud
+* Pivotal, which gives us free credits on their [Pivotal Web Services](http://run.pivotal.io/) cloud.
* [ElephantSQL](http://www.elephantsql.com/), which gives us several of their "Pretty Panda" Postgresql databases.
* YourKit, LLC, which gives us free licenses for the [YourKit Java profiler](http://www.yourkit.com/java/profiler/index.jsp).
* EJ Technologies, which gives us free licenses for the [JProfiler Java profiler](http://www.ej-technologies.com/products/jprofiler/overview.html).
diff --git a/pages/creating_an_app.md b/pages/creating_an_app.md
index ccc6ade..463a0db 100644
--- a/pages/creating_an_app.md
+++ b/pages/creating_an_app.md
@@ -158,6 +158,12 @@ You can either use:
* Angular
* React
+### Would you like to use a Bootswatch theme?
+
+The client theme to use.
+
+You can use any themes from [Bootswatch](https://bootswatch.com/) or keep the default one.
+
### Would you like to use the Sass stylesheet preprocessor for your CSS?
[Sass](https://sass-lang.com/) a great solution to simplify designing CSS. To be used efficiently, you will need to run a [Webpack](https://webpack.js.org) dev server, which will be configured automatically.
diff --git a/pages/creating_an_entity.md b/pages/creating_an_entity.md
index 88ee4b9..ba5e117 100644
--- a/pages/creating_an_entity.md
+++ b/pages/creating_an_entity.md
@@ -101,6 +101,8 @@ JHipster supports many field types. This support depends on your database backen
* `LocalDate`: A [java.time.LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) object, used to correctly manage dates in Java.
* `Instant`: A [java.time.Instant](https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html) object, used to represent a timestamp, an instantaneous point on the time-line.
* `ZonedDateTime`: A [java.time.ZonedDateTime](https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html) object, used to represent a local date-time in a given timezone (typically a calendar appointment). Note that time zones are neither supported by the REST nor by the persistence layers so you should most probably use `Instant` instead.
+* `Duration`: A [java.time.Duration](https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html) object, used to represent an amount of time.
+* `UUID`: A [java.util.UUID](https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html).
* `Boolean`: A Java Boolean.
* `Enumeration`: A Java Enumeration object. When this type is selected, the sub-generator will ask you what values you want in your enumeration, and it will create a specific `enum` class to store them.
* `Blob`: A Blob object, used to store some binary data. When this type is selected, the sub-generator will ask you if you want to store generic binary data, an image object, or a CLOB (long text). Images will be handled specifically on the Angular side, so they can be displayed to the end-user.
@@ -111,7 +113,7 @@ Validation can be set up for each field. Depending on the field type, different
Validation will be automatically generated on:
-* the HTML views, using the Angular or React validation mechanism
+* the HTML views, using the Angular or React or Vue validation mechanism
* the Java domain objects, using [Bean Validation](http://beanvalidation.org/)
Bean validation will then be used to automatically validate domain objects when they are used in:
diff --git a/pages/customizing-bootstrap-4.md b/pages/customizing-bootstrap-4.md
index 48675ff..06e0f30 100644
--- a/pages/customizing-bootstrap-4.md
+++ b/pages/customizing-bootstrap-4.md
@@ -16,7 +16,7 @@ _Pro tip: don't forget to run `npm start` or `yarn start` to get immediate feedb
The simplest way to customize how your JHipster application looks like is by
overriding CSS styles in `src/main/webapp/content/css/global.css`, or if you selected the Sass option, the `src/main/webapp/content/scss/global.scss` file.
-Using Sass is both easier, more concise and more powerful than plain CSS because Bootstrap is also written in Sass, please refer to Bootstrap's [official documentation about theming](https://getbootstrap.com/docs/4.0/getting-started/theming/) .
+Using Sass is both easier, more concise and more powerful than plain CSS because Bootstrap is also written in Sass, please refer to Bootstrap's [official documentation about theming](https://getbootstrap.com/docs/4.0/getting-started/theming/).
If you want to use Bootstrap [partials](http://sass-lang.com/guide) in your own `scss` files then import it like below at the beginning of your `scss` file.
For example to use the border-radius mixin:
diff --git a/pages/docker_compose.md b/pages/docker_compose.md
index 2d1050d..f58035f 100644
--- a/pages/docker_compose.md
+++ b/pages/docker_compose.md
@@ -80,16 +80,17 @@ __Solution 2__
## <a name="3"></a> Building and running a Docker image of your application
-To create a Docker image of your application, and push it into your Docker registry:
+To build a Docker image of your application using [Jib](https://github.com/GoogleContainerTools/jib) connecting to the local Docker daemon:
- With Maven, type: `./mvnw package -Pprod verify jib:dockerBuild`
-- With Gradle, type: `./gradlew -Pprod bootWar jibDockerBuild`
+- With Gradle, type: `./gradlew -Pprod bootJar jibDockerBuild`
-This will package your application with the `prod` profile, and build a Docker image using [Jib](https://github.com/GoogleContainerTools/jib) connecting to the local Docker daemon.
+To build a Docker image of your application without Docker and push it directly into your Docker registry, run:
-On Windows, due to [lack of named pipes](https://github.com/spotify/docker-client/issues/875), you may have to tune settings for Docker and turn on “Expose daemon on tcp://localhost:2375 without TLS”.
+- With Maven, type: `./mvnw package -Pprod verify jib:build`
+- With Gradle, type: `./gradlew -Pprod bootJar jib`
-Refer to the Jib documentation for configurations details :
+If this doesn't work out of the box for you, refer to the Jib documentation for configurations details, specifically regarding how to set up authentication to a Docker registry:
- [Jib maven plugin documentation](https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#configuration)
- [Jib gradle plugin documentation](https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin#configuration)
@@ -99,20 +100,14 @@ Refer to the Jib documentation for configurations details :
Due to the way Jib works, it will first try to pull the latest version of the base Docker image from the configured Docker registry. This is on purpose as in a CI environment you must ensure that you always build on top of the latest patched base image.
</p>
<p>
-However in a local environment, this might fail because of network issues (long timeouts, proxies) or because you are not logged in to a Docker registry.
+However in a local environment, this might fail your build if jib cannot access the Docker registry. A workaround for this is to use the `--offline` flag and will fix the issue as long as jib has already pulled the base Docker image in its cache.
</p>
<p>
-Jib currently has an <a href="https://github.com/GoogleContainerTools/jib/issues/718">opened issue for offline mode support</a>, however if the jib builds fails for you you can use the following workaround :
+With Maven, type: <pre>./mvnw -Pprod package verify jib:dockerBuild --offline</pre>
+With Gradle, type: <pre>./gradlew -Pprod bootJar jibDockerBuild --offline</pre>
</p>
<p>
-For Maven :
-<pre>
- ./mvnw clean package -Pprod jib:exportDockerContext && docker build -t myimage target/jib-docker-context
-</pre>
-For Gradle :
-<pre>
- ./gradlew -Pprod bootWar jibExportDockerContext && docker build -t myimage build/jib-docker-context
-</pre>
+Note that jib is currently unable to pull a local Docker image from the Docker daemon. Progress on this issue is tracked at [GoogleContainerTools/jib/issues/1468](https://github.com/GoogleContainerTools/jib/issues/1468).
</p>
</div>
@@ -170,7 +165,7 @@ Follow these steps to do so:
- Scale the MongoDB node service (you have to choose an odd number of nodes): `docker-compose -f src/main/docker/mongodb-cluster.yml scale <name_of_your_app>-mongodb-node=<X>`
- Init the replica set (parameter X is the number of nodes you input in the previous step, folder is the folder where the YML file is located, it's `docker` by default): `docker container exec -it <yml_folder_name>_<name_of_your_app>-mongodb-node_1 mongo --eval 'var param=<X>, folder="<yml_folder_name>"' init_replicaset.js`
- Init the shard: `docker container exec -it <yml_folder_name>_<name_of_your_app>-mongodb_1 mongo --eval 'sh.addShard("rs1/<yml_folder_name>_<name_of_your_app>-mongodb-node_1:27017")'`
-- Build a Docker image of your application: `./mvnw package -Pprod verify jib:dockerBuild`
+- Build a Docker image of your application: `./mvnw -Pprod verify jib:dockerBuild` or `./gradlew -Pprod bootJar jibDockerBuild`
- Start your application: `docker-compose -f src/main/docker/app.yml up -d <name_of_your_app>-app`
If you want to add or remove some MongoDB nodes, just repeat step 3 and 4.
@@ -183,7 +178,7 @@ Follow these steps to do so:
- Build the image: `docker-compose -f src/main/docker/couchbase-cluster.yml build`
- Run the database: `docker-compose -f src/main/docker/couchbase-cluster.yml up -d`
- Scale the Couchbase node service (you have to choose an odd number of nodes): `docker-compose -f src/main/docker/couchbase-cluster.yml scale <name_of_your_app>-couchbase-node=<X>`
-- Build a Docker image of your application: `./mvnw package -Pprod verify jib:dockerBuild`
+- Build a Docker image of your application: `./mvnw -Pprod verify jib:dockerBuild` or `./gradlew -Pprod bootJar jibDockerBuild`
- Start your application: `docker-compose -f src/main/docker/app.yml up -d <name_of_your_app>-app`
### Cassandra
diff --git a/pages/gcp.md b/pages/gcp.md
index fdbb204..040dbc2 100644
--- a/pages/gcp.md
+++ b/pages/gcp.md
@@ -39,7 +39,9 @@ This generator will:
1. Add the App Engine plugin to Maven / Gradle.
To deploy:
-1. Use the App Engine plugin to deploy: `./mvnw appengine:deploy -DskipTests -Pprod,prod-gae`
+Please note that on v6 we have migrated to jar packaging. However GAE needs a war so you will need to package your app with the war profile.
+
+1. Use the App Engine plugin to deploy: `./mvnw appengine:deploy -DskipTests -Pprod,prod-gae,war`
In addition to simply run your application, Google App Engine provides full suite of features to manage and operate:
- Traffic Splitting - Deploy multiple versions of your application and split traffic to different versions. This is also great for canary new changes.
diff --git a/pages/heroku.md b/pages/heroku.md
index 5859c9f..0b55498 100644
--- a/pages/heroku.md
+++ b/pages/heroku.md
@@ -53,7 +53,7 @@ When your application is already deployed, you can prepare a new deployment by t
Or when using gradle:
-`./gradlew -Pprod bootWar -x test`
+`./gradlew -Pprod bootJar -x test`
### Pushing to production
@@ -61,11 +61,11 @@ _Note: This assumes you have run the generator on the machine you are executing
To push to production, type:
-`heroku deploy:jar target/*.war`
+`heroku deploy:jar target/*.jar`
Or when using gradle:
-`heroku deploy:jar build/libs/*war`
+`heroku deploy:jar build/libs/*jar`
## Deploying Microservices
diff --git a/pages/installation.md b/pages/installation.md
index 626ae88..b7e7e0f 100644
--- a/pages/installation.md
+++ b/pages/installation.md
@@ -13,13 +13,11 @@ sitemap:
## Installation types
-We provide 6 ways of working with JHipster. If in doubt, choose our 2nd option, "Local installation with NPM":
+We provide 4 ways of working with JHipster. If in doubt, choose our 2nd option, "Local installation with NPM":
* [JHipster Online](https://start.jhipster.tech/) is a simple way to generate an application without installing JHipster in the first place.
* "Local installation with NPM" is the classical way of working with JHipster. Everything is installed on your machine, which can be a little complex to set up, but that's how most people usually work. In case of doubt, choose this installation.
-* "Local installation with Yarn" is the same as classical "Local installation with NPM", but using [Yarn](https://yarnpkg.com/) instead of NPM
-* "Installation with a package manager" is only available for Mac OS X and Windows. This is a very simple installation method, if you use a package manager, but it is still in BETA.
-* The Vagrant-based "[development box](https://github.com/jhipster/jhipster-devbox)", with all tools already set up in a Ubuntu-based virtual machine.
+* "Local installation with Yarn" is the same as classical "Local installation with NPM", but using [Yarn](https://yarnpkg.com/) instead of NPM. Please note that Yarn is a lot less popular than NPM in our community, so this isn't a recommended option for newcomers.
* The "[Docker](https://www.docker.io/)" container, which brings you a lightweight container with JHipster installed.
## JHipster Online (for users wanting a simplified way to run JHipster)
@@ -36,11 +34,10 @@ In the future, we expect JHipster Online to provide more features, of course.
### Quick setup
-1. Install Java 8 from [the Oracle website](http://www.oracle.com/technetwork/java/javase/downloads/index.html).
+1. Install Java 11. We recommend you use [AdoptOpenJDK builds](https://adoptopenjdk.net/), as they are open source and free.
2. Install Node.js from [the Node.js website](http://nodejs.org/) (please use an LTS 64-bit version, non-LTS versions are not supported)
-3. NPM is installed with Node.js but you need to upgrade it: `npm install -g npm`
-4. If you want to use the JHipster Marketplace, install Yeoman: `npm install -g yo`
-5. Install JHipster: `npm install -g generator-jhipster`
+3. Install JHipster: `npm install -g generator-jhipster`
+4. (optional) If you want to use a module or a blueprint (for instance from the [JHipster Marketplace]({{ site.url }}/modules/marketplace/#/list)), install [Yeoman](https://yeoman.io/): `npm install -g yo`
Now that JHipster is installed, your next step is to [create an application]({{ site.url }}/creating-an-app/)
@@ -77,40 +74,6 @@ If you have problems using Yarn globally, be sure to have `$HOME/.config/yarn/gl
On Mac or Linux: ```export PATH="$PATH:`yarn global bin`:$HOME/.config/yarn/global/node_modules/.bin"```
-## Installation with a package manager
-
-__Please note this is a BETA feature!__ If you selected this installation, don't hesitate to send us a [bug report](https://github.com/jhipster/generator-jhipster/issues) or feedback on [@java_hipster](https://twitter.com/java_hipster).
-
-### Installation with Homebrew on Mac OS X
-
-JHipster provides a [Homebrew](https://brew.sh/) package, available on [http://formulae.brew.sh/formula/jhipster](http://formulae.brew.sh/formula/jhipster).
-
-To install JHipster (as well as Node and NPM), just type:
-
- brew install jhipster
-
-New versions of this package are published each time a new JHipster release is created, but it might take time for the Homebrew team to validate this package - so if you have an older JHipster release, please be patient or use the NPM installation above.
-
-### Installation with Chocolatey on Windows
-
-JHipster provides a [Chocolatey](https://chocolatey.org/) package, available on [https://chocolatey.org/packages/jhipster](https://chocolatey.org/packages/jhipster).
-
-To install JHipster (as well as Node, NPM, Yeoman, Java and Git), just type:
-
- choco install jhipster
-
-New versions of this package are published each time a new JHipster release is created, but it might take time for the Chocolatey team to validate this package - so if you have an older JHipster release, please be patient or use the NPM installation above.
-
-## Vagrant box installation
-
-The [JHipster development box](https://github.com/jhipster/jhipster-devbox) project gives you a virtual machine with all the necessary tools to develop your JHipster project.
-
-It's an easy way to get up and running very quickly with JHipster.
-
-Besides JHipster, this virtual machine includes many development tools, as well as Docker, so you should have everything ready for working.
-
-Please go to the [JHipster development box page](https://github.com/jhipster/jhipster-devbox) for installation and configuration information.
-
## Docker installation (for advanced users only)
_Please note: this Docker image is for running the JHipster generator inside a container. It's completely different from the [Docker and Docker Compose configurations]({{ site.url }}/docker-compose/) that JHipster will generate, which goal is to run your generated application inside a container_
@@ -248,7 +211,7 @@ Once your application is created, you can run all the normal gulp/bower/maven co
**Congratulations! You've launched your JHipster app inside Docker!**
-On your host machine, you should be able to :
+On your host machine, you should be able to:
* Access the running application at `http://DOCKER_HOST:8080`
* Get all the generated files inside your shared folder
diff --git a/pages/jdl.md b/pages/jdl.md
index c0a998a..c6d0a06 100644
--- a/pages/jdl.md
+++ b/pages/jdl.md
@@ -4,7 +4,7 @@ title: JHipster Domain Language
permalink: /jdl/
sitemap:
priority: 0.5
- lastmod: 2019-02-02T12:00:00-00:00
+ lastmod: 2019-04-27T12:00:00-00:00
---
# <i class="fa fa-star"></i> JHipster Domain Language (JDL)
@@ -14,7 +14,7 @@ The JDL is a JHipster specific domain language where you can describe all your a
You can use our online [JDL-Studio](https://start.jhipster.tech/jdl-studio/) or one of the [JHipster IDE](https://www.jhipster.tech/jhipster-ide/) plugins/extensions, wich are available for [Eclipse](https://marketplace.eclipse.org/content/jhipster-ide), [VS Code](https://marketplace.visualstudio.com/items?itemName=jhipster-ide.jdl) and [Atom](https://atom.io/packages/ide-jhipster), to create a JDL file and its UML visualization. You can create and export or share the URL of your JDL model as well.
-You can generate applications, deployments and entities from a JDL file using the `import-jdl` sub-generator, by running `jhipster import-jdl your-jdl-file.jdl`.
+You can generate applications, deployments and entities from a JDL file using the `import-jdl` sub-generator, by running `jhipster import-jdl your-jdl-file.jdl`.
If you have an existing project (either created with `jhipster import-jdl` or generated with `jhipster` command line), you can generate entities for the project by running running `jhipster import-jdl your-jdl-file.jdl`. Make sure to execute this command under your JHipster project.
@@ -53,11 +53,12 @@ Here is the JDL documentation:
1. [Available deployment options](#deployment_options)
1. [Available field types and constraints](#types_and_constraints)
1. [Available options](#all_options)
+1. [Troubleshooting](#troubleshooting)
1. [Issues and bugs](#issues)
***
-# <a name="sample"></a> JDL Sample
+## <a name="sample"></a> JDL Sample
The Oracle "Human Resources" sample application has been translated into JDL, and is available [here](https://github.com/jhipster/jdl-samples/blob/master/Oracle-Human-Resources-sample.jdl).
The same application is loaded by default in [JDL-Studio](https://start.jhipster.tech/jdl-studio/) and [JHipster IDE](https://www.jhipster.tech/jhipster-ide/) as well.
@@ -456,7 +457,7 @@ Service with serviceClass (see B) will make the resource call the service class
Service with serviceImpl (see C) will make a service interface which will be used by the resource class.
The interface is implemented by an concrete class which will call the repository interface.
-Using no service uless sure is the simplest option and good for CRUD. Use service with a Class if you will have a lot
+Using no service unless sure is the simplest option and good for CRUD. Use service with a Class if you will have a lot
of business logic which will use multiple repositories making it ideal for a service class. Jhipsters are not fan of
unnecessary Interfaces but if you like them go for service with impl.
@@ -608,7 +609,6 @@ deployment {
dockerRepositoryName "yourDockerLoginName"
serviceDiscoveryType no
istio autoInjection
- istioRoute true
kubernetesServiceType Ingress
kubernetesNamespace jhipster
ingressDomain "jhipster.192.168.99.100.nip.io"
@@ -728,10 +728,10 @@ A Unidirectional example where a Citizen has a Passport, but the Passport has no
relationship OneToOne {
Citizen to Passport
}
-
+
// using @MapsId
relationship OneToOne {
- Citizen to Passport with jpaDerivedIdentifier
+ Citizen to Passport with jpaDerivedIdentifier
}
### One-to-Many
@@ -777,7 +777,7 @@ Finally, in this example we have the Car that knows of its drivers, and the Driv
Please note that the owning side of the relationship has to be on the left side
-# <a name="constants"></a>Constants
+## <a name="constants"></a>Constants
As of JHipster Core v1.2.7, the JDL supports numerical constants.
Here is an example:
@@ -797,7 +797,7 @@ entity A {
}
```
-# <a name="workflows"></a>Workflows
+## <a name="workflows"></a>Workflows
## <a name="workflow_monolith"></a>Monolith workflow
@@ -851,8 +851,7 @@ You can also create entire microservice stack using JDL, [see this blog post](ht
---
-
-# <a name="annexes"></a>Annexes
+## <a name="annexes"></a>Annexes
## <a name="application_options">Available application options
@@ -1047,6 +1046,8 @@ Here are the application options supported in the JDL:
</tr>
</table>
+---
+
## <a name="deployment_options">Available deployment options
Here are the application options supported in the JDL:
@@ -1061,7 +1062,7 @@ Here are the application options supported in the JDL:
<tr>
<td>deploymentType</td>
<td>docker-compose</td>
- <td>docker-compose, kubernetes, openshift, rancher-compose</td>
+ <td>docker-compose, kubernetes, openshift</td>
<td></td>
</tr>
<tr>
@@ -1142,18 +1143,6 @@ Here are the application options supported in the JDL:
<td>no, manualInjection, autoInjection</td>
<td>Applicable only when deploymentType is kubernetes</td>
</tr>
- <tr>
- <td>istioRoute</td>
- <td>false</td>
- <td></td>
- <td>Applicable only when deploymentType is kubernetes</td>
- </tr>
- <tr>
- <td>enableRancherLoadBalancing</td>
- <td>false</td>
- <td></td>
- <td>Applicable only when deploymentType is rancher-compose</td>
- </tr>
<tr>
<td>openshiftNamespace</td>
<td>default</td>
@@ -1243,7 +1232,12 @@ Common databases:
<td><dfn>required, unique</dfn></td>
</tr>
<tr>
+ <td>Duration</td>
<td></td>
+ <td><dfn>required, unique</dfn></td>
+ </tr>
+ <tr>
+ <td>UUID</td>
<td>UUID</td>
<td><dfn>required, unique</dfn></td>
</tr>
@@ -1274,6 +1268,8 @@ Common databases:
</tr>
</table>
+---
+
## <a name="all_options"></a> Available options
### Unary options
@@ -1297,7 +1293,20 @@ These options take values:
- `angularSuffix` (custom value)
- `clientRootFolder` (custom value)
-# <a name="issues"></a>Issues and bugs
+---
+
+## <a name="troubleshooting"></a>Troubleshooting
+
+### The JDL import only finds one entity when matching MS baseName
+
+This is a known issue regarding the parsing system and fixing it is tricky.
+The obvious workaround is to use different names for the microservice and the entities inside.
+
+See [JHipster Core issue #308](https://github.com/jhipster/jhipster-core/issues/308) for more information.
+
+---
+
+## <a name="issues"></a>Issues and bugs
JDL is [available on GitHub](https://github.com/jhipster/jhipster-core), and follows the same
[contributing guidelines as JHipster]( https://github.com/jhipster/generator-jhipster/blob/master/CONTRIBUTING.md).
diff --git a/pages/jhipster-registry.md b/pages/jhipster-registry.md
index af37352..1414c0f 100644
--- a/pages/jhipster-registry.md
+++ b/pages/jhipster-registry.md
@@ -50,7 +50,7 @@ The JHipster Registry is available as an executable WAR file on our [Releases pa
Download the WAR file, and run it as a usual JHipster application, using the profile you want to use (see the previous section about profiles). For example, to run it using a Spring Cloud Config configuration stored in the `central-config` directory:
- ./jhipster-registry-<version>.war --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=native --spring.cloud.config.server.composite.0.search-locations=file:./central-config
+ ./jhipster-registry-<version>.jar --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=native --spring.cloud.config.server.composite.0.search-locations=file:./central-config
Note that it is important to provide a JWT secret key to the registry on startup, either via the `JHIPSTER_SECURITY_AUTHENTICATION_JWT_SECRET` environment variable or with arguments as shown above. Another possible way is to set this value in the `application.yml` file of your centralized configuration source (which is loaded on startup by all your applications including the registry).
@@ -59,18 +59,18 @@ we use `jhipster.security.authentication.jwt.secret` in this documentation. More
Similarly, to run the registry with the `prod` profile, adapt the arguments to your setup, for example:
- ./jhipster-registry-<version>.war --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry-sample-config
+ ./jhipster-registry-<version>.jar --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry-sample-config
- ./jhipster-registry-<version>.war --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry --spring.cloud.config.server.composite.0.search-paths=central-config
+ ./jhipster-registry-<version>.jar --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry --spring.cloud.config.server.composite.0.search-paths=central-config
### Building from source
The JHipster Registry can be cloned/forked/downloaded directly from [jhipster/jhipster-registry](https://github.com/jhipster/jhipster-registry). As the JHipster Registry is also a JHipster-generated application, you can run it like any other JHipster application:
- run it in development with `./mvnw` (for the Java server) and `yarn start` (for managing the front-end), it will use by default the `dev` profile and it will be available at [http://127.0.0.1:8761/](http://127.0.0.1:8761/).
-- use `./mvnw -Pprod package` to package it in production, and generate the usual JHipster executable WAR file. You can then run the WAR file using the `dev` or `prod` Spring profile, for example: `./jhipster-registry-<version>.war --spring.profiles.active=prod`
+- use `./mvnw -Pprod package` to package it in production, and generate the usual JHipster executable WAR file. You can then run the WAR file using the `dev` or `prod` Spring profile, for example: `./jhipster-registry-<version>.jar --spring.profiles.active=prod`
-Please note that to use the `dev` and `composite` profile, you need to have a `central-config` directory with your configuration, so if you run `./jhipster-registry-<version>.war --spring.profiles.active=dev`, you need to have that directory set up.
+Please note that to use the `dev` and `composite` profile, you need to have a `central-config` directory with your configuration, so if you run `./jhipster-registry-<version>.jar --spring.profiles.active=dev`, you need to have that directory set up.
### Using Docker
diff --git a/pages/jhipster_uml.md b/pages/jhipster_uml.md
index 828655d..d3e30f2 100644
--- a/pages/jhipster_uml.md
+++ b/pages/jhipster_uml.md
@@ -202,7 +202,7 @@ As you can see, there are 3 types of reflexivity. JHipster-UML only supports the
- It can lead to over-complexified and wrong models (the same effect can be achieved more easily);
- - JHipster doesn't support it (this is a good thing);
+ - JHipster doesn't support it (this is a good thing).
### A complete example
@@ -264,7 +264,7 @@ The options described in the help can be used in the both but the commande line
### A concrete example
jumlfile content:
-```javascript
+```json
{
"db": "sql",
"force": "true"
@@ -293,7 +293,7 @@ Next, it's pretty straightforward: just run your app!
JHipster is a great scaffolding tool with many conventions, some of them are worth mentioning when generating entities with JHipster-UML:
- You don't have to use an `id` field in your entities because JHipster generates one by default, and JHipster-UML removes any field if it is detected as an ID;
- - You don't have to use the plural form in your relationships, JHipster adds an `s` when needed. For instance, if there's a many-to-many relationship between entity A and entity B, you don't have to name the relationship's end `as` or `bs` because JHipster will do that for you;
+ - You don't have to use the plural form in your relationships, JHipster adds an `s` when needed. For instance, if there's a many-to-many relationship between entity A and entity B, you don't have to name the relationship's end `as` or `bs` because JHipster will do that for you.
## <a name="reservedwords"></a>Reserved words
@@ -445,7 +445,7 @@ The parser will notice a few things:
- Two classes, 'Author' and 'Book'.
- - Two DataTypes, 'LocalDate' and 'BigDecimal'
+ - Two DataTypes, 'LocalDate' and 'BigDecimal'.
- Attributes, you can set the type with the default ones, or with the declared DataTypes.
diff --git a/pages/kubernetes.md b/pages/kubernetes.md
index 54b07ea..8c26f17 100644
--- a/pages/kubernetes.md
+++ b/pages/kubernetes.md
@@ -27,7 +27,7 @@ You have to install:
- [Docker](https://docs.docker.com/installation/#installation)
- [kubectl](http://kubernetes.io/docs/user-guide/prereqs/)
-You must have a Docker registry. If you don’t have one, you can use the official [Docker Hub](https://hub.docker.com/)
+You must have a Docker registry. If you don’t have one, you can use the official [Docker Hub](https://hub.docker.com/).
## Minikube
@@ -67,7 +67,7 @@ See the documentation on namespace [here](http://kubernetes.io/docs/user-guide/n
If you choose [Docker Hub](https://hub.docker.com/) as main registry, it will be your Docker Hub login.
-If you choose [Google Container Registry](https://cloud.google.com/container-registry/), then it'll be `gcr.io/[PROJECT ID]`, or a regional registry, such as `eu.grc.io/[PROJECT ID]`, `us.gcr.io/[PROJECT ID]`, or `asia.gcr.io/[PROJECT ID]`. See [Pushing and Pulling Images](https://cloud.google.com/container-registry/docs/pushing-and-pulling) for more detial.
+If you choose [Google Container Registry](https://cloud.google.com/container-registry/), then it'll be `gcr.io/[PROJECT ID]`, or a regional registry, such as `eu.gcr.io/[PROJECT ID]`, `us.gcr.io/[PROJECT ID]`, or `asia.gcr.io/[PROJECT ID]`. See [Pushing and Pulling Images](https://cloud.google.com/container-registry/docs/pushing-and-pulling) for more detial.
### What command should we use for push Docker image to repository?
@@ -85,7 +85,7 @@ When your application is already deployed, you can re-deploy it by building a ne
Or when using Gradle:
-`./gradlew -Pprod bootWar jibDockerBuild -x test`
+`./gradlew -Pprod bootJar jibDockerBuild -x test`
### Pushing to Docker Hub
@@ -204,7 +204,7 @@ The Prometheus instance for your applications can be explored using
Kubernetes offers a number of facilities out-of-the-box to help with Microservices deployments, such as:
* Service Registry - Kubernetes `Service` is a first-class citizen that provides service registry and lookup via DNS name.
-* Load Balancing - Kubernetes Service acts as a L4 load balancer
+* Load Balancing - Kubernetes Service acts as a L4 load balancer.
* Health Check - Liveness probes and readiness probes help determine the health of the service.
* Configuration - Kubernetes `ConfigMap` can be used to store and apply configuration outside of the application.
diff --git a/pages/managing_relationships.md b/pages/managing_relationships.md
index 78e0a97..f6f92f0 100644
--- a/pages/managing_relationships.md
+++ b/pages/managing_relationships.md
@@ -371,7 +371,7 @@ This is the corresponding JDL for previous bi-directional one-to-one example:
}
However, based on business requirements, there might be cases where this should be avoided because it has following constraint:
-**Once the id(primary key) is set at owning side, it is not changeable using JPA/Hibernate. You should not change it anyway.**.
+**Once the id(primary key) is set at owning side, it is not changeable using JPA/Hibernate. You should not change it anyway.**
**Here are a few suggestions regarding usage:**
@@ -400,3 +400,5 @@ Do not use `@MapsId` when:
class Driver{@OneToOne @JoinColumn(name="id") Car drivingCar} // driver drives another car in future
```
Both car and driver association value may change in future.
+
+**Note: There is [a known issue regarding using `@OneToOne` with `@MapsId` and how to avoid it](https://www.jhipster.tech/tips/026_tip_issue_of_onetoone_with_mapsid_how_to_avoid_it.html)**.
diff --git a/pages/openshift.md b/pages/openshift.md
index e6c7323..2446d1d 100644
--- a/pages/openshift.md
+++ b/pages/openshift.md
@@ -111,7 +111,7 @@ When your application is already deployed, you can re-deploy it by building a ne
Or when using gradle:
-`./gradlew -Pprod bootWar jibDockerBuild -x test`
+`./gradlew -Pprod bootJar jibDockerBuild -x test`
If you face any issue in running the image built by jib plugin (like `chmod +x entrypoint.sh not permitted`), then you might have to update scc. Do the following change,
`oc edit scc restricted` and update `runAsUser.Type` strategy to `RunAsAny`
@@ -177,11 +177,11 @@ data:
## Troubleshooting Tips
-- If you are running All-in-one VM, make sure to run the following command before pushing docker images,
- ` eval $(docker-machine env <machine_name>) `
-- If you face issues running StatefulSets or Services with persistent storage, make sure persistent volumes are properly initialized
-- If you face issues running StatefulSets, check the persistent volume claims. If PVCs' take longer time than usual while initializing, try creating it manually
-- After running the generators, make sure you are in the chosen namespace **oc project <namespace>** before applying the oc commands
+- If you are running All-in-one VM, make sure to run the following command before pushing docker images,
+`eval $(docker-machine env <machine_name>)`
+- If you face issues running StatefulSets or Services with persistent storage, make sure persistent volumes are properly initialized.
+- If you face issues running StatefulSets, check the persistent volume claims. If PVCs' take longer time than usual while initializing, try creating it manually.
+- After running the generators, make sure you are in the chosen namespace **oc project &lt;namespace&gt;** before applying the oc commands.
- Image pulling for services like elasticsearch, registry, console etc,. for the first time will take some time as it needs to be pulled from public registry to the container registry. If any of the dependent services fail because of this, try deploying it once the services with which it is dependent on are up and running.
- Please make sure you have the necessary privilege (may require admin) to run scc service that is required to run some of the pods.
diff --git a/pages/production.md b/pages/production.md
index a057265..09501e7 100644
--- a/pages/production.md
+++ b/pages/production.md
@@ -6,7 +6,7 @@ redirect_from:
- /production.html
sitemap:
priority: 0.7
- lastmod: 2019-02-01T00:00:00-00:00
+ lastmod: 2019-02-04T00:00:00-00:00
---
# <i class="fa fa-play-circle"></i> Using JHipster in production
@@ -37,54 +37,95 @@ This profile will compile, test and package your application with all production
If you want more information on the available profiles, please go the section titled "[Development and Production profiles]({{ site.url }}/profiles/)".
-### Building an executable WAR file
+### Building an executable JAR / WAR file
+
+To package the application as a "production" JAR, with Maven please type:
+
+`./mvnw -Pprod verify`
+
+Or when using Gradle, please type:
+
+`./gradlew -Pprod bootJar`
+
+This will generate this file (if your application is called "jhipster"):
+
+When using Maven:
+* `target/jhipster-0.0.1-SNAPSHOT.jar`
+
+When using Gradle:
+* `build/libs/jhipster-0.0.1-SNAPSHOT.jar`
+
To package the application as a "production" WAR, with Maven please type:
-`./mvnw -Pprod package`
+`./mvnw -Pprod,war verify`
Or when using Gradle, please type:
-`./gradlew -Pprod bootWar`
+`./gradlew -Pprod -Pwar bootWar`
+
-This will generate two files (if your application is called "jhipster"):
+This will generate these files (if your application is called "jhipster"):
When using Maven:
* `target/jhipster-0.0.1-SNAPSHOT.war`
-* `target/jhipster-0.0.1-SNAPSHOT.war.original`
When using Gradle:
* `build/libs/jhipster-0.0.1-SNAPSHOT.war`
-* `build/libs/jhipster-0.0.1-SNAPSHOT.war.original`
-
-The first one is an executable WAR file (see next section to run it). It can also be deployed on an application server, but as it includes runtime libraries, we recommend you use the second, `.original` file if you want to deploy JHipster on an application server like Tomcat, Weblogic or Websphere.
-When running JHipster in an application server, some of the tuning described in this documentation (like GZipping, HTTP/2 or HTTPS support) will not work anymore, as they will need to be configured at the application server level. This is why we do not recommend using an application server with JHipster.
-
-**Please note** that when building a WAR file with the `prod` profile, the generated archive will not include the `dev` assets.
+**Please note** that when building a JAR or WAR file with the `prod` profile, the generated archive will not include the `dev` assets.
## <a name="run"></a> Running in production
-### Executing the WAR file without an application server
+### Executing the JAR file without an application server
-Instead of deploying to an application server, many people find it easier to just have an executable WAR file.
+Instead of deploying to an application server, many people find it easier to just have an executable JAR file.
-The first WAR file generated in the previous step is such a WAR, so you can run it in "production" mode by typing (on Mac OS X or Linux):
+With the JAR file generated in the previous step, you can run it in "production" mode by typing (on Mac OS X or Linux):
-`./jhipster-0.0.1-SNAPSHOT.war`
+`./jhipster-0.0.1-SNAPSHOT.jar`
If you are on Windows, use:
-`java -jar jhipster-0.0.1-SNAPSHOT.war`
+`java -jar jhipster-0.0.1-SNAPSHOT.jar`
-**Please note** that this WAR file uses the profile we selected when building it. As it was built using the `prod` file in the previous section, it will therefore run with the `prod` profile.
+**Please note** that this JAR file uses the profile we selected when building it. As it was built using the `prod` file in the previous section, it will therefore run with the `prod` profile.
### Running the application in a Docker container
-JHipster has first-class support for Docker: it is very easy to bundle your executable WAR file in a Docker image, and run it inside Docker.
+JHipster has first-class support for Docker: it is very easy to bundle your executable JAR file in a Docker image, and run it inside Docker.
To learn how to package your application with Docker, please read our [Docker Compose documentation]({{ site.url }}/docker-compose/).
+### Run as a service
+
+It is also possible to run the Jar as a Linux service, and you may want to force in your `pom.xml` file before packaging. To do it, add the following property inside `<configuration>` of `spring-boot-maven-plugin` plugin.
+
+```
+<embeddedLaunchScriptProperties>
+ <mode>service</mode>
+</embeddedLaunchScriptProperties>
+```
+
+Next, setup your init.d with:
+
+`ln -s jhipster-0.0.1-SNAPSHOT.jar /etc/init.d/jhipster`
+
+Secure your application with:
+
+`chown jhuser:jhuser jhipster-0.0.1-SNAPSHOT.jar
+sudo chattr +i your-app.jar`
+
+Considering `jhuser` a non-root OS account that will run the application, then the application can be run this way:
+
+`service jhipster start|stop|restart`
+
+There are many other options that you can find in [Spring Boot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html), including more security steps and Windows service.
+
+### Running the application under a Context Path
+
+When deploying a JHipster app to an Application Server or customizing your context-path, it is required to set the `baseHref` value in `webpack.common.js` equal to the expected context-path.
+
## <a name="performance"></a> Performance optimizations
### Cache tuning
@@ -109,11 +150,11 @@ To enable HTTP/2, you need to:
### GZipping
-Within an executable WAR file, which uses the `prod` profile, JHipster configures GZip compression on your Web resources.
+Within an executable JAR file, which uses the `prod` profile, JHipster configures GZip compression on your Web resources.
By default, compression will work on all static resources (HTML, CSS, JavaScript) and on all REST requests. You can have more information on this configuration by looking at the `server.compression.*` keys in the Spring Boot application properties, configured in the `application-prod.yml` file.
-**Please note** that GZipping is done by the application server, so this section only applies if you use the "executable WAR" option described above. If you run your application in an external application server, you will need to configure it separately.
+**Please note** that GZipping is done by the application server, so this section only applies if you use the "executable JAR" option described above. If you run your application in an external application server, you will need to configure it separately.
### Cache headers
@@ -123,13 +164,13 @@ With the `prod` profile, JHipster configures a Servlet filter that puts specific
This step is automatically triggered when you build your project with the `prod` profile. If you want to run it without launching a Maven build, please run:
-`npm run webpack:build`
+`npm run build`
This will use [Webpack](https://webpack.github.io/) to process all your static resources (CSS, TypeScript, HTML, JavaScript, images...) in order to generate an optimized client-side application.
During this process, Webpack will compile the TypeScript code into JavaScript code, and will also generate source maps, so the client-side application can still be debugged.
-Those optimized assets will be generated in `target/www` for Maven or `build/www` for Gradle, and will be included in your final production WAR.
+Those optimized assets will be generated in `target/classes/static` for Maven or `build/resources/main/static` for Gradle, and will be included in your final production JAR.
This code will be served when you run the application with the `prod` profile.
diff --git a/pages/profiles.md b/pages/profiles.md
index 8ee21f8..b99b351 100644
--- a/pages/profiles.md
+++ b/pages/profiles.md
@@ -11,14 +11,14 @@ sitemap:
# <i class="fa fa-group"></i> Profiles
-JHipster comes with two [Spring profiles](http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html) :
+JHipster comes with two [Spring profiles](http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html):
* `dev` for development: it focuses on ease of development and productivity
* `prod` for production: it focuses on performance and scalability
Those profiles come in two different configurations:
-* The Maven/Gradle profiles are used at build time. For example `./mvnw -Pprod package` or `./gradlew bootWar -Pprod` will package a production application.
+* The Maven/Gradle profiles are used at build time. For example `./mvnw -Pprod package` or `./gradlew -Pprod bootJar` will package a production application.
* The Spring profiles work at run time. Some Spring beans will behave differently, depending on the profile.
Spring profiles are set by Maven/Gradle, so we have a consistency between the two methods: you will have a `prod` profile on Maven/Gradle and Spring at the same time.
@@ -49,11 +49,11 @@ You can run JHipster in production directly using Maven or Gradle:
If you want to package your application as an executable WAR file, you should provide Maven or Gradle with a profile. E.g.,:
* With Maven, run `./mvnw -Pprod package` (or `mvn -Pprod package`)
-* With Gradle, run `./gradlew -Pprod bootWar` (or `gradle -Pprod bootWar`)
+* With Gradle, run `./gradlew -Pprod bootJar` (or `gradle -Pprod bootJar`)
When you run your production application from a WAR file, the default is to use the same profile(s) as used during packaging. If you want to override this, you can explicitly provide an alternative in VM argument:
-* `./java -jar jhipster-0.0.1-SNAPSHOT.war --spring.profiles.active=...`
+* `java -jar jhipster-0.0.1-SNAPSHOT.jar --spring.profiles.active=...`
## Spring profiles switches
diff --git a/pages/rancher.md b/pages/rancher.md
deleted file mode 100644
index e48c795..0000000
--- a/pages/rancher.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-layout: default
-title: Deploying to Rancher
-permalink: /rancher/
-redirect_from:
- - /rancher.html
-sitemap:
- priority: 0.7
- lastmod: 2017-02-27T00:00:00-00:00
----
-
-# [BETA] Deploying to Rancher
-
-**WARNING!** This is a new sub-generator, of **BETA** quality. Use it at your own risk! Feedback is highly welcome!
-
-This sub-generator allows deployment of your JHipster application to [Rancher](http://rancher.com/).
-
-[![]({{ site.url }}/images/logo/logo-rancher.png)](http://rancher.com/)
-
-## Limitations
-
-- Cassandra and Mongo cluster are not supported for now.
-
-## Pre-requisites
-
-You have to install:
-
-- [Docker](https://docs.docker.com/installation/#installation)
-
-You must have a Docker registry. If you don’t have one, you can use the official [Docker Hub](https://hub.docker.com/)
-
-## Running the sub-generator
-
-To generate config files for Rancher, run this command in a new folder:
-
-`jhipster rancher-compose`
-
-Then answer all the questions to deploy your application.
-
-
-### Which *type* of application would you like to deploy?
-
-Your type of application depends on whether you wish to deploy a microservices architecture or classical applications.
-
-
-### Enter the root directory where your applications are located
-
-Enter the path.
-
-### Which applications do you want to include in your Rancher configuration?
-
-Select your applications.
-
-### Do you want to setup monitoring for your applications ?
-
-Deploy JHipster Console or Prometheus to do monitoring on your application
-
-### Enter the admin password used to secure the JHipster Registry admin
-
-This question is only displayed if you choose microservices architecture.
-
-### Would you like to enable rancher load balancing support?
-
-Activate Load balancing service on Rancher. It will only bind your gateway application and map port 80 to your gateway port (by default 8080).
-
-### What should we use for the base Docker repository name?
-
-If you choose [Docker Hub](https://hub.docker.com/) as main registry, it will be your Docker Hub login.
-
-### What command should we use for push Docker image to repository?
-
-The default command to push to Docker Hub is `docker push`
-For example, if you use the Google Cloud to host your Docker images, it will be: `gcloud docker push`
-
-## Updating your deployed application
-
-### Preparing a new deployment
-
-When your application is already deployed, you can re-deploy it by building a new Docker image:
-
-`./mvnw package -Pprod -DskipTests jib:dockerBuild`
-
-Or when using gradle:
-
-`./gradlew -Pprod bootWar jibDockerBuild -x test`
-
-### Pushing to your Docker registry (Docker Hub)
-
-Tag locally your image:
-
-`docker tag application username/application`
-
-Push your image to Docker Hub:
-
-`docker push username/application`
-
-### Generating your Rancher configuration
-
-Create rancher folder on root folder
-
-`mkdir rancher`
-
-Go to it and generate yout rancher configuration
-
-```
-cd rancher
-jhipster rancher-compose
-```
-
-Follow instruction and answer all questions.
-You will then have to new files `docker-compose.yml`and `rancher-compose.yml`.
-
-### Use local configuration for Config server
-
-On same folder as your rancher configuration you should have a directory with name `registry-config-sidekick` when using a registry.
-
-This sidekick allow you to use a local configuration file (located inside the directory) for the deployed config server instance compare to GIT method.
-
-To use it, you need to build this image and deploy it to the same registry as your previous built image.
-
-```
-cd registry-config-sidekick
-docker build -t username/registry-config-sidekick .
-docker push username/registry-config-sidekick
-```
-
-Configuration files will be included into this image and then the Config Server instance will be able to map those files and use them.
-
-## Deploying to your Rancher server
-
-Once all your images have been pushed into your registry, you will be able to create your Stack on your Rancher server and use both your docker-compose configuration and the rancher-compose one.
-
-By default rancher-compose deploy only one instance of each service for performance purpose.
-
-## More information
-
-* [Rancher documentation](http://docs.rancher.com/)
diff --git a/pages/running_tests.md b/pages/running_tests.md
index f3c1549..44193b2 100644
--- a/pages/running_tests.md
+++ b/pages/running_tests.md
@@ -6,7 +6,7 @@ redirect_from:
- /running_tests.html
sitemap:
priority: 0.7
- lastmod: 2015-04-20T00:00:00-00:00
+ lastmod: 2019-04-19T00:00:00-00:00
---
# <i class="fa fa-shield"></i> Running tests
@@ -20,14 +20,14 @@ JHipster comes with an extensive set of tests, and each generated application ha
Optionally, JHipster can also generate:
-* Performance tests with [Gatling.](http://gatling.io/)
-* Behaviour-driven tests with [Cucumber](https://cucumber.io/)
-* Angular/React integration tests with [Protractor](https://angular.github.io/protractor/#/).
+* Performance tests with [Gatling](http://gatling.io/).
+* Behaviour-driven tests with [Cucumber](https://cucumber.io/).
+* Angular/React/Vue integration tests with [Protractor](https://angular.github.io/protractor/#/).
We have two goals in generating those tests:
* Help every JHipster user to follow best practices, as we believe tests are a very useful part of every application
-* Validate that what is being generated is correct. So even if you don't plan to use those tests at all, doing just a `./mvnw clean test` and `npm test` after generating your application is a good way of knowing if everything is fine. You are then free to ignore those tests if you think that testing is a waste of time!
+* Validate that what is being generated is correct. So even if you don't plan to use those tests at all, doing just a `./mvnw clean verify` and `npm test` after generating your application is a good way of knowing if everything is fine. You are then free to ignore those tests if you think that testing is a waste of time!
All those tests will be generated in the standard Maven `src/test` folder.
@@ -46,7 +46,7 @@ This Spring test context will use a specific test database to execute its tests:
* If you use Elasticsearch, JHipster will launch an in-memory Elasticsearch instance using Spring Data Elasticsearch.
* If you use Couchbase, JHipster will launch a containerized version of Couchbase with Docker using [Couchbase TestContainers](https://github.com/differentway/testcontainers-java-module-couchbase).
-Those tests can be run directly in your IDE, by right-clicking on each test class, or by running `./mvnw clean test` (or `./gradlew test` if you run Gradle).
+Those tests can be run directly in your IDE, by right-clicking on each test class, or by running `./mvnw clean verify` (or `./gradlew test integrationTest` if you run Gradle).
**Limitations:** if the generated entities have validation enabled, JHipster is not enable to generate the correct values depending on the validation rules. Those rules can be so complex, for example if a Regex pattern is used, that this just not possible. In this case, the tests will fail validation, and the default values used in the test will need to changed manually, so they can pass the validation rules.
@@ -77,8 +77,6 @@ Performance tests are done with [Gatling](http://gatling.io/), and are located i
To run Gatling tests, you must first install Gatling: please go to the [Gatling download page](https://gatling.io/download/) and follow the instructions there. Please note we do not allow to run Gatling from Maven or Gradle, as it causes some classpath issues with other plugins (mainly because of the use of Scala).
-**NOTE** We currently support Gatling 2.x only. You can download the latest 2.x version directly from [maven central](https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/2.3.1/gatling-charts-highcharts-bundle-2.3.1-bundle.zip).
-
**Warning!** At the moment, those tests do not take into account the validation rules you may have enforced on your entities. Also tests for creating entities that have a required relationship with another entity will fail out of the box. You will anyway need to change those tests, according to your business rules, so here are few tips to improve your tests:
* On your running application, go to the `Administration > Logs` screen, and put `org.springframework` in `debug` mode. You will see the validation errors, for example.
diff --git a/pages/security.md b/pages/security.md
index 418752c..ad5efa6 100644
--- a/pages/security.md
+++ b/pages/security.md
@@ -92,21 +92,21 @@ If you want to use Keycloak with Docker Compose, be sure to read our [Docker Com
The security settings in `src/main/resources/application.yml` are configured for this image.
```yaml
-security:
- basic:
- enabled: false
+spring:
+ ...
+ security:
oauth2:
- client:
- access-token-uri: http://localhost:9080/auth/realms/jhipster/protocol/openid-connect/token
- user-authorization-uri: http://localhost:9080/auth/realms/jhipster/protocol/openid-connect/auth
+ client:
+ provider:
+ oidc:
+ issuer-uri: http://localhost:9080/auth/realms/jhipster
+ registration:
+ oidc:
client-id: web_app
client-secret: web_app
- scope: openid profile email
- resource:
- user-info-uri: http://localhost:9080/auth/realms/jhipster/protocol/openid-connect/userinfo
```
-As by default Keycloak uses an embedded H2 database, you will lose the created users if you restart your Docker container. To keep your data, please read the [Keycloak Docker documentation](https://hub.docker.com/r/jboss/keycloak/). One solution, with keeping the H2 database, is to do the following:
+Keycloak uses an embedded H2 database by default, so you will lose the created users if you restart your Docker container. To keep your data, please read the [Keycloak Docker documentation](https://hub.docker.com/r/jboss/keycloak/). One solution, with keeping the H2 database, is to do the following:
- Add a volume that will be persisted: `./keycloak-db:/opt/jboss/keycloak/standalone/data`
- Change the migration strategy from `OVERWRITE_EXISTING`, to `IGNORE_EXISTING` (in the command section)
@@ -121,22 +121,22 @@ Modify `src/main/resources/application.yml` to use your Okta settings. Hint: rep
```yaml
security:
- basic:
- enabled: false
- oauth2:
- client:
- access-token-uri: https://{yourOktaDomain}/oauth2/default/v1/token
- user-authorization-uri: https://{yourOktaDomain}/oauth2/default/v1/authorize
- client-id: {client-id}
- client-secret: {client-secret}
- scope: openid profile email
- resource:
- user-info-uri: https://{yourOktaDomain}/oauth2/default/v1/userinfo
+ oauth2:
+ client:
+ provider:
+ oidc:
+ issuer-uri: https://{yourOktaDomain}.com/oauth2/default
+ registration:
+ oidc:
+ client-id: {client-id}
+ client-secret: {client-secret}
```
-Create an OIDC App in Okta to get a `{client-id}` and `{client-secret}`. To do this, log in to your Okta Developer account and navigate to **Applications** > **Add Application**. Click **Web** and click the **Next** button. Give the app a name you’ll remember, and specify `http://localhost:8080` as a Base URI and `http://localhost:8080/login` as a Login Redirect URI. Click **Done** and copy the client ID and secret into your `application.yml` file. You'll need to edit your app and add `http://localhost:8080` as a Logout Redirect URI if you want logout to work.
+Create an OIDC App in Okta to get a `{client-id}` and `{client-secret}`. To do this, log in to your Okta Developer account and navigate to **Applications** > **Add Application**. Click **Web** and click the **Next** button. Give the app a name you’ll remember, and specify `http://localhost:8080/login/oauth2/code/oidc` as a Login redirect URI. Click **Done**, then edit your app to add `http://localhost:8080` as a Logout redirect URI. Copy the client ID and secret into your `application.yml` file.
+
+Create a `ROLE_ADMIN` and `ROLE_USER` group (**Users** > **Groups** > **Add Group**) and add users to them. You can use the account you signed up with, or create a new user (**Users** > **Add Person**). Navigate to **API** > **Authorization Servers**, and click on the `default` server. Click the **Claims** tab and **Add Claim**. Name it `groups`, and include it in the ID Token. Set the value type to `Groups` and set the filter to be a Regex of `.*`. Click **Create**.
-Create a `ROLE_ADMIN` and `ROLE_USER` group (**Users** > **Groups** > **Add Group**) and add users to them. You can use the account you signed up with, or create a new user (**Users** > **Add Person**). Navigate to **API** > **Authorization Servers**, click the **Authorization Servers** tab and edit the default one. Click the **Claims** tab and **Add Claim**. Name it "groups", and include it in the ID Token. Set the value type to "Groups" and set the filter to be a Regex of `.*`.
+<img src="{{ site.url }}/images/security-add-claim.png" alt="Add Claim" width="600" style="margin: 10px">
**NOTE:** If you want to use Okta all the time (instead of Keycloak), modify JHipster’s Protractor tests to use this account when running. Do this by changing the credentials in `src/test/javascript/e2e/account/account.spec.ts` and `src/test/javascript/e2e/admin/administration.spec.ts`.
@@ -145,37 +145,32 @@ After making these changes, you should be good to go! If you have any issues, pl
You can also use environment variables to override the defaults. For example:
```bash
-export SECURITY_OAUTH2_CLIENT_ACCESS_TOKEN_URI="https://{yourOktaDomain}/oauth2/default/v1/token"
-export SECURITY_OAUTH2_CLIENT_USER_AUTHORIZATION_URI="https://{yourOktaDomain}/oauth2/default/v1/authorize"
-export SECURITY_OAUTH2_RESOURCE_USER_INFO_URI="https://{yourOktaDomain}/oauth2/default/v1/userinfo"
-export SECURITY_OAUTH2_CLIENT_CLIENT_ID="{client-id}"
-export SECURITY_OAUTH2_CLIENT_CLIENT_SECRET="{client-secret}"
+export SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI="https://{yourOktaDomain}/oauth2/default"
+export SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID="{client-id}"
+export SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET="{client-secret}"
```
You can put this in an `~/.okta.env` file and run `source ~/.okta.env` to override Keycloak with Okta.
-You can use then set these properties when you deploy to Heroku:
+You can then set these properties when you deploy to Heroku:
```bash
heroku config:set \
- SECURITY_OAUTH2_CLIENT_ACCESS_TOKEN_URI="$SECURITY_OAUTH2_CLIENT_ACCESS_TOKEN_URI" \
- SECURITY_OAUTH2_CLIENT_USER_AUTHORIZATION_URI="$SECURITY_OAUTH2_CLIENT_USER_AUTHORIZATION_URI" \
- SECURITY_OAUTH2_RESOURCE_USER_INFO_URI="$SECURITY_OAUTH2_RESOURCE_USER_INFO_URI" \
- SECURITY_OAUTH2_CLIENT_CLIENT_ID="$SECURITY_OAUTH2_CLIENT_CLIENT_ID" \
- SECURITY_OAUTH2_CLIENT_CLIENT_SECRET="$SECURITY_OAUTH2_CLIENT_CLIENT_SECRET"
+ SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI="$SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI" \
+ SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID="$SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID" \
+ SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET="$SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET"
```
For Cloud Foundry, you can use something like the following, where `$appName` is the name of your app.
```bash
-cf set-env $appName SECURITY_OAUTH2_CLIENT_ACCESS_TOKEN_URI "$SECURITY_OAUTH2_CLIENT_ACCESS_TOKEN_URI"
-cf set-env $appName SECURITY_OAUTH2_CLIENT_USER_AUTHORIZATION_URI "$SECURITY_OAUTH2_CLIENT_USER_AUTHORIZATION_URI"
-cf set-env $appName SECURITY_OAUTH2_RESOURCE_USER_INFO_URI "$SECURITY_OAUTH2_RESOURCE_USER_INFO_URI"
-cf set-env $appName SECURITY_OAUTH2_CLIENT_CLIENT_ID "$SECURITY_OAUTH2_CLIENT_CLIENT_ID"
-cf set-env $appName SECURITY_OAUTH2_CLIENT_CLIENT_SECRET "$SECURITY_OAUTH2_CLIENT_CLIENT_SECRET"
+export appName={your-app}
+cf set-env $appName SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI "$SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI"
+cf set-env $appName SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID "$SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID"
+cf set-env $appName SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET "$SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET"
```
-See [Use OpenID Connect Support with JHipster](https://developer.okta.com/blog/2017/10/20/oidc-with-jhipster) to learn more about JHipster and OIDC with Okta.
+See [Use OpenID Connect Support with JHipster](https://developer.okta.com/blog/2017/10/20/oidc-with-jhipster) to learn more about JHipster and OIDC with Okta. If you're using JHipster 6, see [Better, Faster, Lighter Java with Java 12 and JHipster 6](https://developer.okta.com/blog/2019/04/04/java-11-java-12-jhipster-oidc).
## <a name="https"></a> HTTPS
diff --git a/pages/separating-front-end-and-api.md b/pages/separating-front-end-and-api.md
index eb2a7d2..4aeca34 100644
--- a/pages/separating-front-end-and-api.md
+++ b/pages/separating-front-end-and-api.md
@@ -4,7 +4,7 @@ title: Separating the front-end and the API server
permalink: /separating-front-end-and-api/
sitemap:
priority: 0.7
- lastmod: 2017-12-28T00:00:00-00:00
+ lastmod: 2019-01-29T00:00:00-00:00
---
# <i class="fa fa-unlink"></i> Separating the front-end and the API server
@@ -47,6 +47,7 @@ Once the front-end and back-end have been separated, the issue will be how to ha
- All API calls will use a `/api` prefix. If you are using Angular, there is also a specific `SERVER_API_URL` constant, defined in the `webpack.common.js` configuration, that can enrich this prefix. For example, you can use `"http://api.jhipster.tech:8081/"` as a back-end API server (If you do this, please read our documentation on CORS below).
- Calls to `/` serve static assets (from the front-end), which should not be cached by the browser.
- Calls to `/app` (which contains the client-side application) and to `/content` (which contains the static content, like images and CSS) should be cached in production, as those assets are hashed.
+- Calls to a non-existant route should forward the request to `index.html`. This is normally handled in the backend through `ClientForwardController`. When deploying the client separately, this needs to be configured. See the [Angular](https://angular.io/guide/deployment#server-configuration) or [React](https://facebook.github.io/create-react-app/docs/deployment) documentation for several examples.
# Using BrowserSync
@@ -77,7 +78,7 @@ Create a `src/main/docker/nginx.yml` Docker Compose file:
version: '2'
services:
nginx:
- image: nginx:1.13-alpine
+ image: nginx:1.15-alpine
volumes:
- ./../../../target/www:/usr/share/nginx/html
- ./nginx/site.conf:/etc/nginx/conf.d/default.conf
@@ -94,9 +95,8 @@ It also reads a `./nginx/site.conf` file: this is a NGinx-specific configuration
server_name localhost;
error_log /var/log/nginx/error.log;
- location / {
- root /usr/share/nginx/html;
- }
+ root /usr/share/nginx/html;
+
location /api {
proxy_pass http://api.jhipster.tech:8081/api;
}
@@ -112,6 +112,9 @@ It also reads a `./nginx/site.conf` file: this is a NGinx-specific configuration
location /swagger-resources {
proxy_pass http://api.jhipster.tech:8081/swagger-resources;
}
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
}
This configuration means that:
@@ -119,5 +122,6 @@ This configuration means that:
- NGinx will run on port `80`
- It will read the static assets in folder `/usr/share/nginx/html`, and
- It will act as a proxy from `/api` to `http://api.jhipster.tech:8081/api`
+- Any unhandled requests will forward to `index.html`
This configuration will require some tuning depending on your specific needs, but should be a good enough starting point for most applications.
diff --git a/pages/team.md b/pages/team.md
index 877dc61..dd11251 100644
--- a/pages/team.md
+++ b/pages/team.md
@@ -37,6 +37,16 @@ If you want to join the team, or just see how we work, our community rules are a
</div>
</div>
</div>
+ <div class="col-xs-3 team-member">
+ <div class="thumbnail no-margin-bottom">
+ <img src="https://avatars.githubusercontent.com/u/9156882?v=3" class="img-responsive">
+ <div class="caption">
+ <h3>Pascal Grimaud</h3>
+ <p>Project co-lead</p>
+ <p><a href="https://twitter.com/pascalgrimaud"><i>@pascalgrimaud</i></a></p>
+ </div>
+ </div>
+ </div>
</div>
## Board of developers
@@ -122,15 +132,6 @@ If you want to join the team, or just see how we work, our community rules are a
</div>
</div>
</div>
- <div class="col-xs-3 team-member">
- <div class="thumbnail no-margin-bottom">
- <img src="https://avatars.githubusercontent.com/u/9156882?v=3" class="img-responsive">
- <div class="caption">
- <h3>Pascal Grimaud</h3>
- <p><a href="https://twitter.com/pascalgrimaud"><i>@pascalgrimaud</i></a></p>
- </div>
- </div>
- </div>
<div class="col-xs-3 team-member">
<div class="thumbnail no-margin-bottom">
<img src="https://avatars.githubusercontent.com/u/203401?v=3" class="img-responsive">
@@ -176,6 +177,15 @@ If you want to join the team, or just see how we work, our community rules are a
</div>
</div>
</div>
+ <div class="col-xs-3 team-member">
+ <div class="thumbnail no-margin-bottom">
+ <img src="https://avatars.githubusercontent.com/u/15997681?v=3" class="img-responsive">
+ <div class="caption">
+ <h3>Vishal Mahajan</h3>
+ <p><a href="https://twitter.com/vishal423"><i>@vishal423</i></a></p>
+ </div>
+ </div>
+ </div>
<div class="col-xs-3 team-member">
<div class="thumbnail no-margin-bottom">
<img src="https://avatars.githubusercontent.com/u/1577727?v=3" class="img-responsive">
@@ -266,6 +276,24 @@ If you want to join the team, or just see how we work, our community rules are a
</div>
</div>
</div>
+ <div class="col-xs-3 team-member">
+ <div class="thumbnail no-margin-bottom">
+ <img src="https://avatars.githubusercontent.com/u/5289123?v=3" class="img-responsive">
+ <div class="caption">
+ <h3>Pm Verma</h3>
+ <p><a href="https://twitter.com/pm_verma"><i>@pm_verma</i></a></p>
+ </div>
+ </div>
+ </div>
+ <div class="col-xs-3 team-member">
+ <div class="thumbnail no-margin-bottom">
+ <img src="https://avatars.githubusercontent.com/u/37835668?v=3" class="img-responsive">
+ <div class="caption">
+ <h3>Anthony Viard</h3>
+ <p><a href="https://twitter.com/avdev4j"><i>@avdev4j</i></a></p>
+ </div>
+ </div>
+ </div>
<div class="col-xs-3 team-member">
<div class="thumbnail no-margin-bottom">
<img src="https://avatars.githubusercontent.com/u/2188969?v=3" class="img-responsive">
@@ -360,7 +388,7 @@ The updated spreadsheet can be found [here](https://docs.google.com/spreadsheets
We do most of our work on [the project's GitHub page](https://github.com/jhipster/generator-jhipster).
-Internal team discussions happen in the following channels :
+Internal team discussions happen in the following channels:
- The [jhipster-dev mailing list](https://groups.google.com/forum/?hl=en#!forum/jhipster-dev)
- The [jhipster-dev-team Gitter chat](https://gitter.im/jhipster/jhipster-dev-team)
diff --git a/pages/tech_stack.md b/pages/tech_stack.md
index 89e45ec..582f217 100644
--- a/pages/tech_stack.md
+++ b/pages/tech_stack.md
@@ -15,7 +15,7 @@ sitemap:
Single Web page application:
-* [Angular](https://angular.io/) or [React](https://reactjs.org/)
+* [Angular](https://angular.io/) or [React](https://reactjs.org/) or [Vue](https://vuejs.org/)
* Responsive Web Design with [Twitter Bootstrap](http://getbootstrap.com/)
* [HTML5 Boilerplate](http://html5boilerplate.com/)
* Compatible with modern browsers (Chrome, FireFox, Microsoft Edge...)
diff --git a/pages/tips.md b/pages/tips.md
index 35e1766..f9bfe57 100644
--- a/pages/tips.md
+++ b/pages/tips.md
@@ -6,7 +6,7 @@ redirect_from:
- /tips.html
sitemap:
priority: 0.7
- lastmod: 2018-03-19T08:40:00-00:00
+ lastmod: 2019-01-29T08:40:00-00:00
---
# <i class="fa fa-cogs"></i> Tips'n tricks
@@ -17,7 +17,6 @@ _If you want to contribute, don't hesitate to send us a Pull Request with your t
1. [Create a static Swagger API documentation]({{ site.url }}/tips/008_tips_static_swagger_docs.html)
1. [Using Bootswatch themes]({{ site.url }}/tips/009_tips_using_bootswatch_themes.html)
-1. [Configuring HTML 5 Mode]({{ site.url }}/tips/010_tip_configuring_html_5_mode.html)
1. [Configuring Email with - Gmail and more]({{ site.url }}/tips/011_tip_configuring_email_in_jhipster.html)
1. [Speed up the generator-jhipster]({{ site.url }}/tips/013_tip_speed_up_generator.html)
1. [Local SMTP Server]({{ site.url }}/tips/015_tip_local_smtp_server.html)
@@ -29,4 +28,5 @@ _If you want to contribute, don't hesitate to send us a Pull Request with your t
1. [Use QueryDSL]({{ site.url }}/tips/003_tip_add_querydsl_support.html)
1. [Protecting Kibana with Apache (Basic Authentication)]({{ site.url }}/tips/023_tip_protecting_kibana_with_apache_basic_authent.html)
1. [Enabling Social Login with OAuth2]({{ site.url }}/tips/024_tip_enabling_social_login_with_oauth2.html)
-1. [How to create a new Authority]({{ site.url }}/tips/025_tip_create_new_authority.html)
\ No newline at end of file
+1. [How to create a new Authority]({{ site.url }}/tips/025_tip_create_new_authority.html)
+1. [Issue of @OneToOne with @MapsId and how to avoid it]({{ site.url }}/tips/026_tip_issue_of_onetoone_with_mapsid_how_to_avoid_it.html)
diff --git a/pages/tls.md b/pages/tls.md
index 2fa844b..d39e934 100644
--- a/pages/tls.md
+++ b/pages/tls.md
@@ -11,7 +11,7 @@ sitemap:
## Introduction
-This page is for using TLS and HTTP/2 in development (mainly for testing purposes). For production configuration, please read the [security section in the production documentation]({{ site.url }}/production/#security) .
+This page is for using TLS and HTTP/2 in development (mainly for testing purposes). For production configuration, please read the [security section in the production documentation]({{ site.url }}/production/#security).
TLS is the protocol used when having an `https://` URL, and it is required in order to use HTTP/2 on modern browsers.
@@ -33,7 +33,7 @@ The application will be available on `https://localhost:8080/`.
As the certificate is self-signed, your browser will issue a warning, and you will need to ignore it (or import it) in order to access the application.
-## Using TLS and HTTP/2 with Angular or React
+## Using TLS and HTTP/2 with Angular or React or Vue.js
Instead of using `npm start` in order to run the front-end (with Webpack and BrowserSync), just run `npm run start-tls`, and it will connect to the back-end running on `https://localhost:8080/`.
diff --git a/pages/traefik.md b/pages/traefik.md
index c1c5659..795c25c 100644
--- a/pages/traefik.md
+++ b/pages/traefik.md
@@ -4,7 +4,7 @@ title: Traefik
permalink: /traefik/
sitemap:
priority: 0.7
- lastmod: 2017-09-27T00:00:00-00:00
+ lastmod: 2019-01-29T00:00:00-00:00
---
# <i class="fa fa-exchange"></i> Traefik
@@ -41,8 +41,8 @@ As a result, Traefik can be used as an edge service, which allows to scale JHips
This configuration works out-of-the-box with JHipster: the only issue is that client-side applications use an absolute URL, so for example, for "microservice1":
-- The default URL is "/microservice1", which goes only through Traefik (this is the "default configuration" above).
-- The "/gateway/microservice1" URL would use the "gateway" application configured in Traefik, which would then use Zuul to reach the "microservice1" application.
+- The default URL is "/services/microservice1", which goes only through Traefik (this is the "default configuration" above).
+- The "/services/gateway/microservice1" URL would use the "gateway" application configured in Traefik, which would then use Zuul to reach the "microservice1" application.
## Getting started
@@ -54,7 +54,11 @@ This will generate a `traefik.yml` configuration for running Traefik in Docker,
This configuration file is set up so that:
-- Traefik runs on port `80`, so if you have an application called `gateway`, you can reach it by going to [http://localhost/gateway/](http://localhost/gateway/).
+- Traefik runs on port `80`, so if you have an application called `gateway`, you can reach it by going to [http://localhost/services/gateway/](http://localhost/gateway/).
- The Traefik administration UI is available on port `28080`, so you can visit it at [http://localhost:28080](http://localhost:28080).
As Traefik is using Consul, it will also be useful to check the Consul administration UI, which is available on port `8500`: [http://localhost:8500](http://localhost:8500).
+
+#### Configure your Base HREF
+
+Before building the gateway's Docker image, you will need to configure the `baseHref` value in `webpack.common.js` to match the gateway base name. For example, if the gateway base name is `gateway`, the `baseHref` should be `/services/gateway/`.
\ No newline at end of file
diff --git a/pages/upgrading_an_app.md b/pages/upgrading_an_app.md
index 784ff13..1da53af 100644
--- a/pages/upgrading_an_app.md
+++ b/pages/upgrading_an_app.md
@@ -83,7 +83,7 @@ Congratulations, your application is now upgraded with the latest version of JHi
On the first execution of the JHipster upgrade sub-generator, in order to avoid erasing all your changes, some additional steps are run:
-1. A `jhipster_upgrade` branch is created orphan (it has no parent)
+1. A `jhipster_upgrade` branch is created orphan (it has no parent).
2. The whole application is generated (using your current JHipster version).
3. A block-merge commit is made on the `master` branch: no alteration is made on your codebase on the `master` branch; this is just a practical way to record in Git that the HEAD of `master` is up-to-date with the current JHipster version.
diff --git a/pages/using-uaa.md b/pages/using-uaa.md
index f300a6a..80b2c8c 100644
--- a/pages/using-uaa.md
+++ b/pages/using-uaa.md
@@ -136,7 +136,7 @@ For the machine calls, the machine has to authenticate as a UAA using client cre
The general flow for refreshing access tokens happens on the gateway and is as follows:
- Authentication is done via `AuthResource` calling `OAuth2AuthenticationService`'s authenticate which will set Cookies.
-- For each request, the `RefreshTokenFilter` (installed by `RefreshTokenFilterConfigurer`) checks whether the access token is expired and whether it has a valid refresh token
+- For each request, the `RefreshTokenFilter` (installed by `RefreshTokenFilterConfigurer`) checks whether the access token is expired and whether it has a valid refresh token.
- If so, then it triggers the refresh process via `OAuth2AuthenticationService` refreshToken.
- This uses the `OAuth2TokenEndpointClient` interface to send a refresh token grant to the OAuth2 server of choice, in our case UAA (via `UaaTokenEndpointClient`).
- The result of the refresh grant is then used downstream as new cookies and set upstream (to the browser) as new cookies.
@@ -175,7 +175,7 @@ This chapter covers how to easily get started with this.
When one service wants to request data from another, finally all these four players come into play. So it is important, to briefly know what each of them is responsible for:
-* Eureka: this is where services (un-)register, so you can ask "foo-service" and get a set of IPs of instances of the foo-service, registered in Eureka
+* Eureka: this is where services (un-)register, so you can ask "foo-service" and get a set of IPs of instances of the foo-service, registered in Eureka.
* Ribbon: when someone asked for "foo-service" and already retrieved a set of IPs, Ribbon does the load balancing over these IPs.
So to sum up, when we got a URL like "http://uaa/oauth/token/" with 2 instances of JHipster UAA server running on 10.10.10.1:9999 and 10.10.10.2:9999, we may use Eureka and Ribbon to quickly transform that URL either to "http://10.10.10.1:9999/oauth/token" or "http://10.10.10.2:9999/oauth/token" using a Round Robin algorithm.
@@ -232,14 +232,12 @@ interface OtherServiceClient {
notation for the service name, as
``` java
-
@AuthorizedFeignClient("other-service")
```
or
``` java
-
@AuthorizedFeignClient(value = "other-service")
```
@@ -258,7 +256,6 @@ To test components, which are using feign clients inside is possible using `@Moc
Here is an example, testing `SomeService` works as expected, with mocked values for the client:
``` java
-
@RunWith(SpringRunner.class)
@SpringBootTest(App.class)
public class SomeServiceTest {
@@ -295,18 +292,16 @@ To use this feature, two things have to be done:
#### 1. Enabling security in the mock Spring MVC context and inject the mock util
``` java
-
- @Inject
- private OAuth2TokenMockUtil tokenUtil;
-
- @PostConstruct
- public void setup() {
- this.restMockMvc = MockMvcBuilders
- .webAppContextSetup(context)
- .apply(springSecurity())
- .build();
-
- }
+@Inject
+private OAuth2TokenMockUtil tokenUtil;
+
+@PostConstruct
+public void setup() {
+ this.restMockMvc = MockMvcBuilders
+ .webAppContextSetup(context)
+ .apply(springSecurity())
+ .build();
+}
```
***In this test no single instance of the controller has to be mocked, but the
@@ -323,7 +318,6 @@ The util offers a method "oaut2authentication", which is usable to MockMvc "with
Here is an example:
``` java
-
@Test
public void testInsufficientRoles() {
restMockMvc.peform(
diff --git a/pages/using-vue.md b/pages/using-vue.md
new file mode 100644
index 0000000..85e90fa
--- /dev/null
+++ b/pages/using-vue.md
@@ -0,0 +1,142 @@
+---
+layout: default
+title: Using Vue
+permalink: /using-vue/
+sitemap:
+ priority: 0.7
+ lastmod: 2019-03-27T23:41:00-00:00
+---
+
+# <i class="fa fa-html5"></i> Using Vue
+This section refers to the JavaScript library **Vue.js**.
+
+## Project Structure
+
+The JHipster client code can be found under `src/main/webapp`.
+
+Please read this guide first if you have any question on our application structure, file names, TypeScript conventions...
+
+Note that we use TypeScript in our generated Vue application following [vue-class-component](https://github.com/vuejs/vue-class-component) style and guidelines.
+
+For Vue routes we follow a dash cased naming convention so that the URLs are clean and consistent.
+When you generate an entity the route names, route URLs and REST API endpoint URLs are generated according to this convention, also entity names are automatically pluralized where required.
+
+Here is the main project structure:
+
+```
+webapp
+├── app - Your application
+│ ├── account - Account related components
+│ ├── admin - Administration related components
+│ ├── core - Main components such as Home, navbar, ...
+│ ├── entities - Generated entities
+│ ├── locale - I18n / translation related components
+│ ├── router - Routing configuration
+│ ├── shared - Shared elements such as your config, models and util classes
+│ ├── app.component.ts - The application main class
+│ ├── app.vue - The application main SFC component
+│ ├── constants.ts - Global application constants
+│ ├── main.ts - Index script, application entrypoint
+│ └── shims-vue.d.ts
+├── content - Contains your static files such as images and fonts
+├── i18n - Translation files
+├── swagger-ui - Swagger UI front-end
+├── 404.html - 404 page
+├── favicon.ico - Fav icon
+├── index.html - Index page
+├── manifest.webapp - Application manifest
+└── robots.txt - Configuration for bots and Web crawlers
+```
+
+Using the [entity sub-generator]({{ site.url }}/creating-an-entity/) to create a new entity called `Foo` generates the following front-end files under `src/main/webapp`:
+
+```
+webapp
+├── app
+│ ├── entities
+│ │ └── foo - CRUD front-end for the Foo entity
+│ │ ├── foo-details.vue - Details SFC component
+│ │ ├── foo-detail.component.ts - Details page component
+│ │ ├── foo-update.vue - Creation / Update SFC component
+│ │ ├── foo-update.component.ts - Creation / Update component class
+│ │ ├── foo.vue - Entity main SFC component
+│ │ ├── foo.component.ts - Entity main component class
+│ │ └── foo.service.ts - Foo entity service
+│ ├── router
+│ │ └── index.ts - Entity main routes configuration
+│ └── shared
+│ └── model
+│ └── foo.model.ts - Entity model class
+└── i18n - Translation files
+ ├── en - English translations
+ │ ├── foo.json - English translation of Foo name, fields, ...
+ └── fr - French translations
+ └── foo.json - French translation of Foo name, fields, ...
+```
+
+Please note that the default language translations would be based on what you have choosen during app generation. 'en' and 'fr' are shown here only for demonstration.
+
+## Store using VuexStore
+
+Application will use a store [VuexStore](https://vuex.vuejs.org/guide/state.html) to maintain state within the application.
+
+This store is configured at startup in `app/config/config.ts:initVueXStore`. Please refer to Vuex documentation to add new states or mutations.
+
+The application will use the store to maintain:
+
+* User authentication information
+* Language and translation
+* Notification and alert information
+* Active profiles data
+
+## Authorizations
+
+JHipster uses the [Vue router](https://router.vuejs.org/) to organize the differents parts of your application.
+
+When it comes to routes that require authentication, the meta `authorities` is used on desired route. This component will simply prevent any unauthenticated or unauthorized user from accessing a route.
+
+Here is an example of PrivateRoute usage:
+
+``` typescript
+const Routes = () => [{
+ path: '/public',
+ name: 'public',
+ component: Public
+ },
+ {
+ path: '/private',
+ name: 'Private',
+ component: Private,
+ meta: { authorities: ['ROLE_USER'] }
+ }];
+```
+
+As you can see, unauthenticated user can access `/public` but accessing `/private` requires at least to be logged in.
+
+Please note that the interceptor uses the `$store.getters.authenticated` store value to know if the user is authenticated.
+
+## Validation system
+
+In order to perform form validation, we use [Vuelidate](https://vuelidate.netlify.com/) library. Besides adding validation constraints, several filters are already furnished and enable a full validation on form. Custom validation can obviously be added as such:
+
+```typescript
+import { required } from 'vuelidate/lib/validators';
+
+const mustBeCool = (value) => value.indexOf('cool') >= 0;
+const validations = {
+ foo: {
+ required,
+ mustBeCool
+ }
+};
+@Component({
+ validations
+})
+export default class FooComponent extends Vue {
+ foo: string = null;
+}
+```
+
+## Bootswatch theme
+
+Theming Bootstrap can be done directly using [Bootswatch](https://bootswatch.com) themes. We now provide questions during generation to pick one of the many themes served by Bootswatch.
diff --git a/pages/using_oracle.md b/pages/using_oracle.md
index 8116ceb..e06123c 100644
--- a/pages/using_oracle.md
+++ b/pages/using_oracle.md
@@ -22,7 +22,8 @@ Your Maven or Gradle configuration generated by JHipster already use the Oracle
When using Oracle with JHipster, the following limitations will be applicable
- Entity names cannot be more than 26 characters, this is due to Oracle's 30 character limitation for object names, and we reserve 4 characters to generate primary key sequence for the generated tables.
-- Entity field names cannot be more than 30 characters
-- When doing relationships, foreign key names cannot be more than 30 characters, so they will be truncated if they are too long
+- Entity field names cannot be more than 30 characters.
+- When doing relationships, foreign key names cannot be more than 30 characters, so they will be truncated if they are too long.
- When doing many-to-many relationships, the join table name will follow the JPA specification (in the form "firstTable_secondTable"): if it is more than 30 characters long, it will be truncated.
- Oracle reserved keywords cannot be used as Entity names or Field names.
+- We do not provide an Oracle database Docker image, like we do for other databases, as Oracle does not allow to have public Docker images.
diff --git a/sitemap-http.xml b/sitemap-http.xml
index 71ff110..723a767 100644
--- a/sitemap-http.xml
+++ b/sitemap-http.xml
@@ -25,4 +25,8 @@ layout:
</url>
{% endif %}
{% endfor %}
+ <url>
+ <loc>http://www.jhipster.tech/cn/</loc>
+ <xhtml:link rel="alternate" hreflang="zh-cn" href="https://www.jhipster.tech/cn/" />
+ </url>
</urlset>
diff --git a/sitemap.xml b/sitemap.xml
index 66dd255..7c18da4 100755
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,7 +2,7 @@
layout:
---
<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
{% for post in site.posts %}
<url>
<loc>https://www.jhipster.tech{{ post.url }}</loc>{% if post.lastmod != null %}
@@ -25,4 +25,8 @@ layout:
</url>
{% endif %}
{% endfor %}
+ <url>
+ <loc>https://www.jhipster.tech/cn/</loc>
+ <xhtml:link rel="alternate" hreflang="zh-cn" href="https://www.jhipster.tech/cn/" />
+ </url>
</urlset>
diff --git a/tips/010_tip_configuring_html_5_mode.md b/tips/010_tip_configuring_html_5_mode.md
index b97107c..fb98cfb 100644
--- a/tips/010_tip_configuring_html_5_mode.md
+++ b/tips/010_tip_configuring_html_5_mode.md
@@ -10,6 +10,8 @@ lastmod: 2016-03-07T23:23:00-00:00
__Tip submitted by [@brevleq](https://github.com/brevleq) and updated by [@wmarques](https://github.com/wmarques)__
+#### HTML 5 Mode has been added to the generator since this [pull request #9098](https://github.com/jhipster/generator-jhipster/pull/9098), so you don't need to do any specific configuration anymore!
+
As you may noticed, AngularJS uses a "#" in it's urls. HTML5Mode of AngularJS removes these "#" from URL.
## Activate HTML 5 Mode
diff --git a/tips/016_tip_ldap_authentication.md b/tips/016_tip_ldap_authentication.md
index 4eb75e7..29f9194 100644
--- a/tips/016_tip_ldap_authentication.md
+++ b/tips/016_tip_ldap_authentication.md
@@ -38,7 +38,7 @@ To add an LDAP authentification to your JHipster application, follow these steps
contextSource.setPassword("hisPassword");
contextSource.afterPropertiesSet(); //needed otherwise you will have a NullPointerException in spring
- return
+ return contextSource;
}
```
diff --git a/tips/026_tip_issue_of_onetoone_with_mapsid_how_to_avoid_it.md b/tips/026_tip_issue_of_onetoone_with_mapsid_how_to_avoid_it.md
new file mode 100644
index 0000000..a55ca06
--- /dev/null
+++ b/tips/026_tip_issue_of_onetoone_with_mapsid_how_to_avoid_it.md
@@ -0,0 +1,38 @@
+---
+layout: default
+title: Issue of @OneToOne with @MapsId and how to avoid it
+sitemap:
+priority: 0.1
+lastmod: 2019-03-05T18:20:00-00:00
+---
+
+# Issue of @OneToOne with @MapsId and how to avoid it
+
+__Tip submitted by [@pmverma](https://github.com/pmverma)__
+
+Following is a known issue regarding using `@OneToOne` with `@MapsId` and some tips to avoid it.
+### The issue
+Let's say you have a `Preference` class which you have associated to `User` with `@OneToOne @MapsId`.
+```
+class Preference {
+ @OneToOne
+ @MapsId
+ private User user;
+}
+```
+Normally with JHipster,
+1. When you add a `preference` for a user, you will fill the data and select a user `user01` login from dropdown and save.
+2. If you want to edit the same `preference`, you will still have the option to select user and if you select `user02` this time then backend side will have the `user02` in `preference` object for the whole request lifetime.
+3. Again if you reload the same `preference` then you will see that `user01` is there, not `user02`.
+
+The incorrect part here is:
+ **`user02` in `preference` object in no.2 step.** The user object in `preference` should always refer to `user01`.
+
+ For more information, take a look at [https://github.com/jhipster/generator-jhipster/issues/9100](https://github.com/jhipster/generator-jhipster/issues/9100)
+
+ ### Tips to avoid it
+
+ * Hide the dropdown and set the current user in `preference` **at client side** programmatically. (Again this kind of solution is only valid for entities such as Preference, Settings, User Profile and so on, where having a dropdown to choose user does not makes sense. )
+ * Hide the dropdown and set the current user in `preference` **at server side** programmatically. (Again this kind of solution is only valid for entities such as Preference, Settings, User Profile and so on, where having a dropdown to choose user does not makes sense. JHipster have already provided a method to get current user.)
+ * Validate and load the correct association value before doing any business logic on that user. (Again this is needed only if your logic depends on `preference.gerUser()`
+ * If you are using Hibernate 5.4.2 and later then you will get correct association value but only after entity merge operation has finished. So if your business logic is excuted before entity merge operation, you have to take care of it otherwise you might get incorrect results.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment