You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
8.1 KiB
Markdown
193 lines
8.1 KiB
Markdown
# Spring Boot - Gradle Plugin
|
|
The Spring Boot Gradle Plugin provides Spring Boot support in Gradle, allowing you to
|
|
package executable jar or war archives, run Spring Boot applications and remove version
|
|
information from your `build.gradle` file.
|
|
|
|
## Including the plugin
|
|
To use the Spring Boot Gradle Plugin simply include a `buildscript` dependency and apply
|
|
the `spring-boot` plugin:
|
|
|
|
```groovy
|
|
buildscript {
|
|
dependencies {
|
|
classpath("org.springframework.boot:spring-boot-gradle-plugin:{{project.version}}")
|
|
}
|
|
}
|
|
apply plugin: 'spring-boot'
|
|
```
|
|
If you are using a milestone or snapshot release you will also need to add appropriate
|
|
`repositories` reference:
|
|
|
|
```groovy
|
|
buildscript {
|
|
repositories {
|
|
maven.url "http://repo.spring.io/snapshot"
|
|
maven.url "http://repo.spring.io/milestone"
|
|
}
|
|
// ...
|
|
}
|
|
```
|
|
|
|
## Declaring dependencies without versions
|
|
The `spring-boot` plugin will register a custom Gradle `ResolutionStrategy` with your
|
|
build that allows you to omit version numbers when declaring dependencies to known
|
|
artifacts. All artifacts with a `org.springframework.boot` group ID, and any of the
|
|
artifacts declared in the `managementDependencies` section of the `spring-dependencies`
|
|
POM can have their version number resolved automatically.
|
|
|
|
Simply declare dependencies in the usual way, but leave the version number empty:
|
|
|
|
```groovy
|
|
dependencies {
|
|
compile("org.springframework.boot:spring-boot-starter-web")
|
|
compile("org.thymeleaf:thymeleaf-spring4")
|
|
compile("nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect")
|
|
}
|
|
```
|
|
|
|
## Packaging executable jar and war files
|
|
Once the `spring-boot` plugin has been applied to your project it will automatically
|
|
attempt to rewrite archives to make them executable using the `bootRepackage` task. You
|
|
should configure your project to build a jar or war (as appropriate) in the usual way.
|
|
|
|
The main class that you want to launch can either be specified using a configuration
|
|
option, or by adding a `Main-Class` attribute to the manifest. If you don't specify a
|
|
main class the plugin will search for a class with a
|
|
`public static void main(String[] args)` method.
|
|
|
|
To build and run a project artifact, you do something like this:
|
|
|
|
```
|
|
$ gradle build
|
|
$ java -jar build/libs/mymodule-0.0.1-SNAPSHOT.jar
|
|
```
|
|
|
|
### Running a Project in Place
|
|
To run a project in place without building a jar first you can use the "bootRun" task:
|
|
|
|
```
|
|
$ gradle bootRun
|
|
```
|
|
|
|
Running this way makes your static classpath resources (i.e. in
|
|
`src/main/resources` by default) reloadable in the live application,
|
|
which can be helpful at development time.
|
|
|
|
### Repackage configuration
|
|
The gradle plugin automatically extends your build script DSL with a `springBoot` element
|
|
for configuration. Simply set the appropriate properties as you would any other gradle
|
|
extension:
|
|
|
|
```groovy
|
|
springBoot {
|
|
backupSource = false
|
|
}
|
|
```
|
|
|
|
### Repackage with Custom Gradle Configuration
|
|
Sometimes it may be more appropriate to not package default dependencies resolved from
|
|
`compile`, `runtime` and `provided` scopes. If created executable jar file
|
|
is intended to be run as it is you need to have all dependencies in it, however
|
|
if a plan is to explode a jar file and run main class manually you may already
|
|
have some of the libraries available via `CLASSPATH`. This is a situation where
|
|
you can repackage boot jar with a different set of dependencies. Using a custom
|
|
configuration will automatically disable dependency resolving from
|
|
`compile`, `runtime` and `provided` scopes. Custom configuration can be either
|
|
defined globally inside `springBoot` or per task.
|
|
|
|
```groovy
|
|
task clientJar(type: Jar) {
|
|
appendix = 'client'
|
|
from sourceSets.main.output
|
|
exclude('**/*Something*')
|
|
}
|
|
|
|
task clientBoot(type: BootRepackage, dependsOn: clientJar) {
|
|
withJarTask = clientJar
|
|
customConfiguration = "mycustomconfiguration"
|
|
}
|
|
```
|
|
In above example we created a new `clientJar` Jar task to package a customized
|
|
file set from your compiled sources. Then we created a new `clientBoot`
|
|
BootRepackage task and instructed it to work with only `clientJar` task and
|
|
`mycustomconfiguration`.
|
|
|
|
```groovy
|
|
configurations {
|
|
mycustomconfiguration.exclude group: 'log4j'
|
|
}
|
|
|
|
dependencies {
|
|
mycustomconfiguration configurations.runtime
|
|
}
|
|
```
|
|
Configuration we are referring to in `BootRepackage` is a normal
|
|
Gradle configuration. In above example we created a new configuration
|
|
named `mycustomconfiguration` instructing it to derive from a `runtime`
|
|
and exclude `log4j` group. If `clientBoot` task is executed, repackaged
|
|
boot jar will have all dependencies from a runtime but no
|
|
log4j jars.
|
|
|
|
The following configuration options are available:
|
|
|
|
|
|
| Name | Type | Description | Default Value |
|
|
|-----------------------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|
|
|
| mainClass | String | The main class that should be run. If not specified the value from the manifest will be used, or if no manifest entry is the archive will be searched for a suitable class | |
|
|
| providedConfiguration | String | The name of the provided configuration | providedRuntime |
|
|
| backupSource | boolean | If the original source archive should be backed-up before being repackaged | true |
|
|
| customConfiguration | String | The name of the custom configuration | none |
|
|
| layout | String | The type of archive (which corresponds to how the dependencies are layed out inside it). Defaults to a guess based on the archive type. |
|
|
|
|
## Further Reading
|
|
For more information on how Spring Boot Loader archives work, take a look at the
|
|
[spring-boot-loader](../spring-boot-loader/README.md) module. If you prefer using Maven to
|
|
build your projects we have a [spring-boot-maven-plugin](../spring-boot-maven-plugin/README.md).
|
|
|
|
### Understanding how Boot Gradle Plugin Works
|
|
When `spring-boot` is applied to your Gradle project a default task
|
|
named `bootRepackage` is created automatically. Boot repackage task
|
|
depends on Gradle `assemble` task and when executed, it tries to find
|
|
all jar artifacts whose qualifier is empty(meaning i.e. tests and
|
|
sources jars are automatically skipped).
|
|
|
|
Because on default every repackage task execution will find all
|
|
created jar artifacts, the order of Gradle task execution is
|
|
important. This is not going to be an issue if you have a normal
|
|
project setup where only one jar file is created. However if you are
|
|
planning to create more complex project setup with custom Jar and
|
|
BootRepackage tasks, there are few tweaks to consider.
|
|
|
|
```groovy
|
|
jar.enabled = false
|
|
bootRepackage.enabled = false
|
|
```
|
|
Above example simply disables default `jar` and `bootRepackage` tasks.
|
|
This would be all right if you are just creating custom jar files
|
|
out from your project. You could also just disable default
|
|
`bootRepackage` task.
|
|
|
|
```groovy
|
|
bootRepackage.withJarTask = jar
|
|
```
|
|
Above example simply instructs default `bootRepackage` task to only
|
|
work with a default `jar` task.
|
|
|
|
|
|
```groovy
|
|
task bootJars
|
|
bootJars.dependsOn = [clientBoot1,clientBoot2,clientBoot3]
|
|
build.dependsOn(bootJars)
|
|
```
|
|
If you still have a default project setup where main jar file is
|
|
created and repackaged to be used with boot and you still want to
|
|
create additional custom jar files out from your project, you
|
|
could simple combine you custom repackage tasks together and
|
|
create dependency to your build so that `bootJars` task would
|
|
be run after the default `bootRepackage` task is executed.
|
|
|
|
All the above tweaks are usually used to avoid situation where
|
|
already created boot jar is repackaged again. Repackaging
|
|
an existing boot jar will not break anything but you may
|
|
get unnecessary dependencies in it.
|