-
Notifications
You must be signed in to change notification settings - Fork 3
feat : upgrade to Java 25 #1005
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughAdds a Java devcontainer option for Gradle, upgrades CI and POM Java versions to 25, removes Lombok across many Java classes (replacing with explicit constructors/getters/setters and SLF4J loggers), updates Maven wrapper properties/scripts for robust distribution detection, and bumps formatting plugin versions. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Script as mvnw (shell/ps)
participant Props as .mvn/wrapper/maven-wrapper.properties
participant Remote as Maven Remote
participant TMP as Temp Extract Dir
participant HOME as MAVEN_HOME
Script->>Props: read distributionUrl / sha256 (trim)
Script->>Remote: download archive
Script->>Script: verify sha256 (sha256sum -c - / shasum fallback)
Script->>TMP: extract archive
Script->>TMP: detect actualDistributionDir (check bin/mvn / scan)
alt found
Script->>HOME: move actualDistributionDir → MAVEN_HOME
Script->>HOME: write mvnw.url in actualDistributionDir
else not found
Script->>TMP: list contents (verbose)
Script->>Script: exit with error
end
Script->>HOME: run mvn command (mvn${scriptName#mvnw})
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Nitpick comments (5)
.github/workflows/sonarbuild.yml (1)
16-21: Java 25 setup looks good; consider minor hardening.
- Optional: add
check-latest: trueto pick the latest Temurin 25 patch.- Verify the sonar-maven-plugin run on JDK 25 in CI (should be fine).
.github/workflows/aws-sns-main.yml (1)
28-34: Java 25 switch LGTM; standardize action pinning.Use either
actions/setup-java@v5across workflows (auto patch updates) or pin to a commit SHA for supply‑chain hardening..github/workflows/aws-sqs-main.yml (1)
28-34: Consistent Java 25 config; align action versioning.Prefer
@v5(or a commit SHA) consistently across workflows for predictability..devcontainer/devcontainer.json (1)
5-11: Dev container aligns with JDK 25; optional Maven pin.Image/tag and feature flags look good. Optionally set a specific Maven version for reproducibility (feature supports it).
.github/workflows/aws-s3-main.yml (1)
31-36: Fixed Java 25 setup looks good.Optional: align the
chmod +x mvnwstep across similar workflows for consistency (or drop if repo has executable bit set).
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (24)
.devcontainer/devcontainer.json(1 hunks).github/workflows/aws-cloudwatch-main.yml(1 hunks).github/workflows/aws-dynamo-main.yml(1 hunks).github/workflows/aws-kinesis-consumer-main.yml(1 hunks).github/workflows/aws-kinesis-producer-main.yml(1 hunks).github/workflows/aws-lambda-main.yml(1 hunks).github/workflows/aws-parameterstore-main.yml(1 hunks).github/workflows/aws-s3-main.yml(1 hunks).github/workflows/aws-secretmanager-main.yml(1 hunks).github/workflows/aws-ses-main.yml(1 hunks).github/workflows/aws-sns-main.yml(1 hunks).github/workflows/aws-sqs-main.yml(1 hunks).github/workflows/sonarbuild.yml(1 hunks)aws-cloudwatch-project/pom.xml(1 hunks)aws-dynamodb-project/pom.xml(1 hunks)aws-kinesis-project/consumer/pom.xml(1 hunks)aws-kinesis-project/producer/pom.xml(1 hunks)aws-lambda-project/pom.xml(1 hunks)aws-parameterstore-project/pom.xml(1 hunks)aws-s3-project/pom.xml(1 hunks)aws-secretmanager-project/pom.xml(1 hunks)aws-ses-project/pom.xml(1 hunks)aws-sns-project/pom.xml(1 hunks)aws-sqs-project/pom.xml(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Build (temurin)
- GitHub Check: Run Unit & Integration Tests (temurin)
- GitHub Check: Run Unit & Integration Tests (temurin)
🔇 Additional comments (4)
aws-parameterstore-project/pom.xml (1)
22-22: Verify Spring Boot 3.5.6 compatibility with Java 25
Check the Boot 3.5.6 release notes for Java 25 support, then on a machine with JAVA_HOME set to Temurin 25 EA/GA run:./mvnw -v ./mvnw verifyto surface any compile-time, test, or runtime issues.
.github/workflows/aws-lambda-main.yml (1)
29-35: Matrix simplification to fixed Java 25 looks good.Straightforward, matches repo-wide upgrade.
aws-sns-project/pom.xml (1)
22-22: JaCoCo 0.8.14 officially supports Java 25. The version already inpom.xml(0.8.14) officially added Java 25 support, so the change tojava.version=25is compatible with your build tools.aws-secretmanager-project/pom.xml (1)
172-189: Ignore version resolution concern for surefire and failsafe plugins
The Spring Boot parent POM (3.5.6) defines${maven-surefire-plugin.version}and${maven-failsafe-plugin.version}, so Maven will resolve them without local property definitions.Likely an incorrect or invalid review comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
aws-cloudwatch-project/.mvn/wrapper/maven-wrapper.jaris excluded by!**/*.jar
📒 Files selected for processing (10)
aws-cloudwatch-project/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-cloudwatch-project/lombok.config(0 hunks)aws-cloudwatch-project/mvnw(6 hunks)aws-cloudwatch-project/mvnw.cmd(3 hunks)aws-cloudwatch-project/pom.xml(2 hunks)aws-cloudwatch-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java(1 hunks)aws-cloudwatch-project/src/main/java/com/example/awsspring/config/Initializer.java(1 hunks)aws-cloudwatch-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java(1 hunks)aws-cloudwatch-project/src/main/java/com/example/awsspring/entities/Customer.java(1 hunks)aws-cloudwatch-project/src/main/java/com/example/awsspring/services/CustomerService.java(1 hunks)
💤 Files with no reviewable changes (1)
- aws-cloudwatch-project/lombok.config
🚧 Files skipped from review as they are similar to previous changes (1)
- aws-cloudwatch-project/pom.xml
🧰 Additional context used
🪛 GitHub Actions: aws-parameterstore-project
aws-cloudwatch-project/src/main/java/com/example/awsspring/config/Initializer.java
[error] 17-17: Cannot find symbol: variable 'log'. This indicates that 'log' is used but not declared or imported in this file.
[error] 18-18: Cannot find symbol: method 'getUsername()' called on 'properties' object of type 'ApplicationProperties'.
aws-cloudwatch-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java
[error] 16-16: Cannot find symbol: method 'getCors()' called on 'properties' object of type 'ApplicationProperties'.
[error] 17-17: Cannot find symbol: method 'getCors()' called on 'properties' object of type 'ApplicationProperties'.
[error] 18-18: Cannot find symbol: method 'getCors()' called on 'properties' object of type 'ApplicationProperties'.
[error] 19-19: Cannot find symbol: method 'getCors()' called on 'properties' object of type 'ApplicationProperties'.
🪛 GitHub Actions: aws-secretmanager-project
aws-cloudwatch-project/src/main/java/com/example/awsspring/config/Initializer.java
[error] 17-17: Cannot find symbol: variable 'log' in the Initializer class.
[error] 17-17: Cannot find symbol: method 'getUsername()' in object 'properties' of type ApplicationProperties.
aws-cloudwatch-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java
[error] 16-16: Cannot find symbol: method 'getCors()' in object 'properties' of type ApplicationProperties.
[error] 17-17: Cannot find symbol: method 'getCors()' in object 'properties' of type ApplicationProperties.
[error] 18-18: Cannot find symbol: method 'getCors()' in object 'properties' of type ApplicationProperties.
[error] 19-19: Cannot find symbol: method 'getCors()' in object 'properties' of type ApplicationProperties.
[error] 20-20: Cannot find symbol: method 'getCors()' in object 'properties' of type ApplicationProperties.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests (temurin)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
♻️ Duplicate comments (1)
aws-kinesis-project/producer/.mvn/wrapper/maven-wrapper.properties (1)
1-3: See earlier note aboutdistributionType=only-script.Identical concern already flagged in aws-kinesis-project/consumer/.mvn/wrapper/maven-wrapper.properties.
🧹 Nitpick comments (1)
aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/ApplicationProperties.java (1)
26-64: Consider standardizing setter return types across modules.The setters use void returns, while the consumer module's
ApplicationProperties.Corsclass uses fluent setters (returningCorsfor method chaining). While both approaches are valid, consider standardizing for consistency across the codebase.Example fluent setter pattern from the consumer module:
public Cors setPathPattern(String pathPattern) { this.pathPattern = pathPattern; return this; }This enables method chaining:
new Cors().setPathPattern("/api/**").setAllowedMethods("*")
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (3)
aws-dynamodb-project/.mvn/wrapper/maven-wrapper.jaris excluded by!**/*.jaraws-kinesis-project/consumer/.mvn/wrapper/maven-wrapper.jaris excluded by!**/*.jaraws-kinesis-project/producer/.mvn/wrapper/maven-wrapper.jaris excluded by!**/*.jar
📒 Files selected for processing (24)
aws-dynamodb-project/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-dynamodb-project/lombok.config(0 hunks)aws-dynamodb-project/mvnw(6 hunks)aws-dynamodb-project/mvnw.cmd(3 hunks)aws-dynamodb-project/pom.xml(2 hunks)aws-kinesis-project/consumer/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-kinesis-project/consumer/lombok.config(0 hunks)aws-kinesis-project/consumer/mvnw(6 hunks)aws-kinesis-project/consumer/mvnw.cmd(3 hunks)aws-kinesis-project/consumer/pom.xml(2 hunks)aws-kinesis-project/producer/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-kinesis-project/producer/lombok.config(0 hunks)aws-kinesis-project/producer/mvnw(6 hunks)aws-kinesis-project/producer/mvnw.cmd(3 hunks)aws-kinesis-project/producer/pom.xml(3 hunks)aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/ApplicationProperties.java(1 hunks)aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/Initializer.java(1 hunks)aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/WebMvcConfig.java(1 hunks)aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/producer/IpProducer.java(1 hunks)aws-parameterstore-project/pom.xml(2 hunks)aws-s3-project/pom.xml(2 hunks)aws-secretmanager-project/pom.xml(2 hunks)aws-ses-project/pom.xml(2 hunks)aws-sqs-project/pom.xml(2 hunks)
💤 Files with no reviewable changes (3)
- aws-kinesis-project/consumer/lombok.config
- aws-dynamodb-project/lombok.config
- aws-kinesis-project/producer/lombok.config
✅ Files skipped from review due to trivial changes (1)
- aws-dynamodb-project/.mvn/wrapper/maven-wrapper.properties
🚧 Files skipped from review as they are similar to previous changes (4)
- aws-parameterstore-project/pom.xml
- aws-dynamodb-project/pom.xml
- aws-sqs-project/pom.xml
- aws-ses-project/pom.xml
🧰 Additional context used
🧬 Code graph analysis (3)
aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/Initializer.java (2)
aws-sqs-project/src/main/java/com/learning/awspring/config/Initializer.java (1)
Component(9-21)aws-kinesis-project/consumer/src/main/java/com/learning/aws/spring/config/Initializer.java (1)
Component(8-23)
aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/producer/IpProducer.java (1)
aws-sqs-project/src/main/java/com/learning/awspring/config/SpringAsyncConfig.java (1)
Configuration(11-32)
aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/ApplicationProperties.java (2)
aws-dynamodb-project/src/main/java/com/learning/awsspring/config/ApplicationProperties.java (1)
Cors(12-58)aws-kinesis-project/consumer/src/main/java/com/learning/aws/spring/config/ApplicationProperties.java (1)
Cors(30-81)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Build (temurin, 25)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests (temurin)
🔇 Additional comments (9)
aws-kinesis-project/consumer/.mvn/wrapper/maven-wrapper.properties (1)
1-3: Clarify the switch todistributionType=only-script.With Maven Wrapper 3.3.4, setting
distributionType=only-scriptstopsmvnwfrom downloading Maven itself. Our CI and dev machines must already have Maven 3.9.11 available on PATH or every wrapper-driven build will fail. Please confirm that all environments satisfy this precondition (or keepdistributionType=binary).aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/producer/IpProducer.java (1)
8-16: LGTM! Lombok @slf4j correctly replaced with explicit SLF4J logger.The explicit logger declaration follows best practices and maintains the same logging behavior as before.
aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/ApplicationProperties.java (1)
11-17: LGTM! Explicit accessors correctly added.The
getCors()andsetCors()methods properly expose the nested configuration property.aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/Initializer.java (1)
3-16: LGTM! Lombok annotations correctly replaced.The explicit logger and constructor properly replace
@Slf4jand@RequiredArgsConstructor, maintaining the same functionality. This matches the pattern used in the consumer module'sInitializerclass.aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/WebMvcConfig.java (1)
11-13: LGTM! Explicit constructor correctly replaces @requiredargsconstructor.The constructor properly initializes the final
propertiesfield, maintaining the same dependency injection behavior.aws-kinesis-project/consumer/pom.xml (1)
22-22: Java 25 + formatter bump look good.The module’s toolchain and formatting updates are consistent with the repo-wide Java 25 rollout. 👍
Also applies to: 254-256
aws-s3-project/pom.xml (1)
20-20: Good alignment with the Java 25/tooling upgrade.No issues spotted; thanks for keeping the module in sync with the shared configuration.
Also applies to: 310-312
aws-kinesis-project/producer/pom.xml (1)
22-22: Tooling bump looks solid.Java level and formatter version match the rest of the workspace. All good here.
Also applies to: 222-224
aws-secretmanager-project/pom.xml (1)
172-188: Verify Surefire/Failsafe version properties resolve on JDK 25.The
maven-surefire-plugin.versionandmaven-failsafe-plugin.versionproperties are not defined in the aws-secretmanager-project/pom.xml properties section. They must be inherited from a parent pom or resolved to Maven defaults. Please verify that the effective versions are compatible with Java 25 by runningmvn help:effective-pomlocally and checking the resolved plugin versions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
♻️ Duplicate comments (1)
aws-parameterstore-project/mvnw.cmd (1)
82-100: MAVEN_USER_HOME handling and dists path computation look good; same optional PS robustness applies.See aws-secretmanager-project/mvnw.cmd Lines 82-100 comment for a no-error Target resolution pattern.
🧹 Nitpick comments (11)
aws-lambda-project/mvnw (3)
100-106: trim() deletes all whitespace, not just leading/trailing (doc mismatch).Either implement true trim or rename to avoid confusion. Safe here, but better to align behavior.
-trim() { - # MWRAPPER-139: - # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. - # Needed for removing poorly interpreted newline sequences when running in more - # exotic environments such as mingw bash on Windows. - printf "%s" "${1}" | tr -d '[:space:]' -} +trim() { + # Trim leading/trailing whitespace, CR, tabs, and LFs + printf "%s" "${1}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' +}
145-147: MAVEN_USER_HOME support improves configurability.Consider honoring XDG defaults on Linux if present (optional).
259-293: Snapshot-safe distribution dir discovery looks good; minor robustness nits.
- Globbing around "$TMP_DOWNLOAD_DIR"/* can misbehave if paths contain spaces (unlikely, but possible). Using find would be more robust.
- Current approach is fine given Maven archive naming; treat this as optional hardening.
- set +f - for dir in "$TMP_DOWNLOAD_DIR"/*; do - if [ -d "$dir" ]; then - if [ -f "$dir/bin/$MVN_CMD" ]; then - actualDistributionDir="$(basename "$dir")" - break - fi - fi - done - set -f + # Robust scan that tolerates spaces in names + while IFS= read -r -d '' dir; do + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + done < <(find "$TMP_DOWNLOAD_DIR" -mindepth 1 -maxdepth 1 -type d -print0)aws-secretmanager-project/mvnw.cmd (2)
82-100: MAVEN_USER_HOME and wrapper dists resolution: OK; small compatibility suggestion.Current Target-based symlink handling is fine. For broader PS compatibility, consider a more explicit, no-error path resolution.
# Non-breaking alternative, avoids indexing and handles missing property $target = (Get-Item -LiteralPath $MAVEN_M2_PATH -Force | Select-Object -ExpandProperty Target -ErrorAction SilentlyContinue) $MAVEN_WRAPPER_DISTS = if ($null -eq $target) { "$MAVEN_M2_PATH/wrapper/dists" } else { "$target/wrapper/dists" }
152-177: Distribution dir discovery works; consider early-exit to avoid last-match wins.Break once found or select the first match for clarity/perf.
-if (!$actualDistributionDir) { - Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { - $testPath = Join-Path $_.FullName "bin/$MVN_CMD" - if (Test-Path -Path $testPath -PathType Leaf) { - $actualDistributionDir = $_.Name - } - } -} +if (!$actualDistributionDir) { + $match = Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | + Where-Object { Test-Path (Join-Path $_.FullName "bin/$MVN_CMD") -PathType Leaf } | + Select-Object -First 1 -ExpandProperty Name + if ($match) { $actualDistributionDir = $match } +}aws-parameterstore-project/mvnw.cmd (1)
152-177: Prefer first-match selection during dir discovery to avoid unnecessary iterations.Apply the same improvement as suggested in aws-secretmanager-project/mvnw.cmd Lines 152-177.
aws-secretmanager-project/mvnw (3)
100-106: trim() removes all whitespace, not only edges.Either adjust implementation to true trim or update comment/name.
-printf "%s" "${1}" | tr -d '[:space:]' +printf "%s" "${1}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
145-147: MAVEN_USER_HOME introduction looks good; optional XDG consideration on Linux.
259-293: Dir discovery robust; optional hardening for paths with spaces.Same optional improvement as suggested in aws-lambda-project/mvnw Lines 259-293 using find -print0.
aws-lambda-project/mvnw.cmd (2)
82-100: MAVEN_USER_HOME/M2 path resolution looks good; optional PS compatibility tweak same as other modules.See aws-secretmanager-project/mvnw.cmd Lines 82-100 for a Target resolution variant.
152-177: Use first-match selection or break in dir scan to avoid last match overriding.-Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { - $testPath = Join-Path $_.FullName "bin/$MVN_CMD" - if (Test-Path -Path $testPath -PathType Leaf) { - $actualDistributionDir = $_.Name - } -} +$match = Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | + Where-Object { Test-Path (Join-Path $_.FullName "bin/$MVN_CMD") -PathType Leaf } | + Select-Object -First 1 -ExpandProperty Name +if ($match) { $actualDistributionDir = $match }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (5)
.mvn/wrapper/maven-wrapper.jaris excluded by!**/*.jaraws-lambda-project/.mvn/wrapper/maven-wrapper.jaris excluded by!**/*.jaraws-parameterstore-project/.mvn/wrapper/maven-wrapper.jaris excluded by!**/*.jaraws-secretmanager-project/.mvn/wrapper/maven-wrapper.jaris excluded by!**/*.jaraws-sqs-project/.mvn/wrapper/maven-wrapper.jaris excluded by!**/*.jar
📒 Files selected for processing (18)
.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-lambda-project/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-lambda-project/mvnw(6 hunks)aws-lambda-project/mvnw.cmd(3 hunks)aws-parameterstore-project/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-parameterstore-project/mvnw(6 hunks)aws-parameterstore-project/mvnw.cmd(3 hunks)aws-s3-project/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-s3-project/lombok.config(0 hunks)aws-secretmanager-project/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-secretmanager-project/mvnw(6 hunks)aws-secretmanager-project/mvnw.cmd(3 hunks)aws-sns-project/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-sqs-project/.mvn/wrapper/maven-wrapper.properties(1 hunks)aws-sqs-project/mvnw(6 hunks)aws-sqs-project/mvnw.cmd(3 hunks)mvnw(6 hunks)mvnw.cmd(3 hunks)
💤 Files with no reviewable changes (1)
- aws-s3-project/lombok.config
✅ Files skipped from review due to trivial changes (1)
- aws-s3-project/.mvn/wrapper/maven-wrapper.properties
🔇 Additional comments (14)
aws-lambda-project/mvnw (4)
111-119: Reading properties from scriptDir is correct and portable.
135-137: MVN_CMD derivation via scriptName is a nice robustness improvement.
214-215: URI.create(...).toURL() fallback for Java downloader is correct.
233-234: sha256sum -c - usage is correct; silent validation with proper exit on mismatch.aws-secretmanager-project/mvnw.cmd (2)
43-44: Safer quoting when invoking resolved MVN command.Wrapping %MVNW_CMD% in quotes avoids breakage with spaces in paths.
76-78: Repo pattern rewrite is correct and clearer.aws-parameterstore-project/mvnw.cmd (2)
43-44: Quoted MVN invocation avoids issues with spaces in paths.
76-78: Repository URL rewrite logic is sound.aws-secretmanager-project/mvnw (4)
111-119: Properties read via scriptDir is a portability improvement.
135-137: MVN_CMD from scriptName: sensible and flexible.
214-215: Downloader now uses URI.create(...).toURL(): good change.
233-234: Checksum validation via sha256sum -c - is correct.aws-lambda-project/mvnw.cmd (2)
43-44: Quoted %MVNW_CMD% invocation is correct and safer.
76-78: Repository pattern rewrite is clear and correct.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
aws-sqs-project/src/main/java/com/learning/awspring/utils/MessageDeserializationUtil.java (1)
14-20: Security risk: payload exposure in exception message.Line 18 includes the payload object in the exception message. If this exception is logged, sensitive data such as PII, credentials, or confidential information could be exposed in application logs.
Apply this diff to remove the payload from the error message:
} catch (JsonProcessingException e) { - throw new IllegalArgumentException("Error converting payload: " + payload, e); + throw new IllegalArgumentException("Error converting payload to JSON", e); }aws-ses-project/src/main/java/com/example/awsspring/config/Initializer.java (1)
1-29: Critical: Remove Lombok usage in aws-sns-project, aws-parameterstore-project, and aws-secretmanager-project
- Replace
@Slf4jwithprivate static final Logger log = LoggerFactory.getLogger(...)in Initializer, controllers, etc.- Replace
@RequiredArgsConstructorwith explicit constructors for injected fields.- Replace
@Dataon ApplicationProperties and entities with manual getters/setters.
Run to verify no Lombok remains:rg -n --type java 'import lombok\.' -g '!**/target/**' rg -n --type java '@(Slf4j|Data|RequiredArgsConstructor|AllArgsConstructor|NoArgsConstructor|Builder|Value|Getter|Setter)' -g '!**/target/**' | head -50aws-sqs-project/pom.xml (1)
22-22: Critical inconsistency: Java version not updated to 25.The
java.versionproperty is still set to21, but the PR title and objectives indicate an upgrade to Java 25. This must be corrected to align with the PR's intent.Apply this diff to update the Java version:
- <java.version>21</java.version> + <java.version>25</java.version>
🧹 Nitpick comments (1)
aws-sqs-project/src/main/java/com/learning/awspring/utils/MessageDeserializationUtil.java (1)
12-12: Consider using a Spring-managed ObjectMapper bean.The default
ObjectMapperconfiguration may not handle all serialization scenarios optimally (e.g., date formats, null handling, unknown properties). Consider injecting a configuredObjectMapperbean or exposing configuration options.Example approach using a Spring-managed bean:
// In a @Configuration class @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.findAndRegisterModules(); mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // Add other configurations as needed return mapper; }Then modify this utility to accept an ObjectMapper parameter or use dependency injection if this class becomes a Spring component.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (25)
aws-lambda-project/lombok.config(0 hunks)aws-lambda-project/pom.xml(1 hunks)aws-ses-project/lombok.config(0 hunks)aws-ses-project/pom.xml(2 hunks)aws-ses-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java(1 hunks)aws-ses-project/src/main/java/com/example/awsspring/config/Initializer.java(1 hunks)aws-ses-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java(1 hunks)aws-ses-project/src/main/java/com/example/awsspring/service/NotificationService.java(2 hunks)aws-ses-project/src/test/java/com/example/awsspring/common/LocalStackTestContainer.java(1 hunks)aws-sqs-project/lombok.config(0 hunks)aws-sqs-project/pom.xml(1 hunks)aws-sqs-project/src/main/java/com/learning/awspring/config/ApplicationProperties.java(1 hunks)aws-sqs-project/src/main/java/com/learning/awspring/config/Initializer.java(1 hunks)aws-sqs-project/src/main/java/com/learning/awspring/config/SpringAsyncConfig.java(2 hunks)aws-sqs-project/src/main/java/com/learning/awspring/entities/Customer.java(1 hunks)aws-sqs-project/src/main/java/com/learning/awspring/entities/InboundLog.java(1 hunks)aws-sqs-project/src/main/java/com/learning/awspring/services/CustomerService.java(1 hunks)aws-sqs-project/src/main/java/com/learning/awspring/services/InboundLogService.java(1 hunks)aws-sqs-project/src/main/java/com/learning/awspring/utils/MessageDeserializationUtil.java(1 hunks)aws-sqs-project/src/main/java/com/learning/awspring/web/controllers/CustomerController.java(1 hunks)aws-sqs-project/src/main/java/com/learning/awspring/web/controllers/InboundLogController.java(2 hunks)aws-sqs-project/src/main/java/com/learning/awspring/web/controllers/SqsController.java(2 hunks)aws-sqs-project/src/main/java/com/learning/awspring/web/listener/SQSListener.java(1 hunks)aws-sqs-project/src/test/java/com/learning/awspring/SqsListenerIntegrationTest.java(2 hunks)aws-sqs-project/src/test/java/com/learning/awspring/utils/FakeObjectCreator.java(1 hunks)
💤 Files with no reviewable changes (3)
- aws-lambda-project/lombok.config
- aws-ses-project/lombok.config
- aws-sqs-project/lombok.config
🧰 Additional context used
🧬 Code graph analysis (5)
aws-sqs-project/src/main/java/com/learning/awspring/web/listener/SQSListener.java (1)
aws-sqs-project/src/main/java/com/learning/awspring/config/Initializer.java (1)
Component(9-24)
aws-ses-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (3)
aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/ApplicationProperties.java (1)
Cors(19-65)aws-dynamodb-project/src/main/java/com/learning/awsspring/config/ApplicationProperties.java (1)
Cors(12-58)aws-kinesis-project/consumer/src/main/java/com/learning/aws/spring/config/ApplicationProperties.java (1)
Cors(30-81)
aws-ses-project/src/main/java/com/example/awsspring/config/Initializer.java (4)
aws-sqs-project/src/main/java/com/learning/awspring/config/Initializer.java (1)
Component(9-24)aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/Initializer.java (1)
Component(8-22)aws-dynamodb-project/src/main/java/com/learning/awsspring/config/Initializer.java (1)
Component(11-38)aws-kinesis-project/consumer/src/main/java/com/learning/aws/spring/config/Initializer.java (1)
Component(8-23)
aws-ses-project/src/test/java/com/example/awsspring/common/LocalStackTestContainer.java (1)
aws-dynamodb-project/src/test/java/com/learning/awsspring/common/ContainerConfig.java (1)
TestConfiguration(14-34)
aws-sqs-project/src/main/java/com/learning/awspring/config/Initializer.java (3)
aws-ses-project/src/main/java/com/example/awsspring/config/Initializer.java (1)
Component(10-29)aws-kinesis-project/producer/src/main/java/com/learning/aws/spring/config/Initializer.java (1)
Component(8-22)aws-kinesis-project/consumer/src/main/java/com/learning/aws/spring/config/Initializer.java (1)
Component(8-23)
🪛 GitHub Actions: aws-parameterstore-project
aws-ses-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java
[error] 16-16: Cannot find symbol 'getCors()' method in 'properties' of type 'ApplicationProperties'.
[error] 17-17: Cannot find symbol 'getCors()' method in 'properties' of type 'ApplicationProperties'.
[error] 18-18: Cannot find symbol 'getCors()' method in 'properties' of type 'ApplicationProperties'.
[error] 19-19: Cannot find symbol 'getCors()' method in 'properties' of type 'ApplicationProperties'.
[error] 20-20: Cannot find symbol 'getCors()' method in 'properties' of type 'ApplicationProperties'.
aws-ses-project/src/main/java/com/example/awsspring/config/Initializer.java
[error] 17-17: Cannot find symbol 'log'. It appears that the variable 'log' is used but not defined or imported.
[error] 18-18: Cannot find symbol 'getUsername()' method in 'properties' of type 'ApplicationProperties'.
🪛 GitHub Actions: aws-secretmanager-project
aws-ses-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java
[error] 16-16: Cannot find symbol: method getCors()
[error] 17-17: Cannot find symbol: method getCors()
[error] 18-18: Cannot find symbol: method getCors()
[error] 19-19: Cannot find symbol: method getCors()
[error] 20-20: Cannot find symbol: method getCors()
aws-ses-project/src/main/java/com/example/awsspring/config/Initializer.java
[error] 17-17: Cannot find symbol: variable log
[error] 17-17: Cannot find symbol: method getUsername()
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
- GitHub Check: Build (temurin)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Build (temurin, 25)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests (temurin)
- GitHub Check: Run Unit & Integration Tests
🔇 Additional comments (26)
aws-lambda-project/pom.xml (1)
262-269: Palantir formatter update looks goodThanks for bumping the Palantir Java Format engine; Spotless 3.x happily consumes 2.74.0 and keeps this module formatting in sync with the rest of the repo.
aws-ses-project/src/main/java/com/example/awsspring/service/NotificationService.java (1)
6-7: LGTM! Clean migration from Lombok to explicit SLF4J logger.The explicit logger declaration follows standard SLF4J patterns with correct visibility, immutability, and initialization. The migration aligns with the project-wide Lombok removal.
Also applies to: 17-17
aws-sqs-project/src/test/java/com/learning/awspring/SqsListenerIntegrationTest.java (1)
16-17: LGTM! Clean Lombok-to-explicit-logger migration.The migration from Lombok's
@Slf4jto explicit SLF4J logger initialization is correctly implemented. The logger field follows standard conventions (private static final, matching field namelog), and the class parameter is accurate.Also applies to: 28-28
aws-sqs-project/src/main/java/com/learning/awspring/services/InboundLogService.java (1)
21-23: LGTM! Clean replacement of Lombok-generated constructor.The explicit constructor correctly assigns the injected repository to the final field. This change maintains functional equivalence with the previous Lombok
@RequiredArgsConstructorannotation while improving code clarity.aws-sqs-project/src/main/java/com/learning/awspring/web/listener/SQSListener.java (2)
14-15: LGTM! Proper SLF4J logger declaration.The explicit logger correctly replaces the Lombok
@Slf4jannotation with standard SLF4J initialization. The logger follows best practices (private static final) and properly references the current class.Also applies to: 22-22
25-27: LGTM! Clean replacement of Lombok-generated constructor.The explicit constructor correctly assigns the injected service to the final field, maintaining functional equivalence with the previous Lombok
@RequiredArgsConstructorannotation.aws-sqs-project/src/main/java/com/learning/awspring/web/controllers/SqsController.java (1)
9-10: LGTM! Clean migration from Lombok to explicit code.The refactoring correctly replaces Lombok annotations with explicit equivalents:
- The static logger declaration follows standard SLF4J patterns
- The constructor properly initializes the final field for Spring's constructor-based DI
- Behavior remains identical to the Lombok-generated code
Also applies to: 22-22, 25-27
aws-sqs-project/src/test/java/com/learning/awspring/utils/FakeObjectCreator.java (1)
6-10: LGTM! Clean migration from Lombok to explicit utility class pattern.The refactor correctly implements the standard Java utility class pattern with
finalclass modifier and private constructor. This improves code clarity and removes the Lombok dependency as part of the broader upgrade effort.aws-sqs-project/src/main/java/com/learning/awspring/utils/MessageDeserializationUtil.java (1)
6-10: LGTM! Proper utility class pattern.The conversion from Lombok to an explicit
finalclass with a private constructor correctly implements the utility class pattern, preventing instantiation and inheritance.aws-sqs-project/src/main/java/com/learning/awspring/web/controllers/InboundLogController.java (1)
7-8: LGTM!The replacement of Lombok's
@Slf4jwith explicit SLF4J logger is correct and follows standard Java logging practices.Also applies to: 27-27
aws-ses-project/src/main/java/com/example/awsspring/config/Initializer.java (2)
3-4: LGTM!The explicit SLF4J logger initialization is correct and replaces the Lombok-generated logger.
Also applies to: 12-12
16-18: LGTM!The explicit constructor correctly replaces the Lombok
@RequiredArgsConstructorannotation.aws-ses-project/src/test/java/com/example/awsspring/common/LocalStackTestContainer.java (1)
3-4: LGTM!The explicit SLF4J logger correctly replaces the Lombok
@Slf4jannotation.Also applies to: 14-14
aws-ses-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java (2)
12-14: LGTM!The explicit constructor correctly replaces the Lombok
@RequiredArgsConstructorannotation.
16-23: The original review comment is incorrect.The projects mentioned (
aws-secretmanager-project,aws-parameterstore-project,aws-sns-project) still use Lombok's@Dataannotation on theirApplicationPropertiesclasses. Lombok automatically generatesgetCors()getters at compile time, even though the methods don't appear in the source code. The claimed "pipeline failures" due to missinggetCors()methods cannot be substantiated—these projects will compile and function correctly with their current@Dataannotation.The file under review (
aws-ses-project) uses explicit getter implementations instead of Lombok, which is an alternative valid approach. Both patterns work correctly and are not mutually exclusive across projects.Likely an incorrect or invalid review comment.
aws-sqs-project/src/main/java/com/learning/awspring/config/ApplicationProperties.java (1)
13-27: LGTM!The explicit getters and setters correctly replace the Lombok
@Dataannotation and follow standard JavaBean conventions.aws-ses-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (2)
16-38: LGTM!The explicit getters and setters for the outer class fields correctly replace the Lombok
@Dataannotation.
47-85: LGTM!The explicit getters and setters for the
Corsinner class are correctly implemented:
- Boolean getter uses the
is*prefix convention (isAllowCredentials)- All methods follow standard JavaBean naming conventions
aws-sqs-project/src/main/java/com/learning/awspring/config/SpringAsyncConfig.java (1)
4-5: LGTM!The explicit SLF4J logger correctly replaces the Lombok
@Slf4jannotation.Also applies to: 16-16
aws-ses-project/pom.xml (1)
22-22: Java 25 does not exist yet.As of October 2025, Java 25 is not released. The latest available versions are Java 21 (LTS), 22, 23, and 24 (non-LTS). Specifying Java 25 will cause Maven builds to fail because this version is not available in any JDK distribution.
Apply this diff to use a valid Java version:
- <java.version>25</java.version> + <java.version>24</java.version>Alternatively, use Java 21 (LTS) for production stability:
- <java.version>25</java.version> + <java.version>21</java.version>Likely an incorrect or invalid review comment.
aws-sqs-project/src/main/java/com/learning/awspring/config/Initializer.java (1)
3-4: LGTM! Clean migration from Lombok to explicit code.The removal of Lombok annotations and replacement with explicit SLF4J logger and constructor is correctly implemented. The pattern matches the standard approach used in other modules (as seen in aws-kinesis-project and aws-ses-project).
Note: The AI summary mentions "persist a Customer" but this behavior doesn't appear in the code. The actual implementation only logs and validates the region property.
Also applies to: 12-12, 15-17
aws-sqs-project/src/main/java/com/learning/awspring/entities/InboundLog.java (1)
37-90: LGTM! Lombok removal implemented correctly.The explicit constructors, getters, and setters are correctly implemented as replacements for the Lombok-generated code. The no-arg constructor is required for JPA, and all accessors follow standard JavaBean conventions.
aws-sqs-project/src/main/java/com/learning/awspring/entities/Customer.java (1)
21-42: LGTM! Lombok removal implemented correctly.The explicit constructors, getters, and setters are correctly implemented as replacements for the Lombok-generated code. The no-arg constructor is required for JPA, and all accessors follow standard JavaBean conventions.
aws-sqs-project/src/main/java/com/learning/awspring/services/CustomerService.java (1)
19-22: LGTM! Lombok @requiredargsconstructor replacement is correct.The explicit constructor properly initializes both final fields, maintaining the same dependency injection semantics as the Lombok-generated code.
aws-sqs-project/src/main/java/com/learning/awspring/web/controllers/CustomerController.java (1)
26-28: LGTM! Lombok @requiredargsconstructor replacement is correct.The explicit constructor properly initializes the final field, maintaining the same dependency injection semantics as the Lombok-generated code.
aws-sqs-project/pom.xml (1)
316-316: Consider upgrading google-java-format or testing on Java 25.google-java-format 1.28.0 exists and has no known security issues. However, it lacks explicit Java 25 support in its release notes (v1.27.0 had a documented JDK24 EA fix, but v1.28.0 does not mention JDK25). Since google-java-format uses internal javac APIs, ensure the spotless plugin configuration includes necessary JVM flags (--add-exports) for Java 25, or upgrade to a newer version (1.29.0 or 1.30.0 are available).
| <java> | ||
| <googleJavaFormat> | ||
| <version>1.25.2</version> | ||
| <version>1.28.0</version> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Verify the googleJavaFormat version is valid.
The version has been updated to 1.28.0. Please confirm this version exists and is compatible with Java 24 (or your target Java version).
Run the following script to verify the version exists:
🏁 Script executed:
#!/bin/bash
# Description: Check if googleJavaFormat version 1.28.0 exists in Maven Central
curl -s "https://search.maven.org/solrsearch/select?q=g:com.google.googlejavaformat+AND+a:google-java-format&rows=20&wt=json" | jq -r '.response.docs[] | select(.v == "1.28.0") | .v'
# Check the latest available version
curl -s "https://search.maven.org/solrsearch/select?q=g:com.google.googlejavaformat+AND+a:google-java-format&rows=1&wt=json" | jq -r '.response.docs[0].v'Length of output: 4
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
aws-parameterstore-project/src/main/java/com/example/awsspring/entities/Customer.java (1)
14-49: Add equals() and hashCode() for proper JPA entity behavior.The removal of Lombok also removed the equals() and hashCode() methods that were likely auto-generated. JPA entities should override these methods to ensure correct behavior when used in collections (e.g., Set, Map) or when comparing entity instances. Without them, entity comparisons rely on object identity rather than business identity, which can lead to unexpected behavior.
Consider implementing equals() and hashCode() based on the primary key:
@Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Customer customer)) return false; return id != null && id.equals(customer.id); } @Override public int hashCode() { return getClass().hashCode(); }
🧹 Nitpick comments (6)
aws-secretmanager-project/src/main/java/com/example/awsspring/web/controllers/CustomerController.java (1)
24-24: Consider removing unused logger.The logger field is declared but doesn't appear to be used in any of the controller methods. Since you're already performing cleanup by removing Lombok, consider removing this unused field unless logging is planned for future use.
Apply this diff to remove the unused logger:
- private static final Logger log = LoggerFactory.getLogger(CustomerController.class); -And remove the now-unused imports:
-import org.slf4j.Logger; -import org.slf4j.LoggerFactory;aws-parameterstore-project/src/main/java/com/example/awsspring/web/controllers/CustomerController.java (1)
6-7: Lombok removal looks good; consider removing the logger if not needed.The replacement of Lombok's
@Slf4jwith a manual SLF4J logger is correct. However, thelogfield is currently unused throughout the controller—no methods invoke it. If logging isn't planned for this controller, you can remove the imports and the field to keep the code lean.Apply this diff if you'd like to remove the unused logger:
-import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus;@RestController @RequestMapping("/api/customers") public class CustomerController { - private static final Logger log = LoggerFactory.getLogger(CustomerController.class); - private final CustomerService customerService;Also applies to: 24-24
aws-parameterstore-project/src/main/java/com/example/awsspring/entities/Customer.java (3)
39-41: Consider restricting the ID setter visibility.Since
idis auto-generated by JPA (using a sequence generator), exposing a public setter allows external code to modify the ID, which could lead to data integrity issues. Consider making the setterprotectedor removing it entirely to prevent accidental misuse.Apply this diff to make the setter protected:
- public void setId(Long id) { + protected void setId(Long id) { this.id = id; }
30-33: Consider adding a business-field-only constructor.The all-args constructor includes the auto-generated
idparameter, which is unusual since IDs are managed by JPA. Consider adding a constructor that accepts only business fields for clearer usage patterns when creating new entities.Add this constructor:
public Customer(String text) { this.text = text; }
14-49: Consider adding a toString() method for debugging.A toString() method would improve debugging and logging by providing a readable representation of the entity.
Add this method:
@Override public String toString() { return "Customer{id=" + id + ", text='" + text + "'}"; }aws-cloudwatch-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
19-64: Consider extracting the duplicated Cors configuration class.The
Corsinner class is duplicated across multiple modules (aws-cloudwatch-project, aws-secretmanager-project, aws-ses-project, aws-sns-project, aws-parameterstore-project) with identical implementation. This creates maintenance overhead—any changes to CORS configuration must be applied to all copies.Consider creating a shared
CorsPropertiesclass in a common module that can be reused across all AWS projects.Example structure:
// In a shared common module public class CorsProperties { private String pathPattern = "/api/**"; private String allowedMethods = "*"; private String allowedHeaders = "*"; private String allowedOriginPatterns = "*"; private boolean allowCredentials = true; // getters and setters... }Then use composition in each ApplicationProperties:
@NestedConfigurationProperty private CorsProperties cors = new CorsProperties();
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (20)
aws-cloudwatch-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java(1 hunks)aws-parameterstore-project/lombok.config(0 hunks)aws-parameterstore-project/pom.xml(2 hunks)aws-parameterstore-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java(1 hunks)aws-parameterstore-project/src/main/java/com/example/awsspring/config/Initializer.java(1 hunks)aws-parameterstore-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java(1 hunks)aws-parameterstore-project/src/main/java/com/example/awsspring/entities/Customer.java(1 hunks)aws-parameterstore-project/src/main/java/com/example/awsspring/web/controllers/CustomerController.java(2 hunks)aws-secretmanager-project/lombok.config(0 hunks)aws-secretmanager-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java(1 hunks)aws-secretmanager-project/src/main/java/com/example/awsspring/config/Initializer.java(1 hunks)aws-secretmanager-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java(1 hunks)aws-secretmanager-project/src/main/java/com/example/awsspring/entities/Customer.java(1 hunks)aws-secretmanager-project/src/main/java/com/example/awsspring/web/controllers/CustomerController.java(2 hunks)aws-ses-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java(2 hunks)aws-sns-project/pom.xml(2 hunks)aws-sns-project/src/main/java/com/learning/awssns/config/ApplicationProperties.java(1 hunks)aws-sns-project/src/main/java/com/learning/awssns/config/Initializer.java(1 hunks)aws-sns-project/src/main/java/com/learning/awssns/controller/NotificationMappingController.java(1 hunks)aws-sns-project/src/test/java/com/learning/awssns/SnsTopicIntegrationTest.java(2 hunks)
💤 Files with no reviewable changes (2)
- aws-secretmanager-project/lombok.config
- aws-parameterstore-project/lombok.config
🚧 Files skipped from review as they are similar to previous changes (2)
- aws-parameterstore-project/pom.xml
- aws-ses-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java
🧰 Additional context used
🧬 Code graph analysis (7)
aws-parameterstore-project/src/main/java/com/example/awsspring/config/Initializer.java (2)
aws-secretmanager-project/src/main/java/com/example/awsspring/config/Initializer.java (1)
Component(8-22)aws-sns-project/src/main/java/com/learning/awssns/config/Initializer.java (1)
Component(8-23)
aws-sns-project/src/main/java/com/learning/awssns/config/Initializer.java (2)
aws-parameterstore-project/src/main/java/com/example/awsspring/config/Initializer.java (1)
Component(8-23)aws-secretmanager-project/src/main/java/com/example/awsspring/config/Initializer.java (1)
Component(8-22)
aws-secretmanager-project/src/main/java/com/example/awsspring/config/Initializer.java (2)
aws-parameterstore-project/src/main/java/com/example/awsspring/config/Initializer.java (1)
Component(8-23)aws-sns-project/src/main/java/com/learning/awssns/config/Initializer.java (1)
Component(8-23)
aws-sns-project/src/main/java/com/learning/awssns/config/ApplicationProperties.java (4)
aws-cloudwatch-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
Cors(19-65)aws-parameterstore-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
Cors(28-74)aws-secretmanager-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
Cors(35-81)aws-ses-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
Cors(41-87)
aws-cloudwatch-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (3)
aws-parameterstore-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (2)
ConfigurationProperties(6-75)Cors(28-74)aws-ses-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (2)
ConfigurationProperties(7-88)Cors(41-87)aws-sns-project/src/main/java/com/learning/awssns/config/ApplicationProperties.java (1)
ConfigurationProperties(7-69)
aws-parameterstore-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (3)
aws-cloudwatch-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (2)
ConfigurationProperties(6-66)Cors(19-65)aws-secretmanager-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (2)
ConfigurationProperties(5-82)Cors(35-81)aws-ses-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (2)
ConfigurationProperties(7-88)Cors(41-87)
aws-secretmanager-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (3)
aws-cloudwatch-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
Cors(19-65)aws-parameterstore-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
Cors(28-74)aws-ses-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
Cors(41-87)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (11)
- GitHub Check: Build (temurin)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests (temurin)
- GitHub Check: Run Unit & Integration Tests (temurin)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Build (temurin, 25)
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests
- GitHub Check: Run Unit & Integration Tests
🔇 Additional comments (14)
aws-sns-project/src/test/java/com/learning/awssns/SnsTopicIntegrationTest.java (2)
20-21: LGTM!The SLF4J imports are correct and necessary for explicit logger initialization.
39-40: LGTM!The explicit SLF4J logger initialization is correct and follows standard patterns. The logger name and usage remain consistent with the previous Lombok-generated implementation.
aws-parameterstore-project/src/main/java/com/example/awsspring/config/Initializer.java (1)
3-16: LGTM! Clean Lombok removal.The explicit SLF4J logger and constructor properly replace the Lombok-generated code. The implementation matches the pattern consistently applied across other modules (aws-secretmanager-project, aws-sns-project).
aws-parameterstore-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java (1)
12-14: LGTM! Explicit constructor correctly replaces Lombok.The explicit constructor properly initializes the properties field, maintaining the same dependency injection behavior as the removed @requiredargsconstructor annotation.
aws-parameterstore-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
4-73: LGTM! Well-structured Lombok removal.The explicit getters/setters correctly replace Lombok @DaTa, and the @NestedConfigurationProperty annotation properly marks the nested Cors configuration. The boolean getter correctly uses the
isAllowCredentials()naming convention. Implementation is consistent with other modules (aws-cloudwatch-project, aws-secretmanager-project, aws-ses-project).aws-secretmanager-project/src/main/java/com/example/awsspring/web/controllers/CustomerController.java (1)
6-7: LGTM: Clean replacement of Lombok dependency.The explicit SLF4J imports correctly replace the Lombok
@Slf4jannotation, maintaining the same logging capability without the annotation processor dependency.aws-parameterstore-project/src/main/java/com/example/awsspring/entities/Customer.java (1)
28-49: LGTM: Explicit constructors and accessors are correctly implemented.The explicit no-arg constructor, all-args constructor, getters, and setters correctly replace the Lombok annotations. The implementations are standard and follow JavaBean conventions.
aws-secretmanager-project/src/main/java/com/example/awsspring/entities/Customer.java (1)
22-43: LGTM! Explicit accessors correctly replace Lombok.The explicit constructors and accessor methods properly replace Lombok-generated code while maintaining the same public API. The implementation follows standard JavaBean conventions.
aws-sns-project/src/main/java/com/learning/awssns/config/Initializer.java (1)
3-17: LGTM! Explicit logger and constructor properly replace Lombok.The explicit SLF4J logger and constructor correctly replace Lombok's
@Slf4jand@RequiredArgsConstructorannotations while maintaining the same functionality.aws-secretmanager-project/src/main/java/com/example/awsspring/config/Initializer.java (1)
3-16: LGTM! Explicit logger and constructor properly replace Lombok.The explicit SLF4J logger and constructor correctly replace Lombok's
@Slf4jand@RequiredArgsConstructorannotations.aws-secretmanager-project/src/main/java/com/example/awsspring/config/WebMvcConfig.java (1)
12-14: LGTM! Explicit constructor properly replaces Lombok.The explicit constructor correctly replaces Lombok's
@RequiredArgsConstructorannotation.aws-secretmanager-project/src/main/java/com/example/awsspring/config/ApplicationProperties.java (1)
11-80: LGTM! Explicit accessors correctly replace Lombok.The explicit getters and setters properly replace Lombok-generated code. The implementation is correct and follows standard JavaBean conventions.
aws-sns-project/src/main/java/com/learning/awssns/controller/NotificationMappingController.java (2)
9-10: LGTM! Standard SLF4J imports added.The imports are correct and necessary for the explicit logger declaration.
18-18: LGTM — explicit SLF4J logger follows best practices.No changes needed here; ensure any Lombok dependency is updated to 1.18.40+ for JDK 25 compatibility.
| <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | ||
|
|
||
| <java.version>21</java.version> | ||
| <java.version>25</java.version> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Verify Java 25 compatibility and ecosystem maturity.
Java 25 is not an LTS release (the latest LTS is Java 21). Ensure that all dependencies, frameworks, and build tools in this project have been tested and confirmed to work correctly with Java 25. Pay special attention to:
- Spring Boot 3.5.6 compatibility with Java 25
- Spring Cloud AWS 3.4.0 compatibility
- Build plugin compatibility (Maven Surefire, Failsafe, Jacoco, etc.)
- Testcontainers and testing frameworks
Additionally, Spring Boot 3.5.x requires compilation with the -parameters flag if you rely on parameter-name discovery for binding/DI. Verify that this is configured in your Maven compiler plugin.
Run the following script to check for known compatibility issues:
🏁 Script executed:
#!/bin/bash
# Check Maven compiler configuration for -parameters flag
echo "=== Checking for -parameters flag in Maven compiler plugin ==="
fd -e xml pom.xml --exec grep -A 10 'maven-compiler-plugin' {} \;
# Verify Spring Boot version supports Java 25
echo -e "\n=== Checking Spring Boot version ==="
rg -n "spring-boot-starter-parent" --type xml -A 2Length of output: 3758
---
🏁 Script executed:
```shell
#!/bin/bash
# Get the full pom.xml content for aws-sns-project to see complete compiler config
echo "=== Full Maven compiler plugin configuration for aws-sns-project ==="
cat aws-sns-project/pom.xml | grep -A 30 'maven-compiler-plugin' | head -50
# Check specifically for -parameters flag
echo -e "\n=== Searching for -parameters flag in all pom.xml files ==="
rg -n '\-parameters' --type xml
Length of output: 465
🌐 Web query:
Does Spring Boot 3.5.6 support Java 25? Is Java 25 compatible with Spring Boot 3.5.x?
💡 Result:
Yes — Spring Boot 3.5.6 supports Java 25. The Spring Boot system requirements state 3.5.6 requires Java 17 minimum and is compatible "up to and including Java 25." [1] The project’s issue/discussion about documenting Java 25 readiness for 3.5.x also confirms this rollout. [2]
Sources:
- Spring Boot system requirements (3.5.6: Java 17 minimum, compatible through Java 25). [1]
- spring-projects/spring-boot GitHub discussion about documenting Java 25 support (milestone 3.5.6). [2]
Add -parameters flag to the Maven Compiler Plugin. Spring Boot 3.5.x requires -parameters for constructor and method parameter name discovery, and it’s not currently configured in your POM.
🤖 Prompt for AI Agents
In aws-sns-project/pom.xml around line 22, the build is using Java 25 but the
Maven Compiler Plugin is not configured to pass the -parameters flag required by
Spring Boot 3.5.x for parameter name discovery; update the pom to configure the
maven-compiler-plugin (under build->plugins) to include the compilerArgs element
with a single arg of -parameters (and keep the existing source/target or release
set to ${java.version}), or add the plugin configuration if missing, then re-run
mvn to verify compilation picks up the flag.
| this.cors = cors; | ||
| } | ||
|
|
||
| @Data |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove the @DaTa annotation to complete Lombok migration.
The @Data annotation on the Cors class conflicts with the explicit getters and setters you've added (lines 29-67). This creates redundant method generation and defeats the purpose of removing Lombok. The annotation should be removed along with the unused import on line 3.
Apply this diff:
-import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;- @Data
public static class Cors {🤖 Prompt for AI Agents
In
aws-sns-project/src/main/java/com/learning/awssns/config/ApplicationProperties.java
around line 21, remove the Lombok @Data annotation on the Cors class (line 21)
because you already added explicit getters/setters (lines 29-67); also remove
the now-unused Lombok import on line 3 (e.g., lombok.Data) and any other
leftover Lombok imports so the class compiles without redundant/generated
methods.
Summary by CodeRabbit
Chores
New Features