spring-cloud-gateway
An API Gateway built on Spring Framework and Spring Boot providing routing and more.
Top Related Projects
Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more.
🦍 The Cloud-Native API Gateway and AI Gateway.
Cloud-native high-performance edge/middle/service proxy
The Cloud Native Application Proxy
The Cloud-Native API Gateway
Quick Overview
Spring Cloud Gateway is a powerful and flexible API Gateway built on top of Spring Framework 5, Spring Boot 2, and Project Reactor. It provides a simple, yet effective way to route to APIs and provides cross-cutting concerns to them such as security, monitoring/metrics, and resiliency.
Pros
- Easy integration with Spring ecosystem and microservices architecture
- Highly customizable with predicate and filter factories
- Non-blocking and supports WebFlux for high performance
- Built-in support for circuit breaking, rate limiting, and load balancing
Cons
- Steeper learning curve compared to simpler API gateways
- Requires Java runtime, which may not be suitable for all environments
- Configuration can become complex for large-scale deployments
- Limited support for non-Spring applications
Code Examples
- Basic route configuration:
spring:
cloud:
gateway:
routes:
- id: example_route
uri: https://example.org
predicates:
- Path=/example/**
This example defines a simple route that forwards requests with the path /example/**
to https://example.org
.
- Adding a filter to a route:
spring:
cloud:
gateway:
routes:
- id: rewrite_route
uri: https://example.org
predicates:
- Path=/rewrite/**
filters:
- RewritePath=/rewrite/(?<segment>.*), /$\{segment}
This route uses a RewritePath
filter to modify the request path before forwarding it to the destination.
- Programmatic route configuration:
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("path_route", r -> r.path("/get")
.uri("http://httpbin.org"))
.route("host_route", r -> r.host("*.myhost.org")
.uri("http://httpbin.org"))
.build();
}
This Java code demonstrates how to programmatically define routes using the RouteLocatorBuilder
.
Getting Started
To get started with Spring Cloud Gateway, add the following dependency to your pom.xml
:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
Then, create a Spring Boot application with @EnableDiscoveryClient
annotation:
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
Finally, configure your routes in application.yml
or programmatically as shown in the code examples above.
Competitor Comparisons
Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more.
Pros of Zuul
- Mature and battle-tested in production environments
- Extensive documentation and community support
- Seamless integration with other Netflix OSS components
Cons of Zuul
- Limited support for non-JVM languages
- Slower development cycle and fewer updates
- Less flexible routing capabilities compared to modern alternatives
Code Comparison
Zuul configuration:
zuul:
routes:
users:
path: /users/**
serviceId: user-service
Spring Cloud Gateway configuration:
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/users/**
Spring Cloud Gateway offers more concise and flexible routing configuration, allowing for easier customization of request handling. Zuul's configuration is straightforward but less adaptable to complex routing scenarios.
Both projects serve as API gateways, but Spring Cloud Gateway is built on Spring WebFlux, offering better performance and scalability for reactive applications. Zuul, while reliable, is based on a blocking I/O model, which may limit its performance in high-concurrency scenarios.
Spring Cloud Gateway provides more modern features like support for WebSocket and non-blocking APIs, making it a better choice for microservices architectures. However, Zuul's stability and extensive production use make it a solid option for organizations already invested in the Netflix ecosystem.
🦍 The Cloud-Native API Gateway and AI Gateway.
Pros of Kong
- More comprehensive API management features, including authentication, rate limiting, and analytics
- Supports multiple programming languages and platforms
- Highly scalable and designed for microservices architectures
Cons of Kong
- Steeper learning curve due to its extensive feature set
- Requires more resources to run and maintain
- Less integrated with the Spring ecosystem
Code Comparison
Kong (Lua):
local kong = kong
local request_uri = ngx.var.request_uri
if string.match(request_uri, "^/api/") then
kong.service.request.set_path("/v1" .. request_uri)
end
Spring Cloud Gateway (Java):
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("rewrite_route", r -> r.path("/api/**")
.filters(f -> f.rewritePath("/api/(?<segment>.*)", "/v1/${segment}"))
.uri("http://example.com"))
.build();
}
Both examples demonstrate path rewriting functionality, with Kong using Lua and Spring Cloud Gateway using Java. Kong's approach is more low-level, while Spring Cloud Gateway leverages Spring's declarative configuration style.
Cloud-native high-performance edge/middle/service proxy
Pros of Envoy
- Language-agnostic: Works with any programming language or framework
- High performance: Designed for low latency and high throughput
- Extensive observability features: Built-in support for tracing, logging, and metrics
Cons of Envoy
- Steeper learning curve: More complex configuration and setup
- Less Spring ecosystem integration: Requires additional work to integrate with Spring applications
Code Comparison
Spring Cloud Gateway:
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("path_route", r -> r.path("/get")
.uri("http://httpbin.org"))
.build();
}
Envoy:
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 8080
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: backend
domains:
- "*"
routes:
- match:
prefix: "/get"
route:
cluster: httpbin
Spring Cloud Gateway is more concise and integrates seamlessly with Spring Boot applications. Envoy's configuration is more verbose but offers greater flexibility and language-agnostic deployment options.
The Cloud Native Application Proxy
Pros of Traefik
- Easier configuration and setup, especially for Docker environments
- Built-in support for multiple providers (Docker, Kubernetes, etc.)
- More comprehensive monitoring and observability features
Cons of Traefik
- Less integration with Spring ecosystem
- May require more manual configuration for complex routing scenarios
- Limited support for custom filters and predicates compared to Spring Cloud Gateway
Code Comparison
Spring Cloud Gateway:
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("path_route", r -> r.path("/get")
.uri("http://httpbin.org"))
.build();
}
Traefik:
http:
routers:
my-router:
rule: "Path(`/get`)"
service: my-service
services:
my-service:
loadBalancer:
servers:
- url: "http://httpbin.org"
Both Spring Cloud Gateway and Traefik are powerful API gateways, but they cater to different use cases. Spring Cloud Gateway is more tightly integrated with the Spring ecosystem, making it a natural choice for Spring-based microservices. It offers fine-grained control over routing and filtering.
Traefik, on the other hand, excels in container-based environments and offers easier configuration, especially for Docker and Kubernetes deployments. It provides built-in support for service discovery and load balancing across multiple providers.
The choice between the two depends on your specific requirements, existing infrastructure, and development ecosystem.
The Cloud-Native API Gateway
Pros of APISIX
- Higher performance and lower latency due to its Lua-based architecture
- More extensive plugin ecosystem with 50+ built-in plugins
- Supports multiple protocols (HTTP, HTTPS, TCP, UDP, and more)
Cons of APISIX
- Steeper learning curve, especially for developers not familiar with Lua
- Less seamless integration with Spring Boot applications
- Smaller community compared to Spring ecosystem
Code Comparison
APISIX configuration (YAML):
routes:
- uri: /test
upstream:
type: roundrobin
nodes:
"127.0.0.1:1980": 1
Spring Cloud Gateway configuration (Java):
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("test", r -> r.path("/test")
.uri("http://127.0.0.1:1980"))
.build();
}
Both APISIX and Spring Cloud Gateway are powerful API gateway solutions, but they cater to different use cases and ecosystems. APISIX excels in high-performance scenarios and offers a wide range of plugins, making it suitable for complex, multi-protocol environments. Spring Cloud Gateway, on the other hand, integrates seamlessly with Spring Boot applications and provides a more familiar Java-based configuration, making it an excellent choice for Spring-centric microservices architectures.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
//// DO NOT EDIT THIS FILE. IT WAS GENERATED. Manual changes to this file will be lost when it is generated again. Edit the files in the src/main/asciidoc/ directory instead. ////
image::https://github.com/spring-cloud/spring-cloud-gateway/workflows/Build/badge.svg?style=svg["Actions Status", link="https://github.com/spring-cloud/spring-cloud-gateway/actions"] image::https://codecov.io/gh/spring-cloud/spring-cloud-gateway/branch/main/graph/badge.svg["Codecov", link="https://codecov.io/gh/spring-cloud/spring-cloud-gateway/branch/main"]
[[features]] = Features
- Java 17
- Spring Framework 6
- Spring Boot 3
- Dynamic routing
- Route matching built into Spring Handler Mapping
- Route matching on HTTP Request (Path, Method, Header, Host, etc...)
- Filters scoped to Matching Route
- Filters can modify downstream HTTP Request and HTTP Response (Add/Remove Headers, Add/Remove Parameters, Rewrite Path, Set Path, Hystrix, etc...)
- API or configuration driven
- Supports Spring Cloud
DiscoveryClient
for configuring Routes
[[building]] = Building
:spring-cloud-build-branch: main
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 main. If you want to contribute even something trivial please do not hesitate, but follow the guidelines below.
[[sign-the-contributor-license-agreement]] == Sign the Contributor License Agreement
Before we accept a non-trivial patch or pull request we will need you to sign the https://cla.pivotal.io/sign/spring[Contributor License 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 given the ability to merge pull requests.
[[code-of-conduct]] == Code of Conduct This project adheres to the Contributor Covenant https://github.com/spring-cloud/spring-cloud-build/blob/main/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.
[[code-conventions-and-housekeeping]] == 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 https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring Cloud Build] project. If using IntelliJ, you can use the https://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 main (or other target branch in the main project).
- When writing a commit message please follow https://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).
[[checkstyle]] == Checkstyle
Spring Cloud Build comes with a set of checkstyle rules. You can find them in the spring-cloud-build-tools
module. The most notable files under the module are:
.spring-cloud-build-tools/
âââ src   âââ checkstyle   â  âââ checkstyle-suppressions.xml <3>   âââ main   âââ resources   âââ checkstyle-header.txt <2>   âââ checkstyle.xml <1>
<1> Default Checkstyle rules <2> File header setup <3> Default suppression rules
[[checkstyle-configuration]] === Checkstyle configuration
Checkstyle rules are disabled by default. To add checkstyle to your project just define the following properties and plugins.
.pom.xml
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
If you need to suppress some rules (e.g. line length needs to be longer), then it's enough for you to define a file under ${project.root}/src/checkstyle/checkstyle-suppressions.xml
with your suppressions. Example:
.projectRoot/src/checkstyle/checkstyle-suppresions.xml
It's advisable to copy the ${spring-cloud-build.rootFolder}/.editorconfig
and ${spring-cloud-build.rootFolder}/.springformat
to your project. That way, some default formatting rules will be applied. You can do so by running this script:
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/.editorconfig -o .editorconfig
$ touch .springformat
[[ide-setup]] == IDE setup
[[intellij-idea]] === Intellij IDEA
In order to setup Intellij you should import our coding conventions, inspection profiles and set up the checkstyle plugin. The following files can be found in the https://github.com/spring-cloud/spring-cloud-build/tree/main/spring-cloud-build-tools[Spring Cloud Build] project.
.spring-cloud-build-tools/
âââ src   âââ checkstyle   â  âââ checkstyle-suppressions.xml <3>   âââ main   âââ resources   âââ checkstyle-header.txt <2>   âââ checkstyle.xml <1>   âââ intellij     âââ Intellij_Project_Defaults.xml <4>     âââ Intellij_Spring_Boot_Java_Conventions.xml <5>
<1> Default Checkstyle rules <2> File header setup <3> Default suppression rules <4> Project defaults for Intellij that apply most of Checkstyle rules <5> Project style conventions for Intellij that apply most of Checkstyle rules
.Code style
Go to File
-> Settings
-> Editor
-> Code style
. There click on the icon next to the Scheme
section. There, click on the Import Scheme
value and pick the Intellij IDEA code style XML
option. Import the spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml
file.
.Inspection profiles
Go to File
-> Settings
-> Editor
-> Inspections
. There click on the icon next to the Profile
section. There, click on the Import Profile
and import the spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml
file.
.Checkstyle
To have Intellij work with Checkstyle, you have to install the Checkstyle
plugin. It's advisable to also install the Assertions2Assertj
to automatically convert the JUnit assertions
Go to File
-> Settings
-> Other settings
-> Checkstyle
. There click on the +
icon in the Configuration file
section. There, you'll have to define where the checkstyle rules should be picked from. In the image above, we've picked the rules from the cloned Spring Cloud Build repository. However, you can point to the Spring Cloud Build's GitHub repository (e.g. for the checkstyle.xml
: https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle.xml
). We need to provide the following variables:
checkstyle.header.file
- please point it to the Spring Cloud Build's,spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
file either in your cloned repo or via thehttps://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
URL.checkstyle.suppressions.file
- default suppressions. Please point it to the Spring Cloud Build's,spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
file either in your cloned repo or via thehttps://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
URL.checkstyle.additional.suppressions.file
- this variable corresponds to suppressions in your local project. E.g. you're working onspring-cloud-contract
. Then point to theproject-root/src/checkstyle/checkstyle-suppressions.xml
folder. Example forspring-cloud-contract
would be:/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml
.
IMPORTANT: Remember to set the Scan Scope
to All sources
since we apply checkstyle rules for production and test sources.
[[duplicate-finder]] == Duplicate Finder
Spring Cloud Build brings along the basepom:duplicate-finder-maven-plugin
, that enables flagging duplicate and conflicting classes and resources on the java classpath.
[[duplicate-finder-configuration]] === Duplicate Finder configuration
Duplicate finder is enabled by default and will run in the verify
phase of your Maven build, but it will only take effect in your project if you add the duplicate-finder-maven-plugin
to the build
section of the projecst's pom.xml
.
.pom.xml [source,xml]
For other properties, we have set defaults as listed in the https://github.com/basepom/duplicate-finder-maven-plugin/wiki[plugin documentation].
You can easily override them but setting the value of the selected property prefixed with duplicate-finder-maven-plugin
. For example, set duplicate-finder-maven-plugin.skip
to true
in order to skip duplicates check in your build.
If you need to add ignoredClassPatterns
or ignoredResourcePatterns
to your setup, make sure to add them in the plugin configuration section of your project:
[source,xml]
[[contributing]] = Contributing
:spring-cloud-build-branch: main
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 main. If you want to contribute even something trivial please do not hesitate, but follow the guidelines below.
[[sign-the-contributor-license-agreement]] == Sign the Contributor License Agreement
Before we accept a non-trivial patch or pull request we will need you to sign the https://cla.pivotal.io/sign/spring[Contributor License 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 given the ability to merge pull requests.
[[code-of-conduct]] == Code of Conduct This project adheres to the Contributor Covenant https://github.com/spring-cloud/spring-cloud-build/blob/main/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.
[[code-conventions-and-housekeeping]] == 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 https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring Cloud Build] project. If using IntelliJ, you can use the https://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 main (or other target branch in the main project).
- When writing a commit message please follow https://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).
[[checkstyle]] == Checkstyle
Spring Cloud Build comes with a set of checkstyle rules. You can find them in the spring-cloud-build-tools
module. The most notable files under the module are:
.spring-cloud-build-tools/
âââ src   âââ checkstyle   â  âââ checkstyle-suppressions.xml <3>   âââ main   âââ resources   âââ checkstyle-header.txt <2>   âââ checkstyle.xml <1>
<1> Default Checkstyle rules <2> File header setup <3> Default suppression rules
[[checkstyle-configuration]] === Checkstyle configuration
Checkstyle rules are disabled by default. To add checkstyle to your project just define the following properties and plugins.
.pom.xml
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
If you need to suppress some rules (e.g. line length needs to be longer), then it's enough for you to define a file under ${project.root}/src/checkstyle/checkstyle-suppressions.xml
with your suppressions. Example:
.projectRoot/src/checkstyle/checkstyle-suppresions.xml
It's advisable to copy the ${spring-cloud-build.rootFolder}/.editorconfig
and ${spring-cloud-build.rootFolder}/.springformat
to your project. That way, some default formatting rules will be applied. You can do so by running this script:
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/.editorconfig -o .editorconfig
$ touch .springformat
[[ide-setup]] == IDE setup
[[intellij-idea]] === Intellij IDEA
In order to setup Intellij you should import our coding conventions, inspection profiles and set up the checkstyle plugin. The following files can be found in the https://github.com/spring-cloud/spring-cloud-build/tree/main/spring-cloud-build-tools[Spring Cloud Build] project.
.spring-cloud-build-tools/
âââ src   âââ checkstyle   â  âââ checkstyle-suppressions.xml <3>   âââ main   âââ resources   âââ checkstyle-header.txt <2>   âââ checkstyle.xml <1>   âââ intellij     âââ Intellij_Project_Defaults.xml <4>     âââ Intellij_Spring_Boot_Java_Conventions.xml <5>
<1> Default Checkstyle rules <2> File header setup <3> Default suppression rules <4> Project defaults for Intellij that apply most of Checkstyle rules <5> Project style conventions for Intellij that apply most of Checkstyle rules
.Code style
Go to File
-> Settings
-> Editor
-> Code style
. There click on the icon next to the Scheme
section. There, click on the Import Scheme
value and pick the Intellij IDEA code style XML
option. Import the spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml
file.
.Inspection profiles
Go to File
-> Settings
-> Editor
-> Inspections
. There click on the icon next to the Profile
section. There, click on the Import Profile
and import the spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml
file.
.Checkstyle
To have Intellij work with Checkstyle, you have to install the Checkstyle
plugin. It's advisable to also install the Assertions2Assertj
to automatically convert the JUnit assertions
Go to File
-> Settings
-> Other settings
-> Checkstyle
. There click on the +
icon in the Configuration file
section. There, you'll have to define where the checkstyle rules should be picked from. In the image above, we've picked the rules from the cloned Spring Cloud Build repository. However, you can point to the Spring Cloud Build's GitHub repository (e.g. for the checkstyle.xml
: https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle.xml
). We need to provide the following variables:
checkstyle.header.file
- please point it to the Spring Cloud Build's,spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
file either in your cloned repo or via thehttps://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
URL.checkstyle.suppressions.file
- default suppressions. Please point it to the Spring Cloud Build's,spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
file either in your cloned repo or via thehttps://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
URL.checkstyle.additional.suppressions.file
- this variable corresponds to suppressions in your local project. E.g. you're working onspring-cloud-contract
. Then point to theproject-root/src/checkstyle/checkstyle-suppressions.xml
folder. Example forspring-cloud-contract
would be:/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml
.
IMPORTANT: Remember to set the Scan Scope
to All sources
since we apply checkstyle rules for production and test sources.
[[duplicate-finder]] == Duplicate Finder
Spring Cloud Build brings along the basepom:duplicate-finder-maven-plugin
, that enables flagging duplicate and conflicting classes and resources on the java classpath.
[[duplicate-finder-configuration]] === Duplicate Finder configuration
Duplicate finder is enabled by default and will run in the verify
phase of your Maven build, but it will only take effect in your project if you add the duplicate-finder-maven-plugin
to the build
section of the projecst's pom.xml
.
.pom.xml [source,xml]
For other properties, we have set defaults as listed in the https://github.com/basepom/duplicate-finder-maven-plugin/wiki[plugin documentation].
You can easily override them but setting the value of the selected property prefixed with duplicate-finder-maven-plugin
. For example, set duplicate-finder-maven-plugin.skip
to true
in order to skip duplicates check in your build.
If you need to add ignoredClassPatterns
or ignoredResourcePatterns
to your setup, make sure to add them in the plugin configuration section of your project:
[source,xml]
Top Related Projects
Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more.
🦍 The Cloud-Native API Gateway and AI Gateway.
Cloud-native high-performance edge/middle/service proxy
The Cloud Native Application Proxy
The Cloud-Native API Gateway
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot