All Projects → mraible → Jhipster4 Demo

mraible / Jhipster4 Demo

Blog demo app with JHipster 4

Programming Languages

java
68154 projects - #9 most used programming language
typescript
32286 projects

Projects that are alternatives of or similar to Jhipster4 Demo

Jhipster Microservices Example
JHipster Microservices Example using Spring Cloud, Spring Boot, Angular, Docker, and Kubernetes
Stars: ✭ 100 (-44.44%)
Mutual labels:  webpack, spring-boot, jhipster
Great Big Example Application
A full-stack example app built with JHipster, Spring Boot, Kotlin, Angular 4, ngrx, and Webpack
Stars: ✭ 899 (+399.44%)
Mutual labels:  webpack, spring-boot, jhipster
21 Points
❤️ 21-Points Health is an app you can use to monitor your health.
Stars: ✭ 244 (+35.56%)
Mutual labels:  webpack, spring-boot, jhipster
Okta Blog Archive
Okta Developer Blog
Stars: ✭ 74 (-58.89%)
Mutual labels:  spring-boot, jhipster, maven
Generator Jhipster
JHipster is a development platform to quickly generate, develop, & deploy modern web applications & microservice architectures.
Stars: ✭ 19,162 (+10545.56%)
Mutual labels:  webpack, spring-boot, jhipster
Jhipster5 Demo
Get Started with JHipster 5 Tutorial and Example
Stars: ✭ 80 (-55.56%)
Mutual labels:  webpack, spring-boot, jhipster
Ng Boot Oauth
oauth2 demo with angularjs and springboot
Stars: ✭ 99 (-45%)
Mutual labels:  webpack, spring-boot
Hsweb Payment
基于hsweb的开源聚合支付系统,多商户,多渠道,多配置.
Stars: ✭ 112 (-37.78%)
Mutual labels:  spring-boot, maven
Ibase4j
Spring,SpringBoot 2.0,SpringMVC,Mybatis,mybatis-plus,motan/dubbo分布式,Redis缓存,Shiro权限管理,Spring-Session单点登录,Quartz分布式集群调度,Restful服务,QQ/微信登录,App token登录,微信/支付宝支付;日期转换、数据类型转换、序列化、汉字转拼音、身份证号码验证、数字转人民币、发送短信、发送邮件、加密解密、图片处理、excel导入导出、FTP/SFTP/fastDFS上传下载、二维码、XML读写、高精度计算、系统配置工具类等等。
Stars: ✭ 1,548 (+760%)
Mutual labels:  spring-boot, maven
Spring Boot Quick
🌿 基于springboot的快速学习示例,整合自己遇到的开源框架,如:rabbitmq(延迟队列)、Kafka、jpa、redies、oauth2、swagger、jsp、docker、spring-batch、异常处理、日志输出、多模块开发、多环境打包、缓存cache、爬虫、jwt、GraphQL、dubbo、zookeeper和Async等等📌
Stars: ✭ 1,819 (+910.56%)
Mutual labels:  spring-boot, maven
Spring Boot Sample App
Sample app generated from my spring boot archtype on :https://github.com/Romeh/spring-boot-quickstart-archtype
Stars: ✭ 81 (-55%)
Mutual labels:  spring-boot, maven
Generator Jhipster Primeng
Generate PrimeNG components and their features
Stars: ✭ 122 (-32.22%)
Mutual labels:  spring-boot, jhipster
Spring Boot Vuejs
Example project showing how to build a Spring Boot App providing a GUI with Vue.js
Stars: ✭ 1,818 (+910%)
Mutual labels:  webpack, spring-boot
Radar Covid Backend Dp3t Server
DP^3T Radar COVID fork
Stars: ✭ 94 (-47.78%)
Mutual labels:  spring-boot, maven
Spring Cloud Build
Common build concerns, shared plugin configuration, etc. for Spring Cloud modules
Stars: ✭ 114 (-36.67%)
Mutual labels:  spring-boot, maven
Springbootangularhtml5
♨️ Spring Boot 2 + Angular 11 + HTML5 router mode + HTTP interceptor + Lazy loaded modules
Stars: ✭ 89 (-50.56%)
Mutual labels:  spring-boot, maven
Nimrod
Nimrod - 基于 Spring Boot 构建 的 Java Web 平台企业级单体应用快速开发框架,适合中小型项目的应用和开发。所采用的技术栈包括 Spring Boot、Spring、Spring Web MVC、MyBatis、Thymeleaf 等,遵守阿里巴巴 Java 开发规约,帮助养成良好的编码习惯。整体采用 RBAC ( Role-Based Access Control ,基于角色的访问控制),具有严格的权限控制模块,支持系统与模块分离开发。最后希望这个项目能够对你有所帮助。Nimrod 开发交流群:547252502(QQ 群)
Stars: ✭ 125 (-30.56%)
Mutual labels:  spring-boot, maven
Spring Boot Angular4 Boilerplate
Quickstart for spring boot + angular 4 projects
Stars: ✭ 151 (-16.11%)
Mutual labels:  webpack, spring-boot
Jhipster6 Demo
JHipster 6 Demo! 🎉
Stars: ✭ 150 (-16.67%)
Mutual labels:  spring-boot, jhipster
Generator Jhipster React
DEPRECATED: feature moved to main generator
Stars: ✭ 155 (-13.89%)
Mutual labels:  spring-boot, jhipster

