535 Commits

Author SHA1 Message Date
Andy Wilkinson
d13d38a141 Trim multiple leading slashes in NestedLocation
See gh-37668
2023-10-20 11:55:35 +01:00
Andy Wilkinson
88bf3dfba2 Close byte channel created by newByteChannelReturnsByteChannel
See gh-7161
2023-10-20 11:22:16 +01:00
Andy Wilkinson
dad5dc6750 Try to fix NestedFileSystemProviderTests on Windows
See gh-7161
2023-10-20 10:56:08 +01:00
Andy Wilkinson
4161eb1853 Fix path handling in NestedLocation on Windows
See 4b495ca
See gh-37668
2023-10-20 09:15:54 +01:00
Phillip Webb
3c62defb9d Support java.nio.file Paths and FileSystems with nested jars
Add a `NestedFileSystemProvider` implementation so that the JDK's
`ZipFileSystem` can load content from nested jars and nested
directory entries.

Creating a `ZipFileSystem` may be a relatively expensive operation as
zip structures need to be parsed and in the case of directory entries
a virtual datablock nees to be generated on the fly. As such, we
install the `ZipFileSystem` as late as possible since in a typical
application it may never be needed.

This commit also tweaks Gradle and Maven plugins to ensure that the
service loader file is written to repackaged jars.

Closes gh-7161
2023-10-18 20:46:36 -07:00
Phillip Webb
4b495ca2a9 Change NestedLocation to hold a Path rather than a File
Refactor `NestedLocation` so that it holds a `Path` rather than a
`File`.

See gh-37668
2023-10-18 20:46:35 -07:00
Phillip Webb
9e4f160c17 Attempt to fix NestedJarFile file lock issues on Windows
Update `DefaultCleanerTracking` and `@AssertFileChannelDataBlocksClosed`
to capture and store the source object if it is a `Cleanable` so that
it can be released later.

Although the real cleaner cannot keep a reference to `obj`, it is safe
for us to do so in tests since we are in control of the object lifecycle
and we don't need it to be garbage collected.

This commit also updates the `UrlJarFile` to call the cleaner so that
it can be tracked.

See gh-37668
2023-10-06 23:44:55 -07:00
Phillip Webb
5da31aca46 Attempt to fix NestedJarFile file lock issues on Windows
Update `NestedJarFile.close()` to call `super.close()` so that the outer
jar file is closed and files can hopefully be deleted on Windows.

See gh-37668
2023-10-06 21:47:55 -07:00
Phillip Webb
1f5472387d Fix formatting 2023-10-03 20:41:48 -07:00
Phillip Webb
42f50fa292 Attempt to fix CI failures
Attempt to fix CI failures caused by timezone differences and different
JDK versions.

See gh-37668
2023-10-03 20:29:33 -07:00
Phillip Webb
7ad4a9817d Rewrite nested jar support code and remove Java 8 support
Rewrite nested jar code to better align with the implementations
provided in Java 17. This update makes two fundamental changes to
the previous implementation:

- Resource cleanup is now handled using the `java.lang.ref.Cleaner`

- Jar URLs now use the form `jar:nested:/my.jar/!nested.jar!/entry`

Unlike the previous `jar🫙/my,jar!/nested.jar!/entry` URL format,
the new format is compatible with Java's default Jar URL handler.
Specifically, it now only uses a single `jar:` prefix and it no longer
includes multiple `!/` separators.

In addition to the changes above, many of the ancillary classes have
also been refactored and updated to create cleaner APIs.

Closes gh-37668
2023-10-03 17:27:57 -07:00
Phillip Webb
a89057b7c7 Reintroduce spring-boot-loader modules
Restore the `spring-boot-loader` with the previous loader code so
that we can develop it further.

See gh-37669
2023-10-03 15:40:25 -07:00
Phillip Webb
aeb6537f57 Rename spring-boot-loader to spring-boot-loader-classic
Rename the `spring-boot-loader` module to `spring-boot-loader-classic`
so that we can introduce an alternative loader implementation.

See gh-37669
2023-10-03 15:40:04 -07:00
Phillip Webb
c22548982a Relocate launcher classes
Create alternative launcher classes under the package
`org.springframework.boot.loader.launch` and use them in favor
of the previous location.

This update is designed to improve compatibility with future
changes in the loader.

Closes gh-37667
2023-10-03 14:53:04 -07:00
Phillip Webb
3d6859e80f Use the term "uber jar" in reference documentation and javadoc
Update reference documentation and javadoc to use the term "uber jar"
rather than "fat jar".

Closes gh-37653
2023-10-02 23:01:34 -07:00
Phillip Webb
8edec21a6f Update copyright year of changed files 2023-08-13 20:44:44 -07:00
Moritz Halbritter
7bb337aeb1 Polish tests 2023-08-08 13:12:47 +02:00
Moritz Halbritter
1a8b8ce26e Revert "Revise synchronized blocks"
This reverts commit 497bbf9c2d0fafa49e5e9e2688fcc8000d9f5675.
2023-08-03 17:26:31 +02:00
Moritz Halbritter
497bbf9c2d Revise synchronized blocks
- Replace synchronized with Lock when guarding long-running operations
- Remove unnecessary synchronization in FileSystemWatcher
- Replace HashMap with ConcurrentHashMap in Restarter
- Remove unnecessary locking on AtomicBoolean in
  SpringApplicationBuilder
- Remove unnecessary locking in SimpleFormatter

Closes gh-36670
2023-08-03 09:23:46 +02:00
Phillip Webb
d442bfbeff Polish 2023-04-10 16:22:11 -07:00
Phillip Webb
c4de86c244 Merge branch '2.7.x' into 3.0.x 2023-02-21 23:17:57 -08:00
Phillip Webb
df5898a146 Reformat code following spring-javaformat upgrade 2023-02-21 22:53:27 -08:00
Krzysztof Krason
6e46423983 Use diamond operators
See gh-33987
2023-01-26 20:35:08 -08:00
Phillip Webb
71efc55bf9 Merge branch '2.7.x' 2023-01-18 16:31:53 -08:00
Phillip Webb
7c508fa324 Update copyright year of changed files 2023-01-18 15:37:58 -08:00
Moritz Halbritter
94f4a4396c Merge branch '2.7.x'
Closes gh-33880
2023-01-18 17:35:52 +01:00
Moritz Halbritter
e8d809fe65 Replace 'via' with 'over' or 'through' in the documentation
Closes gh-33878
2023-01-18 16:56:42 +01:00
Phillip Webb
a2ac38e203 Update copyright year of changed files 2023-01-09 15:46:07 -08:00
Krzysztof Krason
cf6493f65c Simplify AssertJ assertions and also make them more readable
See gh-33653
2023-01-09 11:10:20 +01:00
Phillip Webb
f588793445 Update copyright year of changed files 2022-12-22 01:00:42 -08:00
Moritz Halbritter
f36e2ecb7b Use AutoClosables with try-with-resources
Closes gh-33538
2022-12-16 15:43:15 +01:00
Moritz Halbritter
725337f976 Make fields final
Closes gh-33537
2022-12-16 14:28:44 +01:00
Phillip Webb
45ce096b6b Replace our TestCompiler with Spring Framework's version
Replace the last use of our `TestCompiler` with Spring Framework's
version.

See gh-31266
2022-10-18 11:39:03 -07:00
Phillip Webb
e0b67889a8 Use Stream.toList instead of Stream.collect when possible
Update code to make use of `Stream.toList()` whenever possible.

Closes gh-28177
2022-10-04 00:29:22 -07:00
Scott Frederick
d25a99692f Replace Spring Boot TestCompiler with Spring Framework's version
See gh-31266
2022-09-30 15:58:11 -05:00
Andy Wilkinson
51df7813a5 Remove code deprecated in 2.x and add since and forRemoval attributes
Closes gh-32548
Closes gh-32549
2022-09-30 14:39:05 +01:00
Phillip Webb
46be4a3f30 Merge branch '2.7.x' 2022-09-08 19:38:18 -07:00
Phillip Webb
e88a682220 Merge branch '2.6.x' into 2.7.x 2022-09-08 19:37:52 -07:00
Phillip Webb
85697ac482 Update copyright year of changed files 2022-09-08 19:36:59 -07:00
Phillip Webb
07c0a8bced Fix SecurityManager deprecation issues
See gh-32086
2022-08-17 13:22:40 -07:00
Phillip Webb
4ec2e357d9 Merge branch '2.7.x'
See gh-32086
2022-08-17 12:49:52 -07:00
Phillip Webb
60e1cc510c Merge branch '2.6.x' into 2.7.x
See gh-32085
2022-08-17 12:48:21 -07:00
Phillip Webb
bd74344025 Revert "Don't close jar files early"
This reverts commit b42f056ddbfd5041ef80d2d909dd2f5e51ec3ff0.
2022-08-17 11:38:42 -07:00
Phillip Webb
674022d401 Revert "Don't close nested jars or wrapper when parent is closed"
This reverts commit 360eb027befd51012614f5938fb9cdc9f557a577.
2022-08-17 11:37:19 -07:00
Phillip Webb
ee2bd9e065 Merge branch '2.7.x'
Closes gh-32086
2022-08-15 17:59:28 -07:00
Phillip Webb
ef7aac8c14 Merge branch '2.6.x' into 2.7.x
Closes gh-32085
2022-08-15 17:59:06 -07:00
Phillip Webb
360eb027be Don't close nested jars or wrapper when parent is closed
Update `JarFile` so that the `close()` method no longer closes nested
jars or the wrapper. Prior to this commit it was possible for a parent
jar file to be garbage collected and closed even though references still
existed to the nested jars. When this happened the nested jars would get
closed and any access to entries would result in `JarFile.ensureOpen()`
throwing an `IllegalStateException`. The user would often not see this
exception directly, but rather find `ClassNotFoundException` being
thrown.

Fixes gh-31853
2022-08-15 17:55:25 -07:00
Johnny Lim
6a4681baf5 Polish
See gh-31948
2022-08-02 15:14:23 +02:00
Phillip Webb
22144987e9 Update copyright year of changed files 2022-07-29 12:10:03 +01:00
Phillip Webb
35a65cf82e Merge branch '2.7.x'
Closes gh-31876
2022-07-26 17:48:00 +01:00