README.adoc 8.45 KB
Newer Older
Dave Syer committed
1
// Do not edit this file (e.g. go instead to src/main/asciidoc)
2

Spencer Gibb committed
3 4
image::https://circleci.com/gh/spring-cloud/spring-cloud-netflix/tree/master.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-netflix/tree/master"]
image::https://codecov.io/gh/spring-cloud/spring-cloud-netflix/branch/master/graph/badge.svg["Codecov", link="https://codecov.io/gh/spring-cloud/spring-cloud-netflix/branch/master"]
5
image::https://api.codacy.com/project/badge/Grade/a6885a06921e4f72a0df0b7aabd6d118["Codacy code quality", link="https://www.codacy.com/app/Spring-Cloud/spring-cloud-netflix?utm_source=github.com&utm_medium=referral&utm_content=spring-cloud/spring-cloud-netflix&utm_campaign=Badge_Grade"]
Spencer Gibb committed
6

7 8

This project provides Netflix OSS integrations for Spring Boot apps through autoconfiguration
Dave Syer committed
9 10
and binding to the Spring Environment and other Spring programming model idioms. With a few
simple annotations you can quickly enable and configure the common patterns inside your
Dave Syer committed
11 12
application and build large distributed systems with battle-tested Netflix components. The
patterns provided include Service Discovery (Eureka), Circuit Breaker (Hystrix),
Dave Syer committed
13
Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon).
Dave Syer committed
14 15


Dave Syer committed
16 17 18 19 20 21 22 23
== Features

* Service Discovery: Eureka instances can be registered and clients can discover the instances using Spring-managed beans
* Service Discovery: an embedded Eureka server can be created with declarative Java configuration
* Circuit Breaker: Hystrix clients can be built with a simple annotation-driven method decorator
* Circuit Breaker: embedded Hystrix dashboard with declarative Java configuration
* Declarative REST Client: Feign creates a dynamic implementation of an interface decorated with JAX-RS or Spring MVC annotations
* Client Side Load Balancer: Ribbon
24
* External Configuration: a bridge from the Spring Environment to Archaius (enables native configuration of Netflix components using Spring Boot conventions)
Dave Syer committed
25
* Router and Filter: automatic registration of Zuul filters, and a simple convention over configuration approach to reverse proxy creation
Dave Syer committed
26

Dave Syer committed
27 28
== Building

29 30
:jdkversion: 1.8

Dave Syer committed
31
=== Basic Compile and Test
Dave Syer committed
32

Dave Syer committed
33
To build the source you will need to install JDK {jdkversion}.
Dave Syer committed
34 35 36 37 38 39

Spring Cloud uses Maven for most build-related activities, and you
should be able to get off the ground quite quickly by cloning the
project you are interested in and typing

----
Dave Syer committed
40
$ ./mvnw install
Dave Syer committed
41 42
----

Dave Syer committed
43 44 45 46
NOTE: You can also install Maven (>=3.3.3) yourself and run the `mvn` command
in place of `./mvnw` in the examples below. If you do that you also
might need to add `-P spring` if your local Maven settings do not
contain repository declarations for spring pre-release artifacts.
Dave Syer committed
47

Dave Syer committed
48 49 50 51 52 53
NOTE: Be aware that you might need to increase the amount of memory
available to Maven by setting a `MAVEN_OPTS` environment variable with
a value like `-Xmx512m -XX:MaxPermSize=128m`. We try to cover this in
the `.mvn` configuration, so if you find you have to do it to make a
build succeed, please raise a ticket to get the settings added to
source control.
Dave Syer committed
54 55 56 57 58

For hints on how to build the project look in `.travis.yml` if there
is one. There should be a "script" and maybe "install" command. Also
look at the "services" section to see if any services need to be
running locally (e.g. mongo or rabbit).  Ignore the git-related bits
Dave Syer committed
59
that you might find in "before_install" since they're related to setting git
Dave Syer committed
60 61
credentials and you already have those.

Dave Syer committed
62 63 64 65 66 67 68 69
The projects that require middleware generally include a
`docker-compose.yml`, so consider using
http://compose.docker.io/[Docker Compose] to run the middeware servers
in Docker containers. See the README in the
https://github.com/spring-cloud-samples/scripts[scripts demo
repository] for specific instructions about the common cases of mongo,
rabbit and redis.

Dave Syer committed
70 71
NOTE: If all else fails, build with the command from `.travis.yml` (usually
`./mvnw install`).
Dave Syer committed
72

Dave Syer committed
73
=== Documentation
Dave Syer committed
74 75 76 77 78 79 80 81 82 83 84 85 86 87

The spring-cloud-build module has a "docs" profile, and if you switch
that on it will try to build asciidoc sources from
`src/main/asciidoc`. As part of that process it will look for a
`README.adoc` and process it by loading all the includes, but not
parsing or rendering it, just copying it to `${main.basedir}`
(defaults to `${basedir}`, i.e. the root of the project). If there are
any changes in the README it will then show up after a Maven build as
a modified file in the correct place. Just commit it and push the change.

=== Working with the code
If you don't have an IDE preference we would recommend that you use
http://www.springsource.com/developer/sts[Spring Tools Suite] or
http://eclipse.org[Eclipse] when working with the code. We use the
88
http://eclipse.org/m2e/[m2eclipse] eclipse plugin for maven support. Other IDEs and tools
89
should also work without issue as long as they use Maven 3.3.3 or better.
Dave Syer committed
90

Dave Syer committed
91
==== Importing into eclipse with m2eclipse
92
We recommend the http://eclipse.org/m2e/[m2eclipse] eclipse plugin when working with
Dave Syer committed
93 94 95
eclipse. If you don't already have m2eclipse installed it is available from the "eclipse
marketplace".

96 97 98 99 100 101 102 103
NOTE: Older versions of m2e do not support Maven 3.3, so once the
projects are imported into Eclipse you will also need to tell
m2eclipse to use the right profile for the projects.  If you
see many different errors related to the POMs in the projects, check
that you have an up to date installation.  If you can't upgrade m2e,
add the "spring" profile to your `settings.xml`. Alternatively you can
copy the repository settings from the "spring" profile of the parent
pom into your `settings.xml`.
Dave Syer committed
104

Dave Syer committed
105
==== Importing into eclipse without m2eclipse
Dave Syer committed
106 107 108 109 110
If you prefer not to use m2eclipse you can generate eclipse project metadata using the
following command:

[indent=0]
----
Dave Syer committed
111
	$ ./mvnw eclipse:eclipse
Dave Syer committed
112 113 114 115 116
----

The generated eclipse projects can be imported by selecting `import existing projects`
from the `file` menu.

117

Dave Syer committed
118 119 120

== Contributing

Dave Syer committed
121 122 123 124 125
Spring Cloud is released under the non-restrictive Apache 2.0 license,
and follows a very standard Github development process, using Github
tracker for issues and merging pull requests into master. If you want
to contribute even something trivial please do not hesitate, but
follow the guidelines below.
Dave Syer committed
126 127 128

=== Sign the Contributor License Agreement
Before we accept a non-trivial patch or pull request we will need you to sign the
129
https://cla.pivotal.io/sign/spring[Contributor License Agreement].
Dave Syer committed
130 131 132 133 134
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
given the ability to merge pull requests.

135 136 137 138 139
=== Code of Conduct
This project adheres to the Contributor Covenant https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[code of
conduct]. By participating, you  are expected to uphold this code. Please report
unacceptable behavior to spring-code-of-conduct@pivotal.io.

Dave Syer committed
140 141 142 143 144 145 146
=== 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.

* Use the Spring Framework code format conventions. If you use Eclipse
  you can import formatter settings using the
  `eclipse-code-formatter.xml` file from the
147
  https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring
Dave Syer committed
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
  Cloud Build] project. If using IntelliJ, you can use the
  http://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter
  Plugin] to import the same file.
* 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).
* Add some Javadocs and, if you change the namespace, some XSD doc elements.
* 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).
* 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).