= Get Started with JHipster 4 :author: Matt Raible ✉️ [email protected] :revnumber: 1.2 :revdate: {docdate} :subject: JHipster :keywords: JHipster, Angular, Spring Boot, Bootstrap 4 :icons: font :lang: en :language: javadocript :sourcedir: . ifndef::env-github[] :icons: font endif::[] ifdef::env-github,env-browser[] :toc: preamble :toclevels: 2 endif::[] ifdef::env-github[] :status: :outfilesuffix: .adoc :!toc-title: :caution-caption: 🔥 :important-caption: ❗️ :note-caption: 📎 :tip-caption: 💡 :warning-caption: ⚠️ endif::[] :toc:

This article shows you how to build a simple blog application with https://www.jhipster.tech/2018/04/10/jhipster-release-4.14.3.html[JHipster 4.14.3]. You can also https://www.youtube.com/watch?v=XRREt1KB4Y8[watch a video of this tutorial on YouTube].

NOTE: The YouTube video was built with JHipster 4.3.0, while this tutorial has been https://github.com/mraible/jhipster4-demo/pull/14[updated for 4.14.3].

ifdef::env-github[] TIP: It appears you're reading this document on GitHub. If you want a prettier view, install https://chrome.google.com/webstore/detail/asciidoctorjs-live-previe/iaalpfgpbocpdfblpnhhgllgbdbchmia[Asciidoctor.js Live Preview for Chrome], then view the https://raw.githubusercontent.com/mraible/jhipster4-demo/master/README.adoc[raw document]. Another option is to use the http://gist.asciidoctor.org/?github-mraible/jhipster4-demo//README.adoc[DocGist view]. endif::[]

.Source Code


If you'd like to get right to it, the https://github.com/mraible/jhipster4-demo[source code for this application is on GitHub]. To run the app, use yarn && yarn webpack:build && ./mvnw. To test it, run ./mvnw test. To run its end-to-end tests, run ./mvnw in one terminal and yarn e2e in another.


== What is JHipster?

JHipster is one of those open-source projects you stumble upon and immediately think, "Of course!" It combines three very successful frameworks in web development: Bootstrap, Angular, and Spring Boot. Bootstrap was one of the first dominant web-component frameworks. Its largest appeal was that it only required a bit of HTML and it worked! All the efforts we made in the Java community to develop web components were shown a better path by Bootstrap. It leveled the playing field in HTML/CSS development, much like Apple's Human Interface Guidelines did for iOS apps.

JHipster was started by Julien Dubois in October 2013 (Julien's first commit was on https://github.com/jhipster/generator-jhipster/commit/c8630ab7af7b6a99db880b3b0e2403806b7d2436[October 21, 2013]). The first public release (version 0.3.1) was launched December 7, 2013. Since then, the project has had over 115 releases! It is an open-source, Apache 2.0-licensed project on GitHub. It has a core team of 16 developers and over 280 contributors. You can find its homepage at http://www.jhipster.tech/[http://www.jhipster.tech]. If you look at https://github.com/jhipster/generator-jhipster[the project on GitHub], you can see it's mostly written in JavaScript (42%) and Java (27%).

At its core, JHipster is a http://yeoman.io/[Yeoman] generator. Yeoman is a code generator that you run with a yo command to generate complete applications or useful pieces of an application. Yeoman generators promote what the Yeoman team calls the "Yeoman workflow". This is an opinionated client-side stack of tools that can help developers quickly build beautiful web applications. It takes care of providing everything needed to get working without the normal pains associated with a manual setup.

JHipster 4 is the same JHipster many developers know and love, with a couple bright and shiny new features: namely Angular and Bootstrap 4 support.

NOTE: When I say "AngularJS", I mean Angular 1.x. "Angular" is the forward-looking name for Angular 2 and beyond.

== Install JHipster 4

The http://www.jhipster.tech/installation/[Installing JHipster] instructions show you all the tools you'll need to use a released version of JHipster.

. Install Java 8 http://www.oracle.com/technetwork/java/javase/downloads/index.html[from Oracle]. . Install Git from https://git-scm.com. . Install Node.js from http://nodejs.org. JHipster recommends using a LTS release. . Install Yarn using the https://yarnpkg.com/en/docs/install[Yarn installation instructions]. . Run the following command to install http://yeoman.io/[Yeoman].

yarn global add yo

. Run the following command to install JHipster.

yarn global add generator-jhipster

== Create a Project

To create a project, open a terminal window and create a directory. For example, mdkdir blog. Navigate into the directory and run jhipster. You'll be asked a number of questions about the type of application you want to create and what features you'd like to include. The screenshot below shows the choices I made to create a simple blog application with Angular.

.Generating the application image::static/generating-blog.png[Generating the application, 1376, scaledwidth=100%]

If you'd like to create the same application I did, you can place the following .yo-rc.json file in an empty directory and run jhipster in it. You won't be prompted to answer any questions because the answers are already in .yo-rc.json.

[source,json]

{ "generator-jhipster": { "promptValues": { "packageName": "org.jhipster", "nativeLanguage": "en" }, "jhipsterVersion": "4.14.3", "baseName": "blog", "packageName": "org.jhipster", "packageFolder": "org/jhipster", "serverPort": "8080", "authenticationType": "jwt", "cacheProvider": "ehcache", "enableHibernateCache": true, "websocket": false, "databaseType": "sql", "devDatabaseType": "h2Disk", "prodDatabaseType": "postgresql", "searchEngine": false, "messageBroker": false, "serviceDiscoveryType": false, "buildTool": "maven", "enableSocialSignIn": false, "enableSwaggerCodegen": false, "jwtSecretKey": "66a6793747830fceb83801a2f66b634206014a82", "clientFramework": "angularX", "useSass": true, "clientPackageManager": "yarn", "applicationType": "monolith", "testFrameworks": [ "gatling", "protractor" ], "jhiPrefix": "jhi", "enableTranslation": true, "nativeLanguage": "en", "languages": [ "en", "es" ] } }

The project creation process will take a couple minutes to run, depending on your internet connection speed. When it's finished, you should see output like the following.

.Generation success image::static/generation-success.png[Generation success, 1354, scaledwidth=100%]

Run ./mvnw to start the application and navigate to http://localhost:8080 in your favorite browser. The first thing you'll notice is a dapper-looking fellow explaining how you can sign in or register.

.Default homepage image::static/default-homepage.png[Default homepage, 1290, scaledwidth=100%]

Sign in with username admin and password admin and you'll have access to navigate through the Administration section. This section offers nice looking UIs on top of some Spring Boot's many monitoring and configuration features. It also allows you to administer users:

.User management image::static/user-management.png[User management, 1290, scaledwidth=100%]

It gives you insights into Application and JVM metrics:

.Application metrics image::static/app-metrics.png[Application and JVM Metrics, 1290, scaledwidth=100%]

And it allows you to see the Swagger docs associated with its API.

.Swagger docs image::static/swagger-docs.png[Swagger docs, 1290, scaledwidth=100%]

You can run the following command (in a separate terminal window) to run the Protractor tests and confirm everything is working properly.


yarn e2e

At this point, it's a good idea to check your project into Git so you can easily see what changes are made going forward.


git add . git commit -m "Project created"

== Generate Entities

For each entity you want to create, you will need:

  • a database table;
  • a Liquibase change set;
  • a JPA entity class;
  • a Spring Data JpaRepository interface;
  • a Spring MVC RestController class;
  • an Angular model, state, component, dialog components, service; and
  • several HTML pages for each component.

In addition, you should have integration tests to verify that everything works and performance tests to verify that it runs fast. In an ideal world, you'd also have unit tests and integration tests for your Angular code.

The good news is JHipster can generate all of this code for you, including integration tests and performance tests. In addition, if you have entities with relationships, it will generate the necessary schema to support them (with foreign keys), and the TypeScript and HTML code to manage them. You can also set up validation to require certain fields as well as control their length.

JHipster supports several methods of code generation. The first uses its https://www.jhipster.tech/creating-an-entity/[entity sub-generator]. The entity sub-generator is a command-line tool that prompts you with questions which you answer.

https://start.jhipster.tech/jdl-studio/[JDL-Studio] is a browser-based tool for defining your domain model with JHipster Domain Language (JDL). Finally, https://www.jhipster.tech/jhipster-uml/[JHipster-UML] is an option for those that like UML. Supported UML editors include https://www.modeliosoft.com/[Modelio], http://www.umldesigner.org/[UML Designer], https://www.genmymodel.com/[GenMyModel] and http://www.visual-paradigm.com/[Visual Paradigm]. I like the visual nature of JDL-Studio, so I'll use it for this project.

Below is the entity diagram and JDL code needed to generate a simple blog with blogs, entries and tags.

.Blog entity diagram image::static/jdl-studio.png[Blog entity diagram, 1171, scaledwidth=100%]

TIP: You can find a few other https://github.com/jhipster/jdl-samples[JDL samples on GitHub].

If you'd like to follow along, copy/paste the contents of the file below into https://start.jhipster.tech/jdl-studio/[JDL-Studio].

.blog.jh

entity Blog { name String required minlength(3), handle String required minlength(2) }

entity Entry { title String required, content TextBlob required, date ZonedDateTime required }

entity Tag { name String required minlength(2) }

relationship ManyToOne { Blog{user(login)} to User, Entry{blog(name)} to Blog }

relationship ManyToMany { Entry{tag(name)} to Tag{entry} }

paginate Entry, Tag with infinite-scroll

Click the download button in the top right corner to save it to your hard drive. Run the following command (in the blog directory) to import this file and generate entities, tests and a UI.


jhipster import-jdl ~/Downloads/jhipster-jdl.jh

You'll be prompted to overwrite src/main/resources/config/liquibase/master.xml. Type a to overwrite this file, as well as others.

Restart the application with /.mvnw and run yarn start to view the UI for the generated entities. Create a couple blogs for the existing admin and user users, as well as a few blog entries.

TIP: You don't have to run yarn start, but doing so allows you to change your UI files and see the results immediately.

.Blogs image::static/blogs.png[Blogs, 1171, scaledwidth=100%]

.Entries image::static/entries.png[Entries, 1283, scaledwidth=100%]

From these screenshots, you can see that users can see each other's data, and modify it.

Check your generated entities into Git.


git add . git commit -m "Entities generated"

== Add Business Logic

TIP: To configure an IDE with your JHipster project, see https://www.jhipster.tech/configuring-ide/[Configuring your IDE]. Instructions exist for Eclipse, IntelliJ IDEA, Visual Studio Code, and NetBeans.

To add more security around blogs and entries, open BlogResource.java and find the getAllBlogs() method. Change the following line:

[source,java] .src/main/java/org/jhipster/web/rest/BlogResource.java

return blogRepository.findAll();

To:

[source,java] .src/main/java/org/jhipster/web/rest/BlogResource.java

return blogRepository.findByUserIsCurrentUser();

The findByUserIsCurrentUser() method is generated by JHipster in the BlogRepository class and allows limiting results by the current user.

[source,java] .src/main/java/org/jhipster/repository/BlogRepository.java

public interface BlogRepository extends JpaRepository<Blog,Long> {

@Query("select blog from Blog blog where blog.user.login = ?#{principal.username}")
List<Blog> findByUserIsCurrentUser();

}

After making this change, re-compiling BlogResource should trigger a restart of the application thanks to http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html[Spring Boot's Developer tools]. If you navigate to http://localhost:9000/blogs, you should only see the blog for the current user.

.Admin's blog image::static/blogs-admin.png[Admin's blog, 1217, scaledwidth=100%]

To add this same logic for entries, open EntryResource.java and find the getAllEntries() method. Change the following line:

[source,java] .src/main/java/org/jhipster/web/rest/EntryResource.java

Page page = entryRepository.findAll(pageable);

To:

[source,java] .src/main/java/org/jhipster/web/rest/EntryResource.java

Page page = entryRepository.findByBlogUserLoginOrderByDateDesc( SecurityUtils.getCurrentUserLogin().orElse(null), pageable);

Using your IDE, create this method in the EntryRepository class. It should look as follows:

[source,java] .src/main/java/org/jhipster/repository/EntryRepository.java

Page findByBlogUserLoginOrderByDateDesc(String currentUserLogin, Pageable pageable);

Recompile both changed classes and verify that the user user only sees the entries you created for them.

.User's entries image::static/entries-user.png[User's entries, 1216, scaledwidth=100%]

After making this changes, commit them to Git.


git add . git commit -m "Add business logic"

You might notice that this application doesn't look like a blog and it doesn't allow HTML in the content field.

== Make UI Enhancements

When doing UI development on a JHipster-generated application, it's nice to see your changes as soon as you save a file. JHipster 4 uses https://www.browsersync.io/[Browsersync] and https://webpack.github.io/[webpack] to power this feature. You enable this previously by running the following command in the blog directory.


yarn start

In this section, you'll change the following:

. Change the rendered content field to display HTML . Change the list of entries to look like a blog

==== Allow HTML

If you enter HTML in the content field of a blog entry, you'll notice it's escaped on the list screen.

.Escaped HTML image::static/entries-with-html-escaped.png[Escaped HTML, 1216, scaledwidth=100%]

To change this behavior, open entry.component.html and change the following line:

[source,html] .src/main/webapp/app/entities/entry/entry.component.html

{{entry.content}} ----

To:

[source,html] .src/main/webapp/app/entities/entry/entry.component.html

----

After making this change, you'll see that the HTML is no longer escaped.

.HTML in entries image::static/entries-with-html.png[Escaped HTML, 1216, scaledwidth=100%]

==== Improve the layout

To make the list of entries look like a blog, replace <div class="table-responsive"> with HTML so it uses a stacked layout in a single column.

[source,html] .src/main/webapp/app/entities/entry/entry.component.html

= links['last']" [infiniteScrollDistance]="0">

{{entry.title}}

Posted on {{entry.date | date: 'short'}} by {{entry.blog.user.login}}
Edit Delete
----

Now it looks more like a regular blog!

.Blog entries image::static/blog-entries.png[Blog entries, 1216, scaledwidth=100%]

Commit all your changes to Git.


git add . git commit -m "UI enhancements"

== Deploy to the Cloud

A JHipster application can be deployed anywhere a Spring Boot application can be deployed.

JHipster ships with support for deploying to https://www.jhipster.tech/cloudfoundry/[Cloud Foundry], https://www.jhipster.tech/heroku/[Heroku], https://www.jhipster.tech/kubernetes/[Kubernetes], https://www.jhipster.tech/aws/[AWS], and https://www.jhipster.tech/boxfuse/[AWS with Boxfuse]. I'm using Heroku in this example because it doesn't cost me anything to host it.

When you prepare a JHipster application for production, it's recommended to use the pre-configured "production" profile. With Maven, you can package your application by specifying the prod profile when building.


mvn -Pprod package

The production profile is used to build an optimized JavaScript client. You can invoke this using webpack by running yarn run webpack:prod. The production profile also configures gzip compression with a servlet filter, cache headers, and monitoring via https://github.com/dropwizard/metrics[Metrics]. If you have a http://graphite.wikidot.com/[Graphite] server configured in your application-prod.yml file, your application will automatically send metrics data to it.

When you run this command, you'll likely get a test failure.


Results :

Failed tests: BlogResourceIntTest.getAllBlogs:177 Status expected:<200> but was:<500>

Tests run: 162, Failures: 1, Errors: 0, Skipped: 0

The reason this happens is shown in a stack trace in your terminal.


org.springframework.dao.InvalidDataAccessApiUsageException: Authentication object cannot be null

To fix this, you can use Spring Security Test's http://docs.spring.io/spring-security/site/docs/current/reference/html/test-method.html#test-method-withmockuser[`@WithMockUser`]. Open BlogResourceIntTest.java and inject UserRepository as a dependency.

[source,java] .src/test/java/org/jhipster/web/rest/BlogResourceIntTest.java

@Autowired private UserRepository userRepository;

Change the createEntity() method so its not static and uses the userRepository to set a user on the blog entity.

[source,java]

public Blog createEntity(EntityManager em) { Blog blog = new Blog() .name(DEFAULT_NAME) .handle(DEFAULT_HANDLE) .user(userRepository.findOneByLogin("user").get()); return blog; }

Add @WithMockUser to the getAllBlogs() method.

[source,java]

@Test @Transactional @WithMockUser public void getAllBlogs() throws Exception {

After fixing this test, you should be able to run mvn -Pprod package without any failures. Since everything works, commit it!


git add . git commit -m "Fix tests"

To deploy this application to Heroku, I logged in to my account using heroku login from the command line. I already had the https://devcenter.heroku.com/articles/heroku-command-line[Heroku CLI] installed.


$ heroku login Enter your Heroku credentials: Email: [email protected] Password: ******************* Logged in as [email protected]

I ran jhipster heroku as recommended in the http://www.jhipster.tech/heroku/[Deploying to Heroku] documentation. I used the name "jhipster4x-demo" for my application when prompted. I selected "Git (compile on Heroku)" as the type of deployment.


$ jhipster heroku Using JHipster version installed locally in current project's node_modules Executing jhipster:heroku Options: Heroku configuration is starting ? Name to deploy as: jhipster4x-demo ? On which region do you want to deploy ? us ? Which type of deployment do you want ? Git (compile on Heroku)

Using existing Git repository

Heroku CLI deployment plugin already installed

Creating Heroku application and setting up node environment https://jhipster-4-x-demo.herokuapp.com/ | https://git.heroku.com/jhipster-4-x-demo.git

Provisioning addons Created heroku-postgresql --as DATABASE

Creating Heroku deployment files create src/main/resources/config/bootstrap-heroku.yml create src/main/resources/config/application-heroku.yml create Procfile conflict pom.xml ? Overwrite pom.xml? overwrite this and all others force pom.xml

Skipping build

Updating Git repository git add . git commit -m "Deploy to Heroku" --allow-empty

Configuring Heroku

Deploying application

... building ...

remote: https://jhipster-4-x-demo.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/jhipster-4-x-demo.git

  • [new branch] HEAD -> master

Your app should now be live. To view it run heroku open And you can view the logs with this command heroku logs --tail After application modification, redeploy it with jhipster heroku Congratulations, JHipster execution is complete!

I ran heroku open, logged as admin and was pleased to see it worked!

.JHipster 4 demo on Heroku image::static/jhipster4-demo-heroku.png[JHipster 4 demo on Heroku, 1244, scaledwidth=100%]

== Learn More about JHipster

I hope you've enjoyed learning how JHipster can help you develop hip web applications! It's a nifty project, with an easy-to-use entity generator, a pretty UI and many Spring Boot best-practice patterns. The project team follows five simple https://www.jhipster.tech/policies/[policies], paraphrased here:

  1. The development team votes on policies.
  2. JHipster uses technologies with their default configurations as much as possible.
  3. Only add options when there is sufficient added value in the generated code.
  4. For the Java code, follow the default IntelliJ IDEA formatting and coding guidelines.
  5. Use strict versions for third-party libraries.

These policies help the project maintain its sharp edge and streamline its development process. If you have features you'd like to add or if you'd like to refine existing features, you can https://github.com/jhipster/generator-jhipster[watch the project on GitHub] and https://github.com/jhipster/generator-jhipster/blob/master/CONTRIBUTING.md[help with its development] and support. We're always looking for help!

Now that you've learned how to use Angular, Bootstrap 4, and Spring Boot with JHipster, go forth and develop great applications!

== Source Code

The source code for this project is available on GitHub at https://github.com/mraible/jhipster4-demo.

https://travis-ci.org[Travis CI] is continually testing this project with configuration from its https://github.com/mraible/jhipster4-demo/blob/master/.travis.yml[`.travis.yml`] file.

== About the author

Matt Raible is a web developer and Java Champion. He loves to architect and build slick-looking UIs using Sass and TypeScript. When he's not evangelizing https://okta.com[Okta] and open source, he likes to ski with his family, drive his VWs, and enjoy craft beer.

Matt writes on the http://developer.okta.com/blog[Okta developer blog], his https://raibledesigns.com/[personal blog], and you can find him on Twitter https://twitter.com/mraible[@mraible].

Matt is a developer on the JHipster team, authored the https://www.infoq.com/minibooks/jhipster-4x-mini-book[JHipster Mini-Book], and helped create https://www.pluralsight.com/courses/play-by-play-developing-microservices-mobile-apps-jhipster[Play by Play: Developing Microservices and Mobile Apps with JHipster].

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].