Skip to content

Conversation

@rajadilipkolli
Copy link
Owner

@rajadilipkolli rajadilipkolli commented Oct 16, 2025

Summary by CodeRabbit

  • Chores

    • Upgraded Java runtime from v21 to v25 across projects and CI workflows
    • Updated code-formatting/tool versions (googleJavaFormat / Palantir)
    • Improved Maven wrapper and wrapper properties for more reliable installs and directory handling
    • Removed Lombok config/optional Lombok deps in several modules and replaced generated boilerplate with explicit code
  • New Features

    • Added devcontainer option to control Gradle installation (installGradle=false)

@coderabbitai
Copy link

coderabbitai bot commented Oct 16, 2025

Walkthrough

Adds 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

Cohort / File(s) Summary
Devcontainer
\.devcontainer/devcontainer.json
Added Java feature option installGradle: false (additive configuration).
CI workflows
\.github/workflows/*.yml
Setups updated to Java 25 (replaced 21); some matrices simplified to fixed java-version: 25.
Project POMs
aws-*/pom.xml, */pom.xml
Bumped <java.version> 21 → 25; updated Spotless/googleJavaFormat/Palantir versions; removed Lombok in some modules.
Maven wrapper properties
**/.mvn/wrapper/maven-wrapper.properties, .mvn/wrapper/maven-wrapper.properties`
Removed long license header; added wrapperVersion=3.3.4 and distributionType=only-script (distributionUrl mostly unchanged).
mvnw (shell) scripts
mvnw, **/mvnw (multiple projects)
Added trim() util, scriptDir and scriptName; trimmed property parsing; introduced MAVEN_USER_HOME base; detect actual extracted distribution dir (handles snapshots); write mvnw.url; use URI.create(...) in downloader; adjusted SHA-256 verification and improved diagnostics.
mvnw.cmd (Windows) scripts
mvnw.cmd, **/mvnw.cmd (multiple projects)
Quote command invocation; add MAVEN_M2_PATH / MAVEN_USER_HOME; switch hashing MD5 → SHA256 for wrapper dirs; discover actual extracted distribution dir; enhance move/error/cleanup logic and verbose diagnostics.
Lombok config files
**/lombok.config
Removed lombok.addLombokGeneratedAnnotation = true entries across projects.
Java: Lombok removal → explicit code
aws-*/src/main/java/**
Removed Lombok annotations (@DaTa, @requiredargsconstructor, @slf4j, @Getter/@Setter/@NoArgsConstructor/@AllArgsConstructor); added explicit constructors, getters/setters, and private static final SLF4J Logger fields where applicable.
Java: tests & utils
**/src/test/java/**, **/src/main/java/**/utils/**
Replaced @UtilityClass with final classes + private constructors; replaced @Slf4j in tests with explicit Logger fields; converted utility methods to static where needed.

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})
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

"I hopped through code with nimble feet,
Removed the magic, made methods neat,
Maven now finds where bundles hide,
Java leapt to twenty-five with pride,
A carrot commit — tidy and sweet!" 🥕🐇

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The pull request title "feat : upgrade to Java 25" is partially related to the changeset. The title accurately describes one significant aspect of the changes: upgrading the Java version from 21 to 25 across workflow files and pom.xml configurations. However, the PR also includes substantial changes to remove Lombok dependencies and replace all Lombok-generated code with explicit implementations (constructors, getters, setters, loggers) across numerous Java source files in all projects, along with Maven wrapper script improvements and configuration updates. While the Java 25 upgrade is a real and important part of the change, the title does not capture the scope of the Lombok removal refactoring, which represents a significant portion of the changeset by both file count and code review effort.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch java25

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a 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: true to 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@v5 across 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 mvnw step across similar workflows for consistency (or drop if repo has executable bit set).

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b15a19d and 18dfe57.

📒 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 verify

to 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 in pom.xml (0.8.14) officially added Java 25 support, so the change to java.version=25 is 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.

Copy link

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between 18dfe57 and ecb4911.

⛔ Files ignored due to path filters (1)
  • aws-cloudwatch-project/.mvn/wrapper/maven-wrapper.jar is 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

Copy link

@coderabbitai coderabbitai bot left a 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 about distributionType=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.Cors class uses fluent setters (returning Cors for 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

📥 Commits

Reviewing files that changed from the base of the PR and between ecb4911 and 050f288.

⛔ Files ignored due to path filters (3)
  • aws-dynamodb-project/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • aws-kinesis-project/consumer/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • aws-kinesis-project/producer/.mvn/wrapper/maven-wrapper.jar is 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 to distributionType=only-script.

With Maven Wrapper 3.3.4, setting distributionType=only-script stops mvnw from 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 keep distributionType=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() and setCors() 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 @Slf4j and @RequiredArgsConstructor, maintaining the same functionality. This matches the pattern used in the consumer module's Initializer class.

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 properties field, 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.version and maven-failsafe-plugin.version properties 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 running mvn help:effective-pom locally and checking the resolved plugin versions.

Copy link

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between 050f288 and 17050c6.

⛔ Files ignored due to path filters (5)
  • .mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • aws-lambda-project/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • aws-parameterstore-project/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • aws-secretmanager-project/.mvn/wrapper/maven-wrapper.jar is excluded by !**/*.jar
  • aws-sqs-project/.mvn/wrapper/maven-wrapper.jar is 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.

Copy link

@coderabbitai coderabbitai bot left a 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 @Slf4j with private static final Logger log = LoggerFactory.getLogger(...) in Initializer, controllers, etc.
  • Replace @RequiredArgsConstructor with explicit constructors for injected fields.
  • Replace @Data on 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 -50
aws-sqs-project/pom.xml (1)

22-22: Critical inconsistency: Java version not updated to 25.

The java.version property is still set to 21, 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 ObjectMapper configuration may not handle all serialization scenarios optimally (e.g., date formats, null handling, unknown properties). Consider injecting a configured ObjectMapper bean 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

📥 Commits

Reviewing files that changed from the base of the PR and between 17050c6 and 5e8b4cb.

📒 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 good

Thanks 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 @Slf4j to explicit SLF4J logger initialization is correctly implemented. The logger field follows standard conventions (private static final, matching field name log), 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 @RequiredArgsConstructor annotation 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 @Slf4j annotation 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 @RequiredArgsConstructor annotation.

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 final class 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 final class 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 @Slf4j with 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 @RequiredArgsConstructor annotation.

aws-ses-project/src/test/java/com/example/awsspring/common/LocalStackTestContainer.java (1)

3-4: LGTM!

The explicit SLF4J logger correctly replaces the Lombok @Slf4j annotation.

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 @RequiredArgsConstructor annotation.


16-23: The original review comment is incorrect.

The projects mentioned (aws-secretmanager-project, aws-parameterstore-project, aws-sns-project) still use Lombok's @Data annotation on their ApplicationProperties classes. Lombok automatically generates getCors() getters at compile time, even though the methods don't appear in the source code. The claimed "pipeline failures" due to missing getCors() methods cannot be substantiated—these projects will compile and function correctly with their current @Data annotation.

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 @Data annotation 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 @Data annotation.


47-85: LGTM!

The explicit getters and setters for the Cors inner 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 @Slf4j annotation.

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>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 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


Copy link

@coderabbitai coderabbitai bot left a 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 @Slf4j with a manual SLF4J logger is correct. However, the log field 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 id is 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 setter protected or 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 id parameter, 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 Cors inner 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 CorsProperties class 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

📥 Commits

Reviewing files that changed from the base of the PR and between 5e8b4cb and aa3b86b.

📒 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 @Slf4j annotation, 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 @Slf4j and @RequiredArgsConstructor annotations 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 @Slf4j and @RequiredArgsConstructor annotations.

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 @RequiredArgsConstructor annotation.

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>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 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 2

Length 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
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

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.

@rajadilipkolli rajadilipkolli merged commit 6b7d019 into main Oct 16, 2025
16 checks passed
@rajadilipkolli rajadilipkolli deleted the java25 branch October 16, 2025 18:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants