Commit Graph

947 Commits (df8c25e213d6f3f5014c735556404ffc0e9f6a67)

Author SHA1 Message Date
Scott Frederick 653cabe2ce Add documentation for gradle bootBuildImage task 5 years ago
Madhura Bhave bceed1305f Jar files added after build time should be added to classpath
Fixes gh-19973
5 years ago
Scott Frederick b281af0b9b Remove adding of existing layers to EphemeralBuilder
Layers were being added to the EphemeralBuilder each time one was
created, but those layers already existed in the base builder image.

Closes gh-19832
5 years ago
Andy Wilkinson 7b0d1eaffc Test the Gradle Plugin against Gradle 6.1.1
Closes gh-19912
5 years ago
Andy Wilkinson 2725264be1 Polishing formatting of DockerApi 5 years ago
Andy Wilkinson 28442b5ca5 Lower the minimum required Docker API version to 1.24
Closes gh-19945
5 years ago
Andy Wilkinson 54b3f480b4 Use posix long names when creating tar archive for image building
Fixes gh-19964
5 years ago
Scott Frederick c6a6024062 Stop image building on error from builder
Previously, the image builder used by the build tool plugins ignored
errors from lifecycle phases and continued with subsequent phases.

This commit inspects the status of the builder container after each
lifecycle phase and aborts the image building process if the exit
status of the container after any phase is non-zero.

Fixes #19949
5 years ago
dreis2211 d8e2349e47 Use Supplier variants of Assert
See gh-19864
5 years ago
Stephane Nicoll 9fbaf7611b Merge branch '2.2.x'
Closes gh-19966
5 years ago
Stephane Nicoll b420bdb3ac Merge branch '2.1.x' into 2.2.x
Closes gh-19965
5 years ago
dreis2211 db2bacc62a Fix Gradle plugin documentation links
See gh-19961
5 years ago
dreis2211 741a4f4b2b Fix links in Maven Plugin documentation
See gh-19952
5 years ago
Stephane Nicoll 5410148f79 Improve documentation of 'image' parameter of Maven Plugin
Closes gh-19950
5 years ago
Stephane Nicoll 11c5fba355 Remove unnecessary execution-specific configuration in documentation
This documentation moves the specific `build-image` execution
configuration example of the Maven plugin documentation to the general
plugin configuration. This makes sure that it works in most cases and
an execution-specific configuration is not required here anyway.

Closes gh-19946
5 years ago
Stephane Nicoll 07a1783572 Polish "Introduce appendix section with version properties"
See gh-19898
5 years ago
dreis2211 65394582f6 Introduce appendix section with version properties
With the introduction of Gradle we lost the list of version properties
that were previously in the spring-boot-dependencies POM and were also
linked inside the documentation. This commit introduces an appendix
section in the docs and links the appropriate places to the new section
to restore discoverability.

See gh-19898
5 years ago
Andy Wilkinson 63b736d1f0 Fix NPE when waiting for named socket path to become available
Fixes gh-19941
5 years ago
Stephane Nicoll 3290313eb7 Fix Docker socket creation on Windows
Closes gh-19908
5 years ago
dreis2211 d75de39456 Upgrade to JUnit Jupiter 5.6.0
See gh-19907
5 years ago
Madhura Bhave 1d62debf11 Fix typo 5 years ago
Stephane Nicoll 0bd03fa278 Fix xml syntax in example
Closes gh-19906
5 years ago
dreis2211 d84ca1149c Test the Gradle Plugin against Gradle 6.1
See gh-19776
5 years ago
Andy Wilkinson cbee16318f Fix version references in Maven Plugin's reference documentation
Closes gh-19878
5 years ago
Stephane Nicoll 331ebe90e0 Restore @since on build-image parameters 5 years ago
Stephane Nicoll 63019ab3f1 Add documentation for Maven plugin's build-image support
Closes gh-19830
5 years ago
Stephane Nicoll 6df5e7af4f Add integration tests for Maven plugin's build-image support
See gh-19830
5 years ago
Andy Wilkinson 0a9fe65443 Use line endings on all OSs when writing image config JSON
Previously \r\n was used on Windows and \n was used on other
platforms. This resulted in different JSON content being written to
the archive. As the config's entry name is the SHA-256 hash of its
content, it also resulted in the entry name being different.

This commit updates the JSON that's written into the archive to use
\n line endings, irrespective of the OS on which the image is being
built.

