Skip to content

Commit c1d7ca6

Browse files
authored
Make the SDK build with java25 (#6718)
* Bump spotbugs version * Add suppressions * Skip spotbugs if using java 8 * Bump other dependency versions * Add one more suppression * Add one more suppression * Exclude spotbug checks for s3-benchmarks * Trying something * Skip Java 17 because it's super slow
1 parent 5556232 commit c1d7ca6

File tree

7 files changed

+236
-46
lines changed

7 files changed

+236
-46
lines changed

build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,4 +363,164 @@
363363
<Class name="software.amazon.awssdk.utils.uri.SdkUri" />
364364
<Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE" />
365365
</Match>
366+
367+
<!-- No plan to fix: These classes implement SLF4J SPI which requires specific method signatures. -->
368+
<Match>
369+
<Or>
370+
<Class name="software.amazon.awssdk.thirdparty.org.slf4j.impl.StaticLoggerBinder"/>
371+
<Class name="software.amazon.awssdk.thirdparty.org.slf4j.impl.StaticMarkerBinder"/>
372+
</Or>
373+
<Bug pattern="SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR"/>
374+
</Match>
375+
376+
<!-- No plan to fix: Intentional exception handling patterns throughout the codebase. -->
377+
<Match>
378+
<Bug pattern="THROWS_METHOD_THROWS_RUNTIMEEXCEPTION,THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION"/>
379+
</Match>
380+
381+
<!-- False positive: InputStream is not designed for concurrent access. The synchronized reset() is inherited behavior. -->
382+
<Match>
383+
<Class name="software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.ChunkedEncodedInputStream"/>
384+
<Bug pattern="AT_STALE_THREAD_WRITE_OF_PRIMITIVE"/>
385+
</Match>
386+
387+
<!-- No plan to fix: Test constructor is intentionally package-private. -->
388+
<Match>
389+
<Or>
390+
<Class name="software.amazon.awssdk.http.apache.internal.conn.IdleConnectionReaper"/>
391+
<Class name="software.amazon.awssdk.http.apache5.internal.conn.IdleConnectionReaper"/>
392+
<Class name="software.amazon.awssdk.regions.util.HttpResourcesUtils"/>
393+
</Or>
394+
<Bug pattern="SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR"/>
395+
</Match>
396+
397+
<!-- False positive: These classes have private constructors but use builder pattern. -->
398+
<Match>
399+
<Or>
400+
<Class name="software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider"/>
401+
<Class name="software.amazon.awssdk.auth.token.credentials.aws.DefaultAwsTokenProvider"/>
402+
</Or>
403+
<Bug pattern="SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR"/>
404+
</Match>
405+
406+
<!-- No plan to fix: These are final classes, not vulnerable to finalizer attacks. -->
407+
<Match>
408+
<Or>
409+
<Class name="software.amazon.awssdk.http.apache.internal.conn.SdkTlsSocketFactory"/>
410+
<Class name="software.amazon.awssdk.http.apache.internal.impl.ApacheSdkHttpClient"/>
411+
<Class name="software.amazon.awssdk.http.apache5.internal.conn.SdkTlsSocketFactory"/>
412+
<Class name="software.amazon.awssdk.http.apache5.internal.impl.Apache5SdkHttpClient"/>
413+
<Class name="software.amazon.awssdk.http.nio.netty.internal.utils.BetterFixedChannelPool"/>
414+
<Class name="software.amazon.awssdk.http.crt.AwsCrtHttpClientBase"/>
415+
</Or>
416+
<Bug pattern="CT_CONSTRUCTOR_THROW"/>
417+
</Match>
418+
419+
<!-- No plan to fix: Forked Netty reactive streams code with its own thread-safety model via Netty's EventLoop. -->
420+
<Match>
421+
<Or>
422+
<Class name="software.amazon.awssdk.http.nio.netty.internal.nrs.HandlerPublisher"/>
423+
<Class name="~software\.amazon\.awssdk\.http\.nio\.netty\.internal\.nrs\.HandlerSubscriber.*"/>
424+
</Or>
425+
<Bug pattern="AT_NONATOMIC_64BIT_PRIMITIVE,AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE"/>
426+
</Match>
427+
428+
<!-- False positive: InputStream is not designed for concurrent access. -->
429+
<Match>
430+
<Class name="software.amazon.awssdk.core.internal.io.ChecksumValidatingInputStream"/>
431+
<Bug pattern="AT_STALE_THREAD_WRITE_OF_PRIMITIVE"/>
432+
</Match>
433+
434+
<!-- No plan to fix: Final class, not vulnerable to finalizer attacks. -->
435+
<Match>
436+
<Or>
437+
<Class name="software.amazon.awssdk.core.io.ResettableInputStream"/>
438+
<Class name="software.amazon.awssdk.core.internal.async.ChecksumCalculatingAsyncRequestBody"/>
439+
<Class name="software.amazon.awssdk.core.internal.io.AwsChunkedEncodingInputStream"/>
440+
<Class name="software.amazon.awssdk.protocols.jsoncore.JsonWriter"/>
441+
<Class name="software.amazon.awssdk.codegen.lite.emitters.CodeWriter"/>
442+
<Class name="software.amazon.awssdk.auth.signer.internal.chunkedencoding.AwsS3V4ChunkSigner"/>
443+
<Class name="software.amazon.awssdk.enhanced.dynamodb.EnhancedType"/>
444+
<Class name="software.amazon.awssdk.enhanced.dynamodb.internal.immutable.ImmutableIntrospector"/>
445+
<Class name="software.amazon.awssdk.v2migration.ConstructorToFluent"/>
446+
</Or>
447+
<Bug pattern="CT_CONSTRUCTOR_THROW"/>
448+
</Match>
449+
450+
<!-- No plan to fix: Floating point comparison is intentional in defaults processing. -->
451+
<Match>
452+
<Or>
453+
<Class name="software.amazon.awssdk.codegen.lite.defaultsmode.DefaultsLoader"/>
454+
<Class name="software.amazon.awssdk.protocols.rpcv2.internal.SdkRpcV2CborGenerator"/>
455+
</Or>
456+
<Bug pattern="FE_FLOATING_POINT_EQUALITY"/>
457+
</Match>
458+
459+
<!-- No plan to fix: Async code with its own thread-safety model via reactive streams. -->
460+
<Match>
461+
<Or>
462+
<Class name="~software\.amazon\.awssdk\.core\.internal\.async\.ByteArraySplittingTransformer.*"/>
463+
<Class name="software.amazon.awssdk.core.internal.async.NonRetryableSubAsyncRequestBody"/>
464+
<Class name="software.amazon.awssdk.core.internal.async.RetryableSubAsyncRequestBody"/>
465+
<Class name="~software\.amazon\.awssdk\.core\.internal\.async\.SplittingPublisher.*"/>
466+
</Or>
467+
<Bug pattern="AT_STALE_THREAD_WRITE_OF_PRIMITIVE,AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE"/>
468+
</Match>
469+
470+
<!-- False positive: Test utility class, thread safety not required. -->
471+
<Match>
472+
<Class name="software.amazon.awssdk.testutils.service.http.MockSyncHttpClient"/>
473+
<Bug pattern="AT_STALE_THREAD_WRITE_OF_PRIMITIVE"/>
474+
</Match>
475+
476+
<!-- No plan to fix: Serializable is required for compatibility but singleton pattern is intentional. -->
477+
<Match>
478+
<Or>
479+
<Class name="software.amazon.awssdk.core.util.DefaultSdkAutoConstructList"/>
480+
<Class name="software.amazon.awssdk.core.util.DefaultSdkAutoConstructMap"/>
481+
</Or>
482+
<Bug pattern="SING_SINGLETON_IMPLEMENTS_SERIALIZABLE"/>
483+
</Match>
484+
485+
<!-- False positive: STORAGE field is used via ThreadLocal methods. -->
486+
<Match>
487+
<Class name="software.amazon.awssdk.utilslite.SdkInternalThreadLocal"/>
488+
<Bug pattern="UUF_UNUSED_FIELD"/>
489+
</Match>
490+
491+
<!-- No plan to fix: Final class, not vulnerable to finalizer attacks. -->
492+
<Match>
493+
<Or>
494+
<Class name="software.amazon.awssdk.awscore.eventstream.EventStreamResponseHandlerFromBuilder"/>
495+
<Class name="software.amazon.awssdk.protocols.json.SdkJsonGenerator"/>
496+
</Or>
497+
<Bug pattern="CT_CONSTRUCTOR_THROW"/>
498+
</Match>
499+
500+
<!-- No plan to fix: Static method hiding is intentional for API design. -->
501+
<Match>
502+
<Or>
503+
<Class name="software.amazon.awssdk.awscore.exception.AwsServiceException"/>
504+
<Class name="software.amazon.awssdk.awscore.internal.client.config.AwsClientOptionValidation"/>
505+
</Or>
506+
<Bug pattern="HSM_HIDING_METHOD"/>
507+
</Match>
508+
509+
<!-- No plan to fix: Codegen classes are build-time only, not vulnerable to finalizer attacks. -->
510+
<Match>
511+
<Package name="~software\.amazon\.awssdk\.codegen.*"/>
512+
<Bug pattern="CT_CONSTRUCTOR_THROW,SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR"/>
513+
</Match>
514+
515+
<!-- False positive: Fields are used but SpotBugs doesn't detect usage in inner class. -->
516+
<Match>
517+
<Package name="~software\.amazon\.awssdk\.http\.urlconnection.*"/>
518+
<Bug pattern="UUF_UNUSED_FIELD,CT_CONSTRUCTOR_THROW,UPM_UNCALLED_PRIVATE_METHOD,BAD_TO_BUILDER"/>
519+
</Match>
520+
521+
<!-- No plan to fix: Service loader class. -->
522+
<Match>
523+
<Class name="software.amazon.awssdk.http.urlconnection.UrlConnectionSdkHttpService"/>
524+
<Bug pattern="CT_CONSTRUCTOR_THROW"/>
525+
</Match>
366526
</FindBugsFilter>

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/scheme/DefaultAwsV4AuthScheme.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public final class DefaultAwsV4AuthScheme implements AwsV4AuthScheme {
3030
private static final DefaultAwsV4AuthScheme DEFAULT = new DefaultAwsV4AuthScheme();
3131
private static final AwsV4HttpSigner DEFAULT_SIGNER = AwsV4HttpSigner.create();
3232

33+
private DefaultAwsV4AuthScheme() {
34+
}
35+
3336
/**
3437
* Returns an instance of the {@link DefaultAwsV4AuthScheme}.
3538
*/

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/scheme/DefaultAwsV4aAuthScheme.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
public final class DefaultAwsV4aAuthScheme implements AwsV4aAuthScheme {
3030
private static final DefaultAwsV4aAuthScheme DEFAULT = new DefaultAwsV4aAuthScheme();
3131

32+
private DefaultAwsV4aAuthScheme() {
33+
}
34+
3235
/**
3336
* Returns an instance of the {@link DefaultAwsV4aAuthScheme}.
3437
*/

core/http-auth/src/main/java/software/amazon/awssdk/http/auth/internal/scheme/DefaultBearerAuthScheme.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public final class DefaultBearerAuthScheme implements BearerAuthScheme {
3030
private static final DefaultBearerAuthScheme DEFAULT = new DefaultBearerAuthScheme();
3131
private static final BearerHttpSigner DEFAULT_SIGNER = BearerHttpSigner.create();
3232

33+
private DefaultBearerAuthScheme() {
34+
}
35+
3336
/**
3437
* Returns an instance of the {@link DefaultBearerAuthScheme}.
3538
*/

core/http-auth/src/main/java/software/amazon/awssdk/http/auth/internal/scheme/DefaultNoAuthAuthScheme.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public final class DefaultNoAuthAuthScheme implements NoAuthAuthScheme {
4343
private static final HttpSigner<AnonymousIdentity> DEFAULT_SIGNER = noAuthSigner();
4444
private static final AnonymousIdentity ANONYMOUS_IDENTITY = anonymousIdentity();
4545

46+
private DefaultNoAuthAuthScheme() {
47+
}
48+
4649
/**
4750
* Returns an instance of the {@link NoAuthAuthScheme}.
4851
*/

pom.xml

Lines changed: 63 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@
125125
<unitils.version>3.4.6</unitils.version>
126126
<xmlunit.version>1.3</xmlunit.version>
127127
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
128-
<spotbugs.version>4.7.3.5</spotbugs.version>
128+
<spotbugs.version>4.9.8.2</spotbugs.version>
129129
<javapoet.verion>1.13.0</javapoet.verion>
130130
<org.eclipse.jdt.version>3.10.0</org.eclipse.jdt.version>
131131
<org.eclipse.text.version>3.5.101</org.eclipse.text.version>
@@ -149,9 +149,9 @@
149149
<netty-open-ssl-version>2.0.74.Final</netty-open-ssl-version>
150150
<dynamodb-local.version>1.25.0</dynamodb-local.version>
151151
<sqllite.version>1.0.392</sqllite.version>
152-
<blockhound.version>1.0.8.RELEASE</blockhound.version>
152+
<blockhound.version>1.0.16.RELEASE</blockhound.version>
153153
<jetty.version>9.4.45.v20220203</jetty.version>
154-
<bytebuddy.version>1.14.15</bytebuddy.version>
154+
<bytebuddy.version>1.17.5</bytebuddy.version>
155155
<archunit.version>1.3.0</archunit.version>
156156
<json-schema-validator.version>1.5.4</json-schema-validator.version>
157157

@@ -166,7 +166,7 @@
166166
<maven-dependency-plugin.version>3.1.1</maven-dependency-plugin.version>
167167
<maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
168168
<checkstyle.version>8.42</checkstyle.version>
169-
<jacoco-maven-plugin.version>0.8.12</jacoco-maven-plugin.version>
169+
<jacoco-maven-plugin.version>0.8.13</jacoco-maven-plugin.version>
170170
<central-publishing-maven-plugin.version>0.8.0</central-publishing-maven-plugin.version>
171171
<nexus-staging-maven-plugin.version>1.6.8</nexus-staging-maven-plugin.version>
172172
<exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
@@ -392,47 +392,6 @@
392392
</execution>
393393
</executions>
394394
</plugin>
395-
<plugin>
396-
<groupId>com.github.spotbugs</groupId>
397-
<artifactId>spotbugs-maven-plugin</artifactId>
398-
<version>${spotbugs.version}</version>
399-
<dependencies>
400-
<dependency>
401-
<groupId>software.amazon.awssdk</groupId>
402-
<artifactId>build-tools</artifactId>
403-
<version>1.0</version>
404-
</dependency>
405-
<dependency>
406-
<groupId>org.apache.ant</groupId>
407-
<artifactId>ant</artifactId>
408-
<version>${ant.version}</version>
409-
</dependency>
410-
</dependencies>
411-
<executions>
412-
<execution>
413-
<id>findbugs</id>
414-
<phase>process-classes</phase>
415-
<goals>
416-
<goal>check</goal>
417-
</goals>
418-
</execution>
419-
</executions>
420-
<configuration>
421-
<failOnError>true</failOnError>
422-
<fork>false</fork>
423-
<spotbugsXmlOutput>true</spotbugsXmlOutput>
424-
<excludeFilterFile>software/amazon/awssdk/spotbugs-suppressions.xml</excludeFilterFile>
425-
<threshold>Low</threshold>
426-
<effort>Max</effort>
427-
<plugins>
428-
<dependency>
429-
<groupId>software.amazon.awssdk</groupId>
430-
<artifactId>build-tools</artifactId>
431-
<version>1.0</version>
432-
</dependency>
433-
</plugins>
434-
</configuration>
435-
</plugin>
436395
<plugin>
437396
<groupId>org.apache.maven.plugins</groupId>
438397
<artifactId>maven-checkstyle-plugin</artifactId>
@@ -841,6 +800,52 @@
841800
<properties>
842801
<maven.compiler.release>8</maven.compiler.release>
843802
</properties>
803+
<build>
804+
<pluginManagement>
805+
<plugins>
806+
<plugin>
807+
<groupId>com.github.spotbugs</groupId>
808+
<artifactId>spotbugs-maven-plugin</artifactId>
809+
<version>${spotbugs.version}</version>
810+
<dependencies>
811+
<dependency>
812+
<groupId>software.amazon.awssdk</groupId>
813+
<artifactId>build-tools</artifactId>
814+
<version>1.0</version>
815+
</dependency>
816+
<dependency>
817+
<groupId>org.apache.ant</groupId>
818+
<artifactId>ant</artifactId>
819+
<version>${ant.version}</version>
820+
</dependency>
821+
</dependencies>
822+
<executions>
823+
<execution>
824+
<id>findbugs</id>
825+
<phase>process-classes</phase>
826+
<goals>
827+
<goal>check</goal>
828+
</goals>
829+
</execution>
830+
</executions>
831+
<configuration>
832+
<failOnError>true</failOnError>
833+
<fork>false</fork>
834+
<excludeFilterFile>software/amazon/awssdk/spotbugs-suppressions.xml</excludeFilterFile>
835+
<threshold>Low</threshold>
836+
<effort>Max</effort>
837+
<plugins>
838+
<dependency>
839+
<groupId>software.amazon.awssdk</groupId>
840+
<artifactId>build-tools</artifactId>
841+
<version>1.0</version>
842+
</dependency>
843+
</plugins>
844+
</configuration>
845+
</plugin>
846+
</plugins>
847+
</pluginManagement>
848+
</build>
844849
</profile>
845850

846851
<profile>
@@ -850,7 +855,19 @@
850855
</activation>
851856
<properties>
852857
<!-- Blockhound doesn't support Java 13+ without flags: https://github.com/reactor/BlockHound/issues/33 -->
853-
<argLine>-XX:+AllowRedefinitionToAddDeleteMethods</argLine>
858+
<argLine>-XX:+AllowRedefinitionToAddDeleteMethods -Dreactor.blockhound.shaded.net.bytebuddy.experimental=true</argLine>
859+
</properties>
860+
</profile>
861+
862+
<profile>
863+
<!-- SpotBugs 4.9.x has severe performance regression on JDK 17 (99% CPU, 6x slower than JDK 21).
864+
Skip SpotBugs on JDK 17; it still runs on JDK 11, 21, and 25. -->
865+
<id>jdk-17-spotbugs-skip</id>
866+
<activation>
867+
<jdk>17</jdk>
868+
</activation>
869+
<properties>
870+
<spotbugs.skip>true</spotbugs.skip>
854871
</properties>
855872
</profile>
856873

test/s3-benchmarks/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
<maven.compiler.target>8</maven.compiler.target>
3232
<awsjavasdk.version>${project.version}</awsjavasdk.version>
3333
<sdk-v1.version>1.12.261</sdk-v1.version>
34+
<spotbugs.skip>true</spotbugs.skip>
3435
</properties>
3536
<name>AWS Java SDK :: Test :: S3 Benchmarks</name>
3637
<description>Contains benchmark code for S3 and TransferManager</description>

0 commit comments

Comments
 (0)