Commit Graph

2871 Commits

Author SHA1 Message Date
Phillip Webb
e1bd24695d Try @AssertFileChannelDataBlocksClosed for Windows fix
This updates commit dad5dc6750 to
see if @AssertFileChannelDataBlocksClosed will take care of
closing files.

See gh-7161
2023-10-20 10:05:43 -07:00
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
3eeb1b2849 Merge branch '3.1.x' 2023-10-19 23:21:42 -07:00
Phillip Webb
d638bbb0ba Merge branch '3.1.x'
Closes gh-37967
2023-10-19 21:25:44 -07:00
Phillip Webb
1d456e09d2 Merge branch '3.0.x' into 3.1.x
Closes gh-37966
2023-10-19 21:12:52 -07:00
Phillip Webb
a0b999c8b4 Merge branch '2.7.x' into 3.0.x
Closes gh-37965
2023-10-19 20:55:51 -07:00
Phillip Webb
abdad1cabe Constently use assertThatExceptionOf... assertions
Closes gh-37964
2023-10-19 20:17:26 -07:00
Phillip Webb
b8365e3118 Fix misconfigured Maven test
See gh-37669
2023-10-18 22:58:45 -07: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
Andy Wilkinson
1559485f56 Fix Gradle plugin test classpath after Kotlin upgrade
See gh-37926
2023-10-18 14:07:49 +01:00
Phillip Webb
33c5e1269a Write signature files to uber jars to for Oracle Java 17 verification
Update Gradle and Maven plugins to write an empty `META-INF/BOOT.SF`
file whenever there is a nested signed jar.

This update allows Oracle Java 17 to correctly verify the nested JARs.
The file is required because `JarVerifier` has code roughly equivalent
to:

	if (!jarManifestNameChecked && SharedSecrets
			.getJavaUtilZipFileAccess().getManifestName(jf, true) == null) {
    	throw new JarException("The JCE Provider " + jarURL.toString() +
    		" is not signed.");
	}

The `SharedSecrets.getJavaUtilZipFileAccess().getManifestName(jf, true)`
call ends up in `ZipFile.getManifestName(onlyIfSignatureRelatedFiles)`
which is a private method that we cannot override in our `NestedJarFile`
subclass. By writing an empty `.SF` file we ensure that the `Manifest`
is always returned because there are always "signature related files".

Fixes gh-28837
2023-10-16 16:19:16 -07:00
Andy Wilkinson
d6a9295c26 Allow additional build info properties to have provided values
Closes gh-37889
2023-10-16 18:15:42 +01:00
Andy Wilkinson
084bd3a420 Merge branch '3.1.x' 2023-10-13 21:38:06 +01:00
Andy Wilkinson
ccaa54436b Merge branch '3.0.x' into 3.1.x 2023-10-13 21:37:56 +01:00
Andy Wilkinson
b1eb08faba Merge branch '2.7.x' into 3.0.x 2023-10-13 21:37:44 +01:00
Andy Wilkinson
3dba0d76d2 Polish
See gh-37878
2023-10-13 21:17:12 +01:00
Andy Wilkinson
2231244d2c Merge branch '3.1.x' 2023-10-13 20:42:15 +01:00
Andy Wilkinson
e957c3087c Merge branch '3.0.x' into 3.1.x 2023-10-13 20:36:51 +01:00
Andy Wilkinson
c25e532aeb Merge branch '2.7.x' into 3.0.x 2023-10-13 20:36:32 +01:00
Andy Wilkinson
dbc06faed8 Polish
See gh-37878
2023-10-13 20:36:16 +01:00
Andy Wilkinson
60f05eaa94 Merge branch '3.1.x'
Closes gh-37882
2023-10-13 16:01:47 +01:00
Andy Wilkinson
5af13d191f Merge branch '3.0.x' into 3.1.x
Closes gh-37881
2023-10-13 16:01:32 +01:00
Andy Wilkinson
ae2693b7f1 Merge branch '2.7.x' into 3.0.x
Closes gh-37880
2023-10-13 16:01:14 +01:00
Andy Wilkinson
42ee6b9e74 Use new permissions API with Gradle 8.3+
Closes gh-37878
2023-10-13 16:00:54 +01:00
Johnny Lim
446677375e Polish gh-35082
See gh-37831
2023-10-12 14:17:02 +02:00
Andy Wilkinson
bdaf7a7603 Merge branch '3.1.x'
Closes gh-37830
2023-10-11 15:06:09 +01:00
Andy Wilkinson
411586347c Merge branch '3.0.x' into 3.1.x
Closes gh-37829
2023-10-11 15:04:21 +01:00
Andy Wilkinson
781ac2ece2 Merge branch '2.7.x' into 3.0.x
Closes gh-37828
2023-10-11 15:02:36 +01:00
Andy Wilkinson
5a75fae23b Polish "Polish"
See gh-37745
2023-10-11 14:58:04 +01:00
Johnny Lim
303015ea2d Polish
See gh-37745
2023-10-11 14:57:38 +01:00
Andy Wilkinson
d0486ef43f Merge branch '3.1.x'
Closes gh-37827
2023-10-11 14:47:35 +01:00
Andy Wilkinson
40461488db Merge branch '3.0.x' into 3.1.x
Closes gh-37826
2023-10-11 14:47:23 +01:00
Andy Wilkinson
a80f8ea5e6 Configure Java toolchain on AOT-processing tasks
Closes gh-37717
2023-10-11 14:31:44 +01:00
Andy Wilkinson
b9a0159b97 Merge branch '3.1.x'
Closes gh-37825
2023-10-11 13:54:39 +01:00
Andy Wilkinson
ac1f7ccc33 Merge branch '3.0.x' into 3.1.x
Closes gh-37824
2023-10-11 13:54:25 +01:00
Andy Wilkinson
5a6cd77c56 Merge branch '2.7.x' into 3.0.x
Closes gh-37823
2023-10-11 13:54:11 +01:00
Andy Wilkinson
5a1abb76f7 Test the Gradle plugin against Gradle 8.4
Closes gh-37811
2023-10-11 13:52:03 +01: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
75ddb9fa47 Fix test failure caused by PropertiesLoader class reference
See gh-37667
2023-10-03 17:27:39 -07:00
Phillip Webb
55b5610dd9 Add Maven and Gradle option for the loader implementation to use
Add properties to the Maven and Gradle plugins so that users can
switch between the two loader modules.

See gh-37669
2023-10-03 15:40:42 -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