2014-03-17 14:00:12 +08:00
|
|
|
= Contributing to Spring Boot
|
2013-10-01 00:50:38 +08:00
|
|
|
|
2014-11-19 08:13:23 +08:00
|
|
|
Spring Boot is released under the Apache 2.0 license. If you would like to contribute
|
|
|
|
something, or simply want to hack on the code this document should help you get started.
|
|
|
|
|
|
|
|
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2016-01-09 01:10:48 +08:00
|
|
|
== Code of Conduct
|
|
|
|
This project adheres to the Contributor Covenant link:CODE_OF_CONDUCT.adoc[code of
|
2016-03-03 09:37:17 +08:00
|
|
|
conduct]. By participating, you are expected to uphold this code. Please report
|
2016-01-09 01:10:48 +08:00
|
|
|
unacceptable behavior to spring-code-of-conduct@pivotal.io.
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-05-22 08:10:52 +08:00
|
|
|
== Using GitHub Issues
|
2015-08-19 19:15:08 +08:00
|
|
|
We use GitHub issues to track bugs and enhancements. If you have a general usage question
|
2018-01-04 00:07:10 +08:00
|
|
|
please ask on https://stackoverflow.com[Stack Overflow]. The Spring Boot team and the
|
|
|
|
broader community monitor the https://stackoverflow.com/tags/spring-boot[`spring-boot`]
|
2015-08-19 19:15:08 +08:00
|
|
|
tag.
|
|
|
|
|
|
|
|
If you are reporting a bug, please help to speed up problem diagnosis by providing as much
|
2015-10-08 04:52:34 +08:00
|
|
|
information as possible. Ideally, that would include a small
|
|
|
|
https://github.com/spring-projects/spring-boot-issues[sample project] that reproduces the
|
|
|
|
problem.
|
2015-08-19 19:15:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
2018-05-22 08:07:44 +08:00
|
|
|
== Reporting Security Vulnerabilities
|
|
|
|
If you think you have found a security vulnerability in Spring Boot please *DO NOT*
|
|
|
|
disclose it publicly until we've had a chance to fix it. Please don't report security
|
|
|
|
vulnerabilities using GitHub issues, instead head over to https://pivotal.io/security and
|
|
|
|
learn how to disclose them responsibly.
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-03-17 14:00:12 +08:00
|
|
|
== Sign the Contributor License Agreement
|
2016-07-20 15:51:38 +08:00
|
|
|
Before we accept a non-trivial patch or pull request we will need you to
|
2016-07-20 15:51:38 +08:00
|
|
|
https://cla.pivotal.io/sign/spring[sign the Contributor License Agreement].
|
2014-03-17 14:00:12 +08:00
|
|
|
Signing the contributor's agreement does not grant anyone commit rights to the main
|
|
|
|
repository, but it does mean that we can accept your contributions, and you will get an
|
|
|
|
author credit if we do. Active contributors might be asked to join the core team, and
|
2016-07-20 15:51:38 +08:00
|
|
|
given the ability to merge pull requests.
|
2014-03-17 14:00:12 +08:00
|
|
|
|
2014-11-19 08:13:23 +08:00
|
|
|
|
|
|
|
|
2014-03-17 14:00:12 +08:00
|
|
|
== Code Conventions and Housekeeping
|
|
|
|
None of these is essential for a pull request, but they will all help. They can also be
|
|
|
|
added after the original pull request but before a merge.
|
|
|
|
|
2018-05-25 06:04:03 +08:00
|
|
|
* We use the https://github.com/spring-io/spring-javaformat/[Spring JavaFormat] project
|
|
|
|
to apply code formatting conventions. If you use Eclipse and you follow the '`Importing
|
|
|
|
into eclipse`' instructions below you should get project specific formatting
|
|
|
|
automatically. You can also install the https://github.com/spring-io/spring-javaformat/#intellij-idea[Spring JavaFormat IntelliJ Plugin]
|
|
|
|
or format the code from the Maven build by running
|
|
|
|
`./mvnw io.spring.javaformat:spring-javaformat-maven-plugin:apply`.
|
|
|
|
* The build includes checkstyle rules for many of our code conventions. Run
|
|
|
|
`./mvnw validate` if you want to check you changes are compliant.
|
2014-03-17 14:00:12 +08:00
|
|
|
* Make sure all new `.java` files to have a simple Javadoc class comment with at least an
|
|
|
|
`@author` tag identifying you, and preferably at least a paragraph on what the class is
|
|
|
|
for.
|
|
|
|
* Add the ASF license header comment to all new `.java` files (copy from existing files
|
|
|
|
in the project)
|
2015-10-08 04:52:34 +08:00
|
|
|
* Add yourself as an `@author` to the `.java` files that you modify substantially (more
|
2014-03-17 14:00:12 +08:00
|
|
|
than cosmetic changes).
|
2015-10-08 04:52:34 +08:00
|
|
|
* Add some Javadocs.
|
2014-03-17 14:00:12 +08:00
|
|
|
* A few unit tests would help a lot as well -- someone has to do it.
|
|
|
|
* If no-one else is using your branch, please rebase it against the current master (or
|
|
|
|
other target branch in the main project).
|
2019-03-26 17:14:28 +08:00
|
|
|
* When writing a commit message please follow https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[these conventions],
|
2014-08-29 08:41:24 +08:00
|
|
|
if you are fixing an existing issue please add `Fixes gh-XXXX` at the end of the commit
|
2015-10-08 04:52:34 +08:00
|
|
|
message (where `XXXX` is the issue number).
|
2013-08-08 23:34:20 +08:00
|
|
|
|
2014-11-19 08:13:23 +08:00
|
|
|
|
|
|
|
|
2018-05-22 08:10:52 +08:00
|
|
|
== Working with the Code
|
2013-07-27 05:14:51 +08:00
|
|
|
If you don't have an IDE preference we would recommend that you use
|
2016-04-26 01:47:32 +08:00
|
|
|
https://spring.io/tools/sts[Spring Tools Suite] or
|
2019-03-26 17:14:28 +08:00
|
|
|
https://eclipse.org[Eclipse] when working with the code. We use the
|
|
|
|
https://eclipse.org/m2e/[M2Eclipse] eclipse plugin for maven support. Other IDEs and tools
|
2014-03-17 14:00:12 +08:00
|
|
|
should also work without issue.
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2014-11-19 08:13:23 +08:00
|
|
|
|
|
|
|
|
2018-05-22 08:10:52 +08:00
|
|
|
=== Building from Source
|
2019-03-27 22:04:32 +08:00
|
|
|
Spring Boot source can be built from the command line using
|
2019-04-03 19:12:37 +08:00
|
|
|
https://maven.apache.org/run-maven/index.html[Apache Maven] on JDK 1.8 or above. We
|
|
|
|
include '`Maven Wrapper`' scripts (`./mvnw` or `mvnw.bat`) that you can run rather than
|
|
|
|
needing to install Maven locally.
|
2013-08-30 13:28:34 +08:00
|
|
|
|
2014-11-19 08:13:23 +08:00
|
|
|
|
|
|
|
|
2018-05-22 08:10:52 +08:00
|
|
|
==== Default Build
|
2018-05-25 06:04:03 +08:00
|
|
|
The project can be built from the root directory using the standard Maven command:
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2014-03-17 14:00:12 +08:00
|
|
|
[indent=0]
|
|
|
|
----
|
2016-01-17 06:22:40 +08:00
|
|
|
$ ./mvnw clean install
|
2014-03-17 14:00:12 +08:00
|
|
|
----
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2014-03-17 14:00:12 +08:00
|
|
|
NOTE: You may need to increase the amount of memory available to Maven by setting
|
2015-07-14 21:56:20 +08:00
|
|
|
a `MAVEN_OPTS` environment variable with the value `-Xmx512m`
|
2013-08-27 01:48:26 +08:00
|
|
|
|
2017-03-03 20:45:44 +08:00
|
|
|
If you are rebuilding often, you might also want to skip the tests and the execution of
|
|
|
|
checkstyle until you are ready to submit a pull request:
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2014-03-17 14:00:12 +08:00
|
|
|
[indent=0]
|
|
|
|
----
|
2017-03-03 20:45:44 +08:00
|
|
|
$ ./mvnw clean install -DskipTests -Pfast
|
2014-03-17 14:00:12 +08:00
|
|
|
----
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2014-11-19 08:13:23 +08:00
|
|
|
|
|
|
|
|
2014-03-17 14:00:12 +08:00
|
|
|
==== Full Build
|
2018-01-07 16:27:50 +08:00
|
|
|
You can run a full build using the following command:
|
2013-08-30 13:28:34 +08:00
|
|
|
|
2014-03-17 14:00:12 +08:00
|
|
|
[indent=0]
|
|
|
|
----
|
2018-01-07 16:27:50 +08:00
|
|
|
$ ./mvnw -Pfull clean install
|
2014-03-17 14:00:12 +08:00
|
|
|
----
|
2013-08-30 13:28:34 +08:00
|
|
|
|
2018-01-07 16:27:50 +08:00
|
|
|
NOTE: As for the standard build, you may need to increase the amount of memory available
|
|
|
|
to Maven by setting a `MAVEN_OPTS` environment variable with the value `-Xmx512m`. We
|
|
|
|
generate more artifacts when running the full build (such as Javadoc jars), so you may
|
|
|
|
find the process a little slower than the standard build.
|
2013-08-30 13:28:34 +08:00
|
|
|
|
2018-01-07 16:27:50 +08:00
|
|
|
[TIP]
|
|
|
|
====
|
|
|
|
If you want to run a build without the samples and integration tests, building the
|
|
|
|
`spring-boot-project` module is enough. You can cd there and run the same command, or you
|
|
|
|
can run this from the top-level directory:
|
2013-08-30 13:28:34 +08:00
|
|
|
|
2014-03-17 14:00:12 +08:00
|
|
|
[indent=0]
|
|
|
|
----
|
2018-01-07 16:27:50 +08:00
|
|
|
$ ./mvnw -f spring-boot-project -Pfull clean install
|
2014-03-17 14:00:12 +08:00
|
|
|
----
|
2018-01-07 16:27:50 +08:00
|
|
|
====
|
2013-08-30 13:28:34 +08:00
|
|
|
|
2014-11-19 08:13:23 +08:00
|
|
|
|
|
|
|
|
2018-05-22 08:10:52 +08:00
|
|
|
=== Importing into Eclipse
|
2019-06-26 16:59:01 +08:00
|
|
|
You can import the Spring Boot code into any Eclipse 2019-03-based distribution. The
|
2019-06-25 23:22:53 +08:00
|
|
|
easiest way to setup a new environment is to use the Eclipse Installer with the provided
|
2019-06-26 16:59:01 +08:00
|
|
|
`spring-boot-project.setup` file (in the `/eclipse` folder).
|
2015-10-08 04:52:34 +08:00
|
|
|
|
|
|
|
|
|
|
|
==== Using the Eclipse Installer
|
|
|
|
Spring Boot includes a `.setup` files which can be used with the Eclipse Installer to
|
|
|
|
provision a new environment. To use the installer:
|
|
|
|
|
2019-06-25 23:22:53 +08:00
|
|
|
* Download and run the latest
|
|
|
|
https://www.eclipse.org/downloads/packages/installer[Eclipse Installer].
|
2016-01-05 21:41:18 +08:00
|
|
|
* Switch to "Advanced Mode" using the drop down menu on the right.
|
2015-10-08 04:52:34 +08:00
|
|
|
* Select "`Eclipse IDE for Java Developers`" under "`Eclipse.org`" as the product to
|
2019-06-26 16:59:01 +08:00
|
|
|
install, `2019-03` as the product version, and click "`next`".
|
2015-10-08 04:52:34 +08:00
|
|
|
* For the "`Project`" click on "`+`" to add a new setup file. Select "`Github Projects`"
|
2019-04-02 09:28:11 +08:00
|
|
|
and browse for `<checkout>/eclipse/spring-boot-project.setup` from your locally cloned
|
2015-10-08 04:52:34 +08:00
|
|
|
copy of the source code. Click "`OK`" to add the setup file to the list.
|
|
|
|
* Double-click on "`Spring Boot`" from the project list to add it to the list that will
|
|
|
|
be provisioned then click "`Next`".
|
|
|
|
* Click show all variables and make sure that "`Checkout Location`" points to the locally
|
|
|
|
cloned source code that you selected earlier. You might also want to pick a different
|
|
|
|
install location here.
|
|
|
|
* Click "`Finish`" to install the software.
|
|
|
|
|
|
|
|
Once complete you should find that a local workspace has been provisioned complete with
|
|
|
|
all required Eclipse plugins. Projects will be grouped into working-sets to make the code
|
|
|
|
easier to navigate.
|
|
|
|
|
2019-04-02 09:28:11 +08:00
|
|
|
If you want to work on the `spring-boot-gradle-plugin` you should remove the imported Maven
|
|
|
|
project and reimport it as a Gradle project.
|
|
|
|
|
|
|
|
TIP: If you see import errors with `com.sun` packages make sure you have setup a valid
|
|
|
|
`JavaSE-1.8` environment. From preferences select "`Java`", "`Installed JREs`",
|
|
|
|
"`Execution Environments`" and make sure "`JavaSE-1.8`" points to a Java 1.8
|
|
|
|
install (we use AdoptOpenJDK on our CI).
|
|
|
|
|
2015-10-08 04:52:34 +08:00
|
|
|
|
|
|
|
|
2018-05-22 08:10:52 +08:00
|
|
|
==== Manual Installation with M2Eclipse
|
2018-05-25 06:04:03 +08:00
|
|
|
If you prefer to install Eclipse yourself you should use the
|
2019-03-26 17:14:28 +08:00
|
|
|
https://eclipse.org/m2e/[M2Eclipse] eclipse plugin. If you don't already have m2eclipse
|
2019-04-02 09:28:11 +08:00
|
|
|
installed it is available from the "`Eclipse marketplace`".
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2013-07-27 05:14:51 +08:00
|
|
|
Spring Boot includes project specific source formatting settings, in order to have these
|
2018-05-25 06:04:03 +08:00
|
|
|
work with m2eclipse, we provide an additional Eclipse plugin that you can install:
|
|
|
|
|
2013-07-15 11:50:44 +08:00
|
|
|
|
|
|
|
|
2015-10-09 13:33:08 +08:00
|
|
|
===== Install the Spring Formatter plugin
|
|
|
|
* Select "`Help`" -> "`Install New Software`".
|
2018-05-25 06:04:03 +08:00
|
|
|
* Add `https://dl.bintray.com/spring/javaformat-eclipse/` as a site.
|
|
|
|
* Install "Spring Java Format"
|
2015-10-09 13:33:08 +08:00
|
|
|
|
2018-05-25 06:04:03 +08:00
|
|
|
NOTE: The plugin is optional. Projects can be imported without the plugins, your code
|
2014-05-22 22:38:58 +08:00
|
|
|
changes just won't be automatically formatted.
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2013-07-27 05:14:51 +08:00
|
|
|
With the requisite eclipse plugins installed you can select
|
2013-07-15 11:50:44 +08:00
|
|
|
`import existing maven projects` from the `file` menu to import the code. You will
|
2013-07-27 05:14:51 +08:00
|
|
|
need to import the root `spring-boot` pom and the `spring-boot-samples` pom separately.
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2014-11-19 08:13:23 +08:00
|
|
|
|
|
|
|
|
2018-05-22 08:10:52 +08:00
|
|
|
=== Importing into Other IDEs
|
2014-10-03 11:45:05 +08:00
|
|
|
Maven is well supported by most Java IDEs. Refer to your vendor documentation.
|
2013-07-15 11:50:44 +08:00
|
|
|
|
2014-11-19 08:13:23 +08:00
|
|
|
|
|
|
|
|
2018-05-22 08:10:52 +08:00
|
|
|
== Integration Tests
|
2015-10-05 01:59:38 +08:00
|
|
|
The sample applications are used as integration tests during the build (when you
|
2018-05-25 06:04:03 +08:00
|
|
|
`./mvnw install`). Due to the fact that they make use of the `spring-boot-maven-plugin`
|
2013-08-27 01:48:26 +08:00
|
|
|
they cannot be called directly, and so instead are launched via the
|
|
|
|
`maven-invoker-plugin`. If you encounter build failures running the integration tests,
|
2013-07-31 16:14:07 +08:00
|
|
|
check the `build.log` file in the appropriate sample directory.
|
2018-02-15 15:42:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
== Cloning the git repository on Windows
|
2018-02-15 20:30:57 +08:00
|
|
|
Some files in the git repository may exceed the Windows maximum file path (260
|
|
|
|
characters), depending on where you clone the repository. If you get `Filename too long`
|
|
|
|
errors, set the `core.longPaths=true` git option:
|
|
|
|
|
2018-02-15 15:42:48 +08:00
|
|
|
```
|
2018-02-15 20:30:57 +08:00
|
|
|
git clone -c core.longPaths=true https://github.com/spring-projects/spring-boot
|
2018-02-15 15:42:48 +08:00
|
|
|
```
|