See gh-19828
5 years ago
Andy Wilkinson a0b4cdee44 Make line ending expectations in TotalProgressBarTests OS-independent
See gh-19828
5 years ago
Andy Wilkinson 1d396abec5 Fix bootBuildImage integration tests on Java 13
We build with Java 8, 11, and 13 without specifying target
compatibility for the bytecode of the app that's placed in the image.
The built image uses Java 11 and when the app is built with Java 13
it fails to start as the Java 11 VM can't read that Java 13 bytecode.

This commit configures the app that's placed in the image to be built
with target compatibility of 1.8. This allows it to be compiled with
all version of Java with which we build and to also be compatible
with the JVM that's in the image.

See gh-19831
5 years ago
Stephane Nicoll 105db66553 Polish 5 years ago
Stephane Nicoll e044817fe7 Migrate remaining use of ClassLoader.loadClass to Class.forName
Closes gh-19824
5 years ago
Andy Wilkinson 01a0a54f78 Include layertools in layered jars build with Gradle
Closes gh-19867
5 years ago
Andy Wilkinson 288f5ceaee Fix zip compression of libs in layered jars
Closes gh-19792
5 years ago
Andy Wilkinson 0bd0b2a6c0 Add support for building OCI images using the Gradle plugin
Closes gh-19831
5 years ago
Andy Wilkinson bc452bc094 Polish BootJarTests
See gh-19847
See gh-19792
5 years ago
Stephane Nicoll 95be419527 Use Class.forName rather than ClassLoader.loadClass
This commit changes uses of ClassLoader.loadClass to Class.forName for
consistency with what was initiated in #19342 and better compatibility
with GraalVM.

Closes gh-19824
5 years ago
Phillip Webb b5b4a02c61 Automatically add jarmode jars when packaging
Update the `Packager` to automatically add the layertools jarmode jar
when producing a layered jar.

Closes gh-19865
5 years ago
Phillip Webb 2b83edeb27 Fix jarmode support in unexploded jars
Update `LaunchedURLClassLoader` to ensure that the `JarModeLauncher`
is created in the correct classloader.

Prior to this commit the launcher was created by the application
classloader and did not have access to any of the required
`org.springframework` classes.

See gh-19848
5 years ago
Phillip Webb 57db621b70 Polish 5 years ago
Phillip Webb 77bbe089b2 Update copyright year of changed files 5 years ago
Phillip Webb 71ce212f7f Rename spring-boot-layertools
Rename `spring-boot-layertools` to `spring-boot-jarmode-layertools`.

Closes gh-19853
5 years ago
Madhura Bhave 13f7db2d8c Write classpath index file from Gradle plugin
Closes gh-19847
5 years ago
Phillip Webb e0013454b5 Use parentheses when declaring dependencies
Update all dependencies declarations to use the form `scope(reference)`
rather than `scope reference`.

Prior to this commit we declared dependencies without parentheses unless
we were forced to add them due to an `exclude`.
5 years ago
Phillip Webb 0209cd3e4c Polish quote form used in Gradle scripts
Replace Gradle single quote strings with the double quote form
whenever possible. The change helps to being consistency to the
dependencies section where mostly single quotes were used, but
occasionally double quotes were required due to `${}` references.
5 years ago
Madhura Bhave df5b0f1163 Add support for layered jars in gradle plugin
Closes gh-19792

Co-authored-by: Andy Wilkinson <awilkinson@pivotal.io>
5 years ago
Phillip Webb 951d0b0fdf Fix exploded jar classloader issues
Fix a bug in `ExplodedURLClassLoader` and merge the code into the
existing `LaunchedURLClassLoader` class. Also polish a few method
names relating to layer support.

See gh-19848
See gh-19767
5 years ago
Phillip Webb e28338d6cd Rename spring-boot-cloudnativebuildpack
Rename the `spring-boot-cloudnativebuildpack` module to
`spring-boot-buildpack-platform` and update the the package
name to `org.springframework.boot.buildpack.platform`.

Closes gh-19851
5 years ago
dreis2211 23e87f8266 Treat Java 11+'s NoSuchFileException the same as FileNotFoundException
See gh-19850
5 years ago
Phillip Webb e513fe4666 Add layertools jarmode
Add a new `spring-boot-layertools` module which provides jarmode support
for working with layers. The module works with both classic fat jars,
as well as layered jars.

Closes gh-19849
5 years ago
Phillip Webb 73a42050d6 Add jarmode support to the loader code
Update the `Launcher` class to allow a packaged jar to be  launched in
a different mode. The launcher now checks for a `jarmode` property and
attempts to find a `JarMode` implementation using the standard
`spring.factories` mechanism.

Closes gh-19848
5 years ago
Phillip Webb d5a70688cb Reserve layer names for future use
Update layered jar support so that the name `ext` and any name
starting `springboot` are reserved.

See gh-19767
5 years ago
Phillip Webb 7d8f8d47c8 Fix packager code to generate layer index file
Update `Packager` to create the layer index file when repackaging.

Closes gh-19767
5 years ago
Phillip Webb bfd2ca7fd9 Polish Gradle expression references
Expand all expression `$` references to the full `${...}` form.
5 years ago
Andy Wilkinson 89237634c7 Fix classpath used for Gradle Plugin integration tests in Eclipse
See gh-19841
5 years ago
Andy Wilkinson 1e72fa202c Rework loader-tools resource generation to work with Buildship
Previously, the generated resources were added as an output to the
main source set. This worked on the command line, but resulted in
the META-INF folder that contains the loader jar not being on the
classpath of downstream projects in Eclipse.

This commit changes loader-tools to add the generated resources
as a srcDir to the main source set. This results in it appearing on
the classpath of other projects in Eclipse that depend on loader-tools
such as the Gradle plugin, thereby allowing its tests to be run in
the IDE as well as on the command line.

Fixes gh-19841
5 years ago
Andy Wilkinson 62a848f1b1 Register JNA's native library integration in LinuxSocketDomain
See gh-19836
5 years ago
Stephane Nicoll d421c63747 Disable integration test on Linux
See gh-19836
5 years ago
Stephane Nicoll ffd7670843 Attempt to make DockerApiIntegrationTests work on Linux 5 years ago
Phillip Webb cb4928ad51 Add build-image support to the maven plugin
Add a new `build-image` goal to the Maven plugin to allow Docker images
to be create via using the cloud native buildpack.

See gh-19830
5 years ago
Phillip Webb 16e6bc89ed Create a new ImagePackager tools class
Pull functionality from `Repackager` into a new `Packager` base class
and develop a variant for Docker image creation. The new `ImagePackager`
class provides a general purpose way to construct jar entries without
being tied to an actual file. This will allow us to link it to a
buildpack and provide application content directly.

Closes gh-19834
5 years ago
Phillip Webb aa1954717c Add cloud native buildpack module
Add a Java implementation of the buildpacks.io specification allowing
projects to be packaged into OCI containers. The `builder` class
provides a Java equivalent of `pack build` command and is based on
the `pack` CLI Go code published at https://github.com/buildpacks/pack.

Closes gh-19828
5 years ago
Andy Wilkinson 408f17f821 Close FileInputStreams in RepackagerTests 5 years ago
Andy Wilkinson 724597d45f Use a centrally managed version for commons-compress 5 years ago
Phillip Webb fd792cedaf Polish DisabledIfDockerUnavailable
Convert `DisabledIfDockerUnavailable` to be an annotation and make
it slightly less noisy.
5 years ago
Madhura Bhave cf01f9fba0 Add tests for configuring layered jar layout
Closes gh-19768
5 years ago
Scott Frederick 8f102aee68 Remove deprecated 2.2 code
See gh-19699
5 years ago
Andy Wilkinson 9d5975bd09 Upgrade to Gradle 6.1
Closes gh-19772
5 years ago
Phillip Webb 8fde088574 Add layered jar layout support to the maven plugin
Update the Maven plugin with a new `LAYERED_JAR` layout option.

See gh-19768
5 years ago
Madhura Bhave e9d61bac75 Support generation and loading of layered jars
Support an alternative fat jar format that is more amenable to Docker
image layers.

The new format arranges files in the following structure:

	BOOT-INF/
	  layers/
	    <layer-name #1>
	      /classes
	      /lib
	    <layer-name #2>
	      /classes
	      /lib

The `BOOT-INF/layers.idx` file provides the names of the layers and the
order in which they should be added (starting with the least changed).

The `JarLauncher` class can load layered jars in both fat and exploded
forms.

Closes gh-19767

Co-authored-by: Phillip Webb <pwebb@pivotal.io>
5 years ago
Madhura Bhave 45b1ab46c3 Add classpath index support for exploded archives
Update the `Repackager` class so that an additional `classpath.idx` file
is written into the jar that provides the original order of the
classpath. The `JarLauncher` class now uses this file when running as
an exploded archive to ensure that the classpath order is the same as
when running from the far jar.

Closes gh-9128

Co-authored-by: Phillip Webb <pwebb@pivotal.io>
5 years ago
Phillip Webb ad72f86bdb Polish loader and loader-tools
Polish and refactor `spring-boot-loader` and `spring-boot-loader-tools`
to make it easier to add indexing and layering support.

Closes gh-19766
5 years ago
Andy Wilkinson 56e30258fb Merge branch '2.2.x' 5 years ago
Andy Wilkinson b7e250eb04 Merge branch '2.1.x' into 2.2.x 5 years ago
Andy Wilkinson ebebe09a9d Fix file handle leak in JarFileTests
The JarFile was not being closed which linked a file handle and caused
a test failure on Windows.

The local variable has been renamed as, when declared in a
try-with-resources, Checkstyle was confused by the shadowing of the
jarFile field and required references to jarFile within the try-block
the be prefixed with this.

See gh-19595
5 years ago
Andy Wilkinson 714a187d8f Rework dep mgmt again to avoid consumers picking up strict constraints
This paves the way for publishing Gradle module metadata once the
problem caused by snapshot versions and our two-step publication
process has been addressed.

See gh-19609
5 years ago
Madhura Bhave aae1151f12 Merge branch '2.2.x'
Closes gh-19714
5 years ago
Madhura Bhave 3bf943d597 Merge branch '2.1.x' into 2.2.x
Closes gh-19713
5 years ago
Madhura Bhave f375277026 Merge pull request #19595 from nosan
* pr/19595:
  Polish "Limit ChronoField values to their range"
  Limit ChronoField values to their range

Closes gh-19595
5 years ago
Madhura Bhave 91e459a5d4 Polish "Limit ChronoField values to their range"
See gh-19595
5 years ago
Dmytro Nosan 9bc68b9877 Limit ChronoField values to their range
See gh-19595
5 years ago
Andy Wilkinson 244b5391bc Fix file handle leak in JarFileArchiveTests
Closes gh-19655
5 years ago
Andy Wilkinson aefe52e4d0 Revert "Rework dep management to avoid consumers picking up strict constraints"
This reverts commit b34a311d02 as,
having disabled the publishing of Gradle's module metadata (4f75ab5),
the changes are no longer needed.

See gh-19609
5 years ago
Phillip Webb 862462b791 Update copyright year of changed files 5 years ago
Phillip Webb f57281340c Merge branch '2.2.x' 5 years ago
Phillip Webb 3cfbfebbb1 Merge branch '2.1.x' into 2.2.x 5 years ago
Phillip Webb 9bd49562fe Update copyright year of changed files 5 years ago
Andy Wilkinson b34a311d02 Rework dep management to avoid consumers picking up strict constraints
Previously, enforcedPlatform dependencies were using to pull in the
constraints defined in spring-boot-dependencies and
spring-boot-parent and applied them strictly so that the constrained
version had to be used. This worked as intended in Spring Boot's own
build but incorrectly enforced those same strict version requirements
on external consumers of Spring Boot's modules.

This commit reworks how Spring Boot defines its internal dependency
management so that platform dependencies are exposed to external
consumers while enforced platform dependencies are using internally.

See gh-19609
5 years ago
dreis2211 d454c9653c Disable tests on Java 13 that require an incompatible Gradle version
See gh-19680
5 years ago
Stephane Nicoll ca1710ee56 Upgrade to Apache Cassandra 4.3.1
See gh-19588
5 years ago
Andy Wilkinson e415f759a2 Raise the minimum supported version of Gradle to 5.6
Closes gh-18777
5 years ago
Andy Wilkinson c66d2e8039 Relax the Gradle plugin's Kotlin version constraint
Enforcing the spring-boot-dependencies platform makes for too strong
an opinion about the version of Kotlin that should be on the build
script's classpath. It clashes with the version of Kotlin that's
embedded in Gradle and used with Gradle's Kotlin DSL.

This commit switches to a normal platform (rather than an enforced
platform) which allows it to express an opinion about the version of
Kotlin without making it a strict requirement.

Closes gh-19609
5 years ago
Andy Wilkinson 7fda317f0d Merge branch '2.1.x' into 2.2.x
Closes gh-19657
5 years ago
Andy Wilkinson 617ebaf3c0 Isolate Gradle Plugin build from other Gradle configuration
Closes gh-19656
5 years ago
Brian Clozel e0171a5da8 Polish 5 years ago
Andy Wilkinson b5ae8b0af5 Disable tests that use Docker when Docker is unavailable
Closes gh-19616
5 years ago
Andy Wilkinson ce99db1902 Port the build to Gradle
Closes gh-19609
Closes gh-19608
5 years ago
Andy Wilkinson bdffa860d9 Increase startup timeout for Docker containers
Closes gh-19569
5 years ago
Andy Wilkinson 30c124f549 Merge branch '2.2.x'
Closes gh-19554
5 years ago
Andy Wilkinson c57359ea3b Merge branch '2.1.x' into 2.2.x
Closes gh-19553
5 years ago