| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | == Sign the Contributor License Agreement | 
					
						
							| 
									
										
										
										
											2013-08-08 23:34:20 +08:00
										 |  |  | Before we accept a non-trivial patch or pull request we will need you to sign the | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | https://support.springsource.com/spring_committer_signup[contributor's agreement]. | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2015-01-06 04:16:46 +08:00
										 |  |  | given the ability to merge pull requests. Use ``Phillip Webb'' or ``Dave Syer'' in the | 
					
						
							|  |  |  | project lead field when you complete the form. | 
					
						
							| 
									
										
										
										
											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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-22 03:41:37 +08:00
										 |  |  | * Use the Spring Framework code format conventions. If you use Eclipse and you follow | 
					
						
							|  |  |  |   the ``Importing into eclipse'' instructions below you should get project specific | 
					
						
							|  |  |  |   formatting automatically. You can also import formatter settings using the | 
					
						
							|  |  |  |   `eclipse-code-formatter.xml` file from the `eclipse` folder. If using IntelliJ, you can | 
					
						
							| 
									
										
										
										
											2014-08-22 05:25:02 +08:00
										 |  |  |   use the http://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter Plugin] | 
					
						
							| 
									
										
										
										
											2014-08-22 03:41:37 +08:00
										 |  |  |   to import the same file. | 
					
						
							| 
									
										
										
										
											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) | 
					
						
							|  |  |  | * Add yourself as an `@author` to the .java files that you modify substantially (more | 
					
						
							|  |  |  |   than cosmetic changes). | 
					
						
							| 
									
										
										
										
											2013-08-08 23:34:20 +08:00
										 |  |  | * Add some Javadocs and, if you change the namespace, some XSD doc elements. | 
					
						
							| 
									
										
										
										
											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). | 
					
						
							| 
									
										
										
										
											2014-08-29 08:41:24 +08:00
										 |  |  | * When writing a commit message please follow http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[these conventions], | 
					
						
							|  |  |  |   if you are fixing an existing issue please add `Fixes gh-XXXX` at the end of the commit | 
					
						
							|  |  |  |   message (where XXXX is the issue number). | 
					
						
							| 
									
										
										
										
											2013-08-08 23:34:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-19 08:13:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +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 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | http://www.springsource.com/developer/sts[Spring Tools Suite] or | 
					
						
							|  |  |  | http://eclipse.org[Eclipse] when working with the code. We use the | 
					
						
							|  |  |  | http://eclipse.org/m2e/[m2eclipe] eclipse plugin for maven support. Other IDEs and tools | 
					
						
							|  |  |  | should also work without issue. | 
					
						
							| 
									
										
										
										
											2013-07-15 11:50:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-19 08:13:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | === Building from source | 
					
						
							| 
									
										
										
										
											2013-07-27 05:14:51 +08:00
										 |  |  | To build the source you will need to install | 
					
						
							| 
									
										
										
										
											2014-03-31 16:24:09 +08:00
										 |  |  | http://maven.apache.org/run-maven/index.html[Apache Maven] v3.0.6 or above and JDK 1.7. | 
					
						
							| 
									
										
										
										
											2013-08-30 13:28:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-19 08:13:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | ==== Default build | 
					
						
							| 
									
										
										
										
											2013-12-10 22:29:30 +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] | 
					
						
							|  |  |  | ---- | 
					
						
							| 
									
										
										
										
											2013-07-15 11:50:44 +08:00
										 |  |  | 	$ mvn 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 | 
					
						
							|  |  |  | a `MAVEN_OPTS` environment variable with the value `-Xmx512m -XX:MaxPermSize=128m` | 
					
						
							| 
									
										
										
										
											2013-08-27 01:48:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-15 11:50:44 +08:00
										 |  |  | If you are rebuilding often, you might also want to skip the tests until you are ready | 
					
						
							|  |  |  | to submit a pull request: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | [indent=0] | 
					
						
							|  |  |  | ---- | 
					
						
							| 
									
										
										
										
											2013-07-15 11:50:44 +08:00
										 |  |  | 	$ mvn clean install -DskipTests | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2013-08-30 13:28:34 +08:00
										 |  |  | Multi-module Maven builds cannot directly include maven plugins that are part of the | 
					
						
							|  |  |  | reactor unless they have previously been built. Unfortunately this restriction causes | 
					
						
							|  |  |  | some compilations for Spring Boot as we include a maven plugin and use it within the | 
					
						
							|  |  |  | samples. The standard build works around this restriction by launching the samples via | 
					
						
							|  |  |  | the `maven-invoker-plugin` so that they are not part of the reactor. This works fine | 
					
						
							|  |  |  | most of the time, however, sometimes it useful to run a build that includes all modules | 
					
						
							|  |  |  | (for example when using `maven-versions-plugin`. We use the full build on our CI servers | 
					
						
							|  |  |  | and during the release process. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Running a full build is a two phase process. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1) Prepare the build | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Preparing the build will compile and install the `spring-boot-maven-plugin` so that it | 
					
						
							|  |  |  | can be referenced during the full build. It also generates a `settings.xml` file that | 
					
						
							|  |  |  | enables a `snapshot`, `milestone` or `release` profiles based on the version being | 
					
						
							|  |  |  | build. To prepare the build, from the root directory use: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | [indent=0] | 
					
						
							|  |  |  | ---- | 
					
						
							| 
									
										
										
										
											2014-06-10 11:01:53 +08:00
										 |  |  | 	$ mvn -P snapshot,prepare install -DskipTests | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | ---- | 
					
						
							| 
									
										
										
										
											2013-08-30 13:28:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | NOTE: You may notice that preparing the build also changes the | 
					
						
							|  |  |  | `spring-boot-starter-parent` POM. This is required for our release process to work | 
					
						
							|  |  |  | correctly. | 
					
						
							| 
									
										
										
										
											2013-08-30 13:28:34 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 2) Run the full build | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Once the build has been prepared, you can run a full build using the following commands: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | [indent=0] | 
					
						
							|  |  |  | ---- | 
					
						
							| 
									
										
										
										
											2014-06-10 11:01:53 +08:00
										 |  |  | 	$ mvn -s ./settings.xml -f spring-boot-full-build -P full clean install | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | ---- | 
					
						
							| 
									
										
										
										
											2013-08-30 13:28:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-03 04:32:34 +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 -XX:MaxPermSize=128m`. 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-19 08:13:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | === Importing into eclipse with m2eclipse | 
					
						
							|  |  |  | We recommend the http://eclipse.org/m2e/[m2eclipe] eclipse plugin when working with | 
					
						
							| 
									
										
										
										
											2013-07-15 11:50:44 +08:00
										 |  |  | eclipse. If you don't already have m2eclipse installed it is available from the "eclipse | 
					
						
							|  |  |  | marketplace". | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-27 05:14:51 +08:00
										 |  |  | Spring Boot includes project specific source formatting settings, in order to have these | 
					
						
							| 
									
										
										
										
											2015-10-09 13:33:08 +08:00
										 |  |  | work with m2eclipse, we provide additional Eclipse plugins that you can install: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ===== Install the m2eclipse-maveneclipse plugin | 
					
						
							|  |  |  | * Select "`Help`" -> "`Install New Software`". | 
					
						
							|  |  |  | * Add `https://dl.bintray.com/philwebb/m2eclipse-maveneclipse` as a site. | 
					
						
							| 
									
										
										
										
											2013-07-15 11:50:44 +08:00
										 |  |  | * Install "Maven Integration for the maven-eclipse-plugin" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-09 13:33:08 +08:00
										 |  |  | ===== Install the Spring Formatter plugin | 
					
						
							|  |  |  | * Select "`Help`" -> "`Install New Software`". | 
					
						
							|  |  |  | * Add `https://dl.bintray.com/philwebb/spring-eclipse-code-formatter/` as a site. | 
					
						
							|  |  |  | * Install "Spring Code Formatter" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NOTE: These plugins are 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
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | === Importing into eclipse without m2eclipse | 
					
						
							| 
									
										
										
										
											2014-10-13 03:47:19 +08:00
										 |  |  | If you prefer not to use m2eclipse you can generate eclipse project metadata using the | 
					
						
							| 
									
										
										
										
											2013-07-15 11:50:44 +08:00
										 |  |  | following command: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | [indent=0] | 
					
						
							|  |  |  | ---- | 
					
						
							| 
									
										
										
										
											2013-07-15 11:50:44 +08:00
										 |  |  | 	$ mvn eclipse:eclipse | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | ---- | 
					
						
							| 
									
										
										
										
											2013-07-15 11:50:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | The generated eclipse projects can be imported by selecting `import existing projects` | 
					
						
							|  |  |  | from the `file` menu. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-19 08:13:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +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
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 14:00:12 +08:00
										 |  |  | == Integration tests | 
					
						
							| 
									
										
										
										
											2013-08-27 01:48:26 +08:00
										 |  |  | The sample application are used as integration tests during the build (when you | 
					
						
							|  |  |  | `mvn install`). Due to the fact that they make use of the `spring-boot-maven-plugin` | 
					
						
							|  |  |  | 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. | 
					
						
							| 
									
										
										
										
											2013-07-27 05:14:51 +08:00
										 |  |  | 
 |