From 6565ff616a827c22b4235d8ce2fb9a94eb4ad4c8 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 19 Sep 2016 13:58:39 +0100 Subject: [PATCH] Clarify documentation on using a Spring Boot app as a dependency Closes gh-6812 --- .../src/main/asciidoc/build-tool-plugins.adoc | 6 ++-- spring-boot-docs/src/main/asciidoc/howto.adoc | 29 ++++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/spring-boot-docs/src/main/asciidoc/build-tool-plugins.adoc b/spring-boot-docs/src/main/asciidoc/build-tool-plugins.adoc index 1fabfbee48..c10945ba47 100644 --- a/spring-boot-docs/src/main/asciidoc/build-tool-plugins.adoc +++ b/spring-boot-docs/src/main/asciidoc/build-tool-plugins.adoc @@ -373,10 +373,10 @@ want the other Boot features but not this one) |`classifier` |A file name segment (before the extension) to add to the archive, so that the original is - preserved in its original location. Defaults to null in which case the archive is + preserved in its original location. Defaults to `null` in which case the archive is repackaged in place. The default is convenient for many purposes, but if you want to use - the original jar as a dependency in another project, it's best to use an extension to - define the executable archive. + the original jar as a dependency in another project you must use a classifier to define + the executable archive. |`withJarTask` |The name or value of the `Jar` task (defaults to all tasks of type `Jar`) which is used diff --git a/spring-boot-docs/src/main/asciidoc/howto.adoc b/spring-boot-docs/src/main/asciidoc/howto.adoc index 4308b3491e..fb7b1d349e 100644 --- a/spring-boot-docs/src/main/asciidoc/howto.adoc +++ b/spring-boot-docs/src/main/asciidoc/howto.adoc @@ -2643,14 +2643,24 @@ details. [[howto-create-an-additional-executable-jar]] -=== Create an additional executable JAR -If you want to use your project as a library jar for other projects to depend on, and in -addition have an executable (e.g. demo) version of it, you will want to configure the -build in a slightly different way. +=== Use a Spring Boot application as a dependency +Like a war file, a Spring Boot application is not intended to be used as a dependency. If +your application contains classes that you want to share with other projects, the +recommended approach is to move that code into a separate module. The separate module can +then be depended upon by your application and other projects. -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 -Boot Starter Parent to manage the plugin versions and other configuration defaults): +If you cannot rearrange your code as recommended above, Spring Boot's Maven and Gradle +plugins must be configured to produce a separate artifact that is suitable for use as a +dependency. The executable archive cannot be used as a dependency as the +<> packages application classes in `BOOT-INF/classes`. This means +that they cannot be found when the executable jar is used as a dependency. + +To produce the two artifacts, one that can be used as a dependency and one that is +executable, a classifier must be specified. This classifier is applied to the name of the +executable archive, leaving the default archive for use as dependency. + +To configure a classifier of `exec` in Maven, the following configuration can be used: [source,xml,indent=0,subs="verbatim,quotes,attributes"] ---- @@ -2667,10 +2677,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 -classifier '`exec`'. - -For Gradle users the steps are similar. Example: +And when using Gradle, the following configuration can be used: [source,groovy,indent=0,subs="verbatim,attributes"] ----