Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
2303c3ae
Commit
2303c3ae
authored
Oct 09, 2014
by
Phillip Webb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix asciidoctor 'spaces' conversion issues
parent
3b2fb305
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
47 additions
and
47 deletions
+47
-47
howto.adoc
spring-boot-docs/src/main/asciidoc/howto.adoc
+47
-47
No files found.
spring-boot-docs/src/main/asciidoc/howto.adoc
View file @
2303c3ae
[[howto]]
[[howto]]
= '`How-to`'
guides
= '`How-to`' guides
[partintro]
[partintro]
--
--
...
@@ -12,7 +12,7 @@ http://stackoverflow.com/tags/spring-boot[stackoverflow.com] to see if someone h
...
@@ -12,7 +12,7 @@ http://stackoverflow.com/tags/spring-boot[stackoverflow.com] to see if someone h
already provided an answer; this is also a great place to ask new questions (please use
already provided an answer; this is also a great place to ask new questions (please use
the `spring-boot` tag).
the `spring-boot` tag).
We're also more than happy to extend this section; If you want to add a '`how-to`'
you
We're also more than happy to extend this section; If you want to add a '`how-to`' you
can send us a {github-code}[pull request].
can send us a {github-code}[pull request].
--
--
...
@@ -25,7 +25,7 @@ can send us a {github-code}[pull request].
...
@@ -25,7 +25,7 @@ can send us a {github-code}[pull request].
[[howto-troubleshoot-auto-configuration]]
[[howto-troubleshoot-auto-configuration]]
=== Troubleshoot auto-configuration
=== Troubleshoot auto-configuration
The Spring Boot auto-configuration tries its best to '`do the right thing`'
, but
The Spring Boot auto-configuration tries its best to '`do the right thing`', but
sometimes things fail and it can be hard to tell why.
sometimes things fail and it can be hard to tell why.
There is a really useful `AutoConfigurationReport` available in any Spring Boot
There is a really useful `AutoConfigurationReport` available in any Spring Boot
...
@@ -80,7 +80,7 @@ The `SpringApplication` sends some special `ApplicationEvents` to the listeners
...
@@ -80,7 +80,7 @@ The `SpringApplication` sends some special `ApplicationEvents` to the listeners
some before the context is created), and then registers the listeners for events published
some before the context is created), and then registers the listeners for events published
by the `ApplicationContext` as well. See
by the `ApplicationContext` as well. See
'<<spring-boot-features.adoc#boot-features-application-events-and-listeners>>' in the
'<<spring-boot-features.adoc#boot-features-application-events-and-listeners>>' in the
'`Spring Boot features`'
section for a complete list.
'`Spring Boot features`' section for a complete list.
...
@@ -88,7 +88,7 @@ by the `ApplicationContext` as well. See
...
@@ -88,7 +88,7 @@ by the `ApplicationContext` as well. See
=== Build an ApplicationContext hierarchy (adding a parent or root context)
=== Build an ApplicationContext hierarchy (adding a parent or root context)
You can use the `ApplicationBuilder` class to create parent/child `ApplicationContext`
You can use the `ApplicationBuilder` class to create parent/child `ApplicationContext`
hierarchies. See '<<spring-boot-features.adoc#boot-features-fluent-builder-api>>'
hierarchies. See '<<spring-boot-features.adoc#boot-features-fluent-builder-api>>'
in the '`Spring Boot features`'
section for more information.
in the '`Spring Boot features`' section for more information.
...
@@ -136,7 +136,7 @@ underscores (`_`) as well as dashes (`-`) in property names.
...
@@ -136,7 +136,7 @@ underscores (`_`) as well as dashes (`-`) in property names.
=== Change the location of external properties of an application
=== Change the location of external properties of an application
By default properties from different sources are added to the Spring `Environment` in a
By default properties from different sources are added to the Spring `Environment` in a
defined order (see '<<spring-boot-features.adoc#boot-features-external-config>>' in
defined order (see '<<spring-boot-features.adoc#boot-features-external-config>>' in
the '`Spring Boot features`'
section for the exact order).
the '`Spring Boot features`' section for the exact order).
A nice way to augment and modify this is to add `@PropertySource` annotations to your
A nice way to augment and modify this is to add `@PropertySource` annotations to your
application sources. Classes passed to the `SpringApplication` static convenience
application sources. Classes passed to the `SpringApplication` static convenience
...
@@ -156,7 +156,7 @@ You can also provide System properties (or environment variables) to change the
...
@@ -156,7 +156,7 @@ You can also provide System properties (or environment variables) to change the
command line.
command line.
No matter what you set in the environment, Spring Boot will always load
No matter what you set in the environment, Spring Boot will always load
`application.properties` as described above. If YAML is used then files with the '`.yml`'
`application.properties` as described above. If YAML is used then files with the '`.yml`'
extension are also added to the list by default.
extension are also added to the list by default.
See {sc-spring-boot}/context/config/ConfigFileApplicationListener.{sc-ext}[`ConfigFileApplicationListener`]
See {sc-spring-boot}/context/config/ConfigFileApplicationListener.{sc-ext}[`ConfigFileApplicationListener`]
...
@@ -165,7 +165,7 @@ for more detail.
...
@@ -165,7 +165,7 @@ for more detail.
[[howto-use-short-command-line-arguments]]
[[howto-use-short-command-line-arguments]]
=== Use '`short`'
command line arguments
=== Use '`short`' command line arguments
Some people like to use (for example) `--port=9000` instead of `--server.port=9000` to
Some people like to use (for example) `--port=9000` instead of `--server.port=9000` to
set configuration properties on the command line. You can easily enable this by using
set configuration properties on the command line. You can easily enable this by using
placeholders in `application.properties`, e.g.
placeholders in `application.properties`, e.g.
...
@@ -223,7 +223,7 @@ The example YAML above corresponds to an `application.properties` file
...
@@ -223,7 +223,7 @@ The example YAML above corresponds to an `application.properties` file
----
----
See '<<spring-boot-features.adoc#boot-features-external-config-yaml>>' in
See '<<spring-boot-features.adoc#boot-features-external-config-yaml>>' in
the '`Spring Boot features`'
section for more information
the '`Spring Boot features`' section for more information
about YAML.
about YAML.
[[howto-set-active-spring-profiles]]
[[howto-set-active-spring-profiles]]
...
@@ -250,7 +250,7 @@ but not by the `SpringApplicationBuilder.profiles()` method. Thus the latter Jav
...
@@ -250,7 +250,7 @@ but not by the `SpringApplicationBuilder.profiles()` method. Thus the latter Jav
be used to augment the profiles without changing the defaults.
be used to augment the profiles without changing the defaults.
See '<<spring-boot-features.adoc#boot-features-profiles>>' in
See '<<spring-boot-features.adoc#boot-features-profiles>>' in
the '`Spring Boot features`'
section for more information.
the '`Spring Boot features`' section for more information.
...
@@ -285,8 +285,8 @@ Example:
...
@@ -285,8 +285,8 @@ Example:
port: 0
port: 0
----
----
In this example the default port is 9000, but if the Spring profile '`development`'
is
In this example the default port is 9000, but if the Spring profile '`development`' is
active then the port is 9001, and if '`production`'
is active then it is 0.
active then the port is 9001, and if '`production`' is active then it is 0.
The YAML documents are merged in the order they are encountered (so later values override
The YAML documents are merged in the order they are encountered (so later values override
earlier ones).
earlier ones).
...
@@ -366,7 +366,7 @@ that and be sure that it has initialized is to add a `@Bean` of type
...
@@ -366,7 +366,7 @@ that and be sure that it has initialized is to add a `@Bean` of type
out of the event when it is published.
out of the event when it is published.
A really useful thing to do in is to use `@IntegrationTest` to set `server.port=0`
A really useful thing to do in is to use `@IntegrationTest` to set `server.port=0`
and then inject the actual ('`local`'
) port as a `@Value`. For example:
and then inject the actual ('`local`') port as a `@Value`. For example:
[source,java,indent=0,subs="verbatim,quotes,attributes"]
[source,java,indent=0,subs="verbatim,quotes,attributes"]
----
----
...
@@ -772,45 +772,45 @@ added.
...
@@ -772,45 +772,45 @@ added.
`WebMvcAutoConfiguration` adds the following `ViewResolvers` to your context:
`WebMvcAutoConfiguration` adds the following `ViewResolvers` to your context:
* An `InternalResourceViewResolver` with bean id '`defaultViewResolver`'
. This one locates
* An `InternalResourceViewResolver` with bean id '`defaultViewResolver`'. This one locates
physical resources that can be rendered using the `DefaultServlet` (e.g. static
physical resources that can be rendered using the `DefaultServlet` (e.g. static
resources and JSP pages if you are using those). It applies a prefix and a suffix to the
resources and JSP pages if you are using those). It applies a prefix and a suffix to the
view name and then looks for a physical resource with that path in the servlet context
view name and then looks for a physical resource with that path in the servlet context
(defaults are both empty, but accessible for external configuration via
(defaults are both empty, but accessible for external configuration via
`spring.view.prefix` and `spring.view.suffix`). It can be overridden by providing a
`spring.view.prefix` and `spring.view.suffix`). It can be overridden by providing a
bean of the same type.
bean of the same type.
* A `BeanNameViewResolver` with id '`beanNameViewResolver`'
. This is a useful member of the
* A `BeanNameViewResolver` with id '`beanNameViewResolver`'. This is a useful member of the
view resolver chain and will pick up any beans with the same name as the `View` being
view resolver chain and will pick up any beans with the same name as the `View` being
resolved. It shouldn't be necessary to override or replace it.
resolved. It shouldn't be necessary to override or replace it.
* A `ContentNegotiatingViewResolver` with id '`viewResolver`'
is only added if there *are*
* A `ContentNegotiatingViewResolver` with id '`viewResolver`' is only added if there *are*
actually beans of type `View` present. This is a '`master`'
resolver, delegating to all
actually beans of type `View` present. This is a '`master`' resolver, delegating to all
the others and attempting to find a match to the '`Accept`'
HTTP header sent by the
the others and attempting to find a match to the '`Accept`' HTTP header sent by the
client. There is a useful
client. There is a useful
https://spring.io/blog/2013/06/03/content-negotiation-using-views[blog about `ContentNegotiatingViewResolver`]
https://spring.io/blog/2013/06/03/content-negotiation-using-views[blog about `ContentNegotiatingViewResolver`]
that you might like to study to learn more, and also look at the source code for detail.
that you might like to study to learn more, and also look at the source code for detail.
You can switch off the auto-configured
You can switch off the auto-configured
`ContentNegotiatingViewResolver` by defining a bean named '`viewResolver`'
.
`ContentNegotiatingViewResolver` by defining a bean named '`viewResolver`'.
* If you use Thymeleaf you will also have a `ThymeleafViewResolver` with id
* If you use Thymeleaf you will also have a `ThymeleafViewResolver` with id
'`thymeleafViewResolver`'
. It looks for resources by surrounding the view name with a
'`thymeleafViewResolver`'. It looks for resources by surrounding the view name with a
prefix and suffix (externalized to `spring.thymeleaf.prefix` and
prefix and suffix (externalized to `spring.thymeleaf.prefix` and
`spring.thymeleaf.suffix`, defaults '`classpath:/templates/`'
and '`.html`'
`spring.thymeleaf.suffix`, defaults '`classpath:/templates/`'
and '`.html`'
respectively). It can be overridden by providing a bean of the same name.
respectively). It can be overridden by providing a bean of the same name.
* If you use FreeMarker you will also have a `FreeMarkerViewResolver` with id
* If you use FreeMarker you will also have a `FreeMarkerViewResolver` with id
'`freeMarkerViewResolver`'
. It looks for resources in a loader path (externalized to
'`freeMarkerViewResolver`'. It looks for resources in a loader path (externalized to
`spring.freemarker.templateLoaderPath`, default '`classpath:/templates/`'
) by
`spring.freemarker.templateLoaderPath`, default '`classpath:/templates/`') by
surrounding the view name with a prefix and suffix (externalized to `spring.freemarker.prefix`
surrounding the view name with a prefix and suffix (externalized to `spring.freemarker.prefix`
and `spring.freemarker.suffix`, with empty and '`.ftl`'
defaults respectively). It can
and `spring.freemarker.suffix`, with empty and '`.ftl`' defaults respectively). It can
be overridden by providing a bean of the same name.
be overridden by providing a bean of the same name.
* If you use Groovy templates (actually if groovy-templates is on your classpath) you will
* If you use Groovy templates (actually if groovy-templates is on your classpath) you will
also have a `Groovy TemplateViewResolver` with id '`groovyTemplateViewResolver`'
. It
also have a `Groovy TemplateViewResolver` with id '`groovyTemplateViewResolver`'. It
looks for resources in a loader path by surrounding the view name with a prefix and
looks for resources in a loader path by surrounding the view name with a prefix and
suffix (externalized to `spring.groovy.template.prefix` and
suffix (externalized to `spring.groovy.template.prefix` and
`spring.groovy.template.suffix`, defaults '`classpath:/templates/`'
and '`.tpl`'
`spring.groovy.template.suffix`, defaults '`classpath:/templates/`'
and '`.tpl`'
respectively). It can be overriden by providing a bean of the same name.
respectively). It can be overriden by providing a bean of the same name.
* If you use Velocity you will also have a `VelocityViewResolver` with id '`velocityViewResolver`'
.
* If you use Velocity you will also have a `VelocityViewResolver` with id '`velocityViewResolver`'.
It looks for resources in a loader path (externalized to `spring.velocity.resourceLoaderPath`,
It looks for resources in a loader path (externalized to `spring.velocity.resourceLoaderPath`,
default '`classpath:/templates/`'
) by surrounding the view name with a prefix and suffix
default '`classpath:/templates/`') by surrounding the view name with a prefix and suffix
(externalized to `spring.velocity.prefix` and `spring.velocity.suffix`, with empty and '`.vm`'
(externalized to `spring.velocity.prefix` and `spring.velocity.suffix`, with empty and '`.vm`'
defaults respectively). It can be overridden by providing a bean of the same name.
defaults respectively). It can be overridden by providing a bean of the same name.
Check out {sc-spring-boot-autoconfigure}/web/WebMvcAutoConfiguration.{sc-ext}[`WebMvcAutoConfiguration`],
Check out {sc-spring-boot-autoconfigure}/web/WebMvcAutoConfiguration.{sc-ext}[`WebMvcAutoConfiguration`],
...
@@ -965,7 +965,7 @@ your own, and bind it to a set of `Environment` properties e.g.
...
@@ -965,7 +965,7 @@ your own, and bind it to a set of `Environment` properties e.g.
----
----
See '<<spring-boot-features.adoc#boot-features-configure-datasource>>' in the
See '<<spring-boot-features.adoc#boot-features-configure-datasource>>' in the
'`Spring Boot features`'
section and the
'`Spring Boot features`' section and the
{sc-spring-boot-autoconfigure}/jdbc/DataSourceAutoConfiguration.{sc-ext}[`DataSourceAutoConfiguration`]
{sc-spring-boot-autoconfigure}/jdbc/DataSourceAutoConfiguration.{sc-ext}[`DataSourceAutoConfiguration`]
class for more details.
class for more details.
...
@@ -1063,7 +1063,7 @@ for more details.
...
@@ -1063,7 +1063,7 @@ for more details.
[[howto-use-custom-entity-manager]]
[[howto-use-custom-entity-manager]]
=== Use a custom EntityManagerFactory
=== Use a custom EntityManagerFactory
To take full control of the configuration of the `EntityManagerFactory`, you need to add
To take full control of the configuration of the `EntityManagerFactory`, you need to add
a `@Bean` named '`entityManagerFactory`'
. Spring Boot auto-configuration switches off its
a `@Bean` named '`entityManagerFactory`'. Spring Boot auto-configuration switches off its
entity manager based on the presence of a bean of that type.
entity manager based on the presence of a bean of that type.
...
@@ -1118,7 +1118,7 @@ might be able to use a JTA transaction manager spanning both.
...
@@ -1118,7 +1118,7 @@ might be able to use a JTA transaction manager spanning both.
Spring doesn't require the use of XML to configure the JPA provider, and Spring Boot
Spring doesn't require the use of XML to configure the JPA provider, and Spring Boot
assumes you want to take advantage of that feature. If you prefer to use `persistence.xml`
assumes you want to take advantage of that feature. If you prefer to use `persistence.xml`
then you need to define your own `@Bean` of type `LocalEntityManagerFactoryBean` (with
then you need to define your own `@Bean` of type `LocalEntityManagerFactoryBean` (with
id '`entityManagerFactory`'
, and set the persistence unit name there.
id '`entityManagerFactory`', and set the persistence unit name there.
See
See
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java[`JpaBaseConfiguration`]
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java[`JpaBaseConfiguration`]
...
@@ -1134,7 +1134,7 @@ automatically. If they are both present on the classpath, you might have to do s
...
@@ -1134,7 +1134,7 @@ automatically. If they are both present on the classpath, you might have to do s
configuration to tell Spring Boot which one (or both) you want to create repositories for
configuration to tell Spring Boot which one (or both) you want to create repositories for
you. The most explicit way to do that is to use the standard Spring Data
you. The most explicit way to do that is to use the standard Spring Data
`@Enable*Repositories` and tell it the location of your `Repository` interfaces
`@Enable*Repositories` and tell it the location of your `Repository` interfaces
(where '`*`'
is '`Jpa`' or '`Mongo`'
or both).
(where '`*`'
is '`Jpa`' or '`Mongo`'
or both).
There are also flags `spring.data.*.repositories.enabled` that you can use to switch the
There are also flags `spring.data.*.repositories.enabled` that you can use to switch the
auto-configured repositories on and off in external configuration. This is useful for
auto-configured repositories on and off in external configuration. This is useful for
...
@@ -1173,7 +1173,7 @@ values are `none`, `validate`, `update`, `create-drop`. Spring Boot chooses a de
...
@@ -1173,7 +1173,7 @@ values are `none`, `validate`, `update`, `create-drop`. Spring Boot chooses a de
value for you based on whether it thinks your database is embedded (default `create-drop`)
value for you based on whether it thinks your database is embedded (default `create-drop`)
or not (default `none`). An embedded database is detected by looking at the `Connection`
or not (default `none`). An embedded database is detected by looking at the `Connection`
type: `hsqldb`, `h2` and `derby` are embedded, the rest are not. Be careful when switching
type: `hsqldb`, `h2` and `derby` are embedded, the rest are not. Be careful when switching
from in-memory to a '`real`'
database that you don't make assumptions about the existence of
from in-memory to a '`real`' database that you don't make assumptions about the existence of
the tables and data in the new platform. You either have to set `ddl-auto` explicitly, or
the tables and data in the new platform. You either have to set `ddl-auto` explicitly, or
use one of the other mechanisms to initialize the database.
use one of the other mechanisms to initialize the database.
...
@@ -1199,7 +1199,7 @@ to start. The script locations can be changed by setting `spring.datasource.sche
...
@@ -1199,7 +1199,7 @@ to start. The script locations can be changed by setting `spring.datasource.sche
To disable the failfast you can set `spring.datasource.continueOnError=true`. This can be
To disable the failfast you can set `spring.datasource.continueOnError=true`. This can be
useful once an application has matured and been deployed a few times, since the scripts
useful once an application has matured and been deployed a few times, since the scripts
can act as '`poor man's migrations`'
-- inserts that fail mean that the data is already
can act as '`poor man's migrations`' -- inserts that fail mean that the data is already
there, so there would be no need to prevent the application from running, for instance.
there, so there would be no need to prevent the application from running, for instance.
If you want to use the `schema.sql` initialization in a JPA app (with
If you want to use the `schema.sql` initialization in a JPA app (with
...
@@ -1236,7 +1236,7 @@ To automatically run Flyway database migrations on startup, add the
...
@@ -1236,7 +1236,7 @@ To automatically run Flyway database migrations on startup, add the
`org.flywaydb:flyway-core` to your classpath.
`org.flywaydb:flyway-core` to your classpath.
The migrations are scripts in the form `V<VERSION>__<NAME>.sql` (with `<VERSION>` an
The migrations are scripts in the form `V<VERSION>__<NAME>.sql` (with `<VERSION>` an
underscore-separated version, e.g. '`1`'
or '`2_1`'
). By default they live in a folder
underscore-separated version, e.g. '`1`'
or '`2_1`'
). By default they live in a folder
`classpath:db/migration` but you can modify that using `flyway.locations` (a list). See
`classpath:db/migration` but you can modify that using `flyway.locations` (a list). See
the Flyway class from flyway-core for details of available settings like schemas etc. In
the Flyway class from flyway-core for details of available settings like schemas etc. In
addition Spring Boot provides a small set of properties in
addition Spring Boot provides a small set of properties in
...
@@ -1315,13 +1315,13 @@ For more detail look at the
...
@@ -1315,13 +1315,13 @@ For more detail look at the
{sc-spring-boot-actuator}/autoconfigure/ManagementServerProperties.{sc-ext}[`ManagementServerProperties`]
{sc-spring-boot-actuator}/autoconfigure/ManagementServerProperties.{sc-ext}[`ManagementServerProperties`]
source code and
source code and
'<<production-ready-features.adoc#production-ready-customizing-management-server-port>>'
'<<production-ready-features.adoc#production-ready-customizing-management-server-port>>'
in the '`Production-ready features`'
section.
in the '`Production-ready features`' section.
[[howto-customize-the-whitelabel-error-page]]
[[howto-customize-the-whitelabel-error-page]]
=== Customize the '`whitelabel`'
error page
=== Customize the '`whitelabel`' error page
Spring Boot installs a '`whitelabel`'
error page that you will see in browser client if
Spring Boot installs a '`whitelabel`' error page that you will see in browser client if
you encounter a server error (machine clients consuming JSON and other media types should
you encounter a server error (machine clients consuming JSON and other media types should
see a sensible response with the right error code). To switch it off you can set
see a sensible response with the right error code). To switch it off you can set
`error.whitelabel.enabled=false`, but normally in addition or alternatively to that you
`error.whitelabel.enabled=false`, but normally in addition or alternatively to that you
...
@@ -1530,7 +1530,7 @@ To configure IntelliJ correctly you can use the `idea` Gradle plugin:
...
@@ -1530,7 +1530,7 @@ To configure IntelliJ correctly you can use the `idea` Gradle plugin:
NOTE: Intellij must be configured to use the same Java version as the command line Gradle
NOTE: Intellij must be configured to use the same Java version as the command line Gradle
task and `springloaded` *must* be included as a `buildscript` dependency.
task and `springloaded` *must* be included as a `buildscript` dependency.
You can also additionally enable '`Make Project Automatically`'
inside Intellij to
You can also additionally enable '`Make Project Automatically`' inside Intellij to
automatically compile your code whenever a file is saved.
automatically compile your code whenever a file is saved.
...
@@ -1568,7 +1568,7 @@ third-party dependencies. Overriding versions may cause compatibility issues.
...
@@ -1568,7 +1568,7 @@ third-party dependencies. Overriding versions may cause compatibility issues.
[[howto-create-an-executable-jar-with-maven]]
[[howto-create-an-executable-jar-with-maven]]
=== Create an executable JAR with Maven
=== Create an executable JAR with Maven
The `spring-boot-maven-plugin` can be used to create an executable '`fat`'
JAR. If you
The `spring-boot-maven-plugin` can be used to create an executable '`fat`' JAR. If you
are using the `spring-boot-starter-parent` POM you can simply declare the plugin and
are using the `spring-boot-starter-parent` POM you can simply declare the plugin and
your jars will be repackaged:
your jars will be repackaged:
...
@@ -1617,7 +1617,7 @@ If you want to use your project as a library jar for other projects to depend on
...
@@ -1617,7 +1617,7 @@ If you want to use your project as a library jar for other projects to depend on
addition have an executable (e.g. demo) version of it, you will want to configure the
addition have an executable (e.g. demo) version of it, you will want to configure the
build in a slightly different way.
build in a slightly different way.
For Maven the normal JAR plugin and the Spring Boot plugin both have a '`classifier`'
For Maven the normal JAR plugin and the Spring Boot plugin both have a '`classifier`'
configuration that you can add to create an additional JAR. Example (using the Spring
configuration that you can add to create an additional JAR. Example (using the Spring
Boot Starter Parent to manage the plugin versions and other configuration defaults):
Boot Starter Parent to manage the plugin versions and other configuration defaults):
...
@@ -1637,7 +1637,7 @@ Boot Starter Parent to manage the plugin versions and other configuration defaul
...
@@ -1637,7 +1637,7 @@ Boot Starter Parent to manage the plugin versions and other configuration defaul
----
----
Two jars are produced, the default one, and an executable one using the Boot plugin with
Two jars are produced, the default one, and an executable one using the Boot plugin with
classifier '`exec`'
.
classifier '`exec`'.
For Gradle users the steps are similar. Example:
For Gradle users the steps are similar. Example:
...
@@ -1658,7 +1658,7 @@ jar support which assumes that the `jruby-complete.jar` is always directly avail
...
@@ -1658,7 +1658,7 @@ jar support which assumes that the `jruby-complete.jar` is always directly avail
file in its own right.
file in its own right.
To deal with any problematic libraries, you can flag that specific nested jars should be
To deal with any problematic libraries, you can flag that specific nested jars should be
automatically unpacked to the '`temp folder`'
when the executable jar first runs.
automatically unpacked to the '`temp folder`' when the executable jar first runs.
For example, to indicate that JRuby should be flagged for unpack using the Maven Plugin
For example, to indicate that JRuby should be flagged for unpack using the Maven Plugin
you would add the following configuration:
you would add the following configuration:
...
@@ -1815,7 +1815,7 @@ archive as normal. To make it executable:
...
@@ -1815,7 +1815,7 @@ archive as normal. To make it executable:
. Use the appropriate launcher as a `Main-Class`, e.g. `JarLauncher` for a jar file, and
. Use the appropriate launcher as a `Main-Class`, e.g. `JarLauncher` for a jar file, and
specify the other properties it needs as manifest entries, principally a `Start-Class`.
specify the other properties it needs as manifest entries, principally a `Start-Class`.
. Add the runtime dependencies in a nested '`lib`'
directory (for a jar) and the
. Add the runtime dependencies in a nested '`lib`' directory (for a jar) and the
`provided` (embedded container) dependencies in a nested `lib-provided` directory.
`provided` (embedded container) dependencies in a nested `lib-provided` directory.
Remember *not* to compress the entries in the archive.
Remember *not* to compress the entries in the archive.
...
@@ -1868,13 +1868,13 @@ after which you can run the application with
...
@@ -1868,13 +1868,13 @@ after which you can run the application with
Use the `SpringBootServletInitializer` base class, which is picked up by Spring's
Use the `SpringBootServletInitializer` base class, which is picked up by Spring's
Servlet 3.0 support on deployment. Add an extension of that to your project and build a
Servlet 3.0 support on deployment. Add an extension of that to your project and build a
war file as normal. For more detail, see the
war file as normal. For more detail, see the
http://spring.io/guides/gs/convert-jar-to-war['`Converting a jar Project to a war`'
] guide
http://spring.io/guides/gs/convert-jar-to-war['`Converting a jar Project to a war`'] guide
on the spring.io website and the sample below.
on the spring.io website and the sample below.
The war file can also be executable if you use the Spring Boot build tools. In that case
The war file can also be executable if you use the Spring Boot build tools. In that case
the embedded container classes (to launch Tomcat for instance) have to be added to the
the embedded container classes (to launch Tomcat for instance) have to be added to the
war in a `lib-provided` directory. The tools will take care of that as long as the
war in a `lib-provided` directory. The tools will take care of that as long as the
dependencies are marked as '`provided`'
in Maven or Gradle. Here's a Maven example
dependencies are marked as '`provided`' in Maven or Gradle. Here's a Maven example
{github-code}/spring-boot-samples/spring-boot-sample-traditional/pom.xml[in the Boot Samples].
{github-code}/spring-boot-samples/spring-boot-sample-traditional/pom.xml[in the Boot Samples].
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment