Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 69 additions & 15 deletions docs/TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ If you need Lombok in a specific module:

---

### Error 3: Invalid flag: --release
### Error 3: Invalid flag: --release (Java 8)

**Error Message:**
```
Expand All @@ -104,30 +104,84 @@ on project java8: Fatal error compiling: invalid flag: --release
```

**Cause:**
- Maven running with JDK 8 which doesn't support `--release` flag
- `--release` flag introduced in Java 9
- The `--release` flag is not supported in Java 8
- `--release` flag was introduced in Java 9
- Spring Boot Starter Parent (version 3.4.4) sets `maven.compiler.release=17` by default
- This property takes precedence over `maven.compiler.source` and `maven.compiler.target`

**Solution:**
This error has been **FIXED**. Project now uses `<source>/<target>` instead of `<release>`.
This error has been **FIXED** in the java8 module (as of Nov 30, 2025).

If you still encounter it in custom modules:
The java8 module now **explicitly overrides** `maven.compiler.release` by setting it to empty, which forces Maven to use `maven.compiler.source` and `maven.compiler.target` instead.

**Change from:**
**Fixed configuration in java8/pom.xml:**
```xml
<configuration>
<release>8</release>
</configuration>
<properties>
<!-- Override Spring Boot parent's maven.compiler.release property -->
<!-- Java 8 does not support the release flag, so we unset it and use source/target -->
<maven.compiler.release></maven.compiler.release>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
```

**To:**
**Same fix in build-java8 profile in parent pom.xml:**
```xml
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
<profile>
<id>build-java8</id>
<properties>
<maven.compiler.release></maven.compiler.release>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<modules>
<module>java8</module>
</modules>
</profile>
```

**Root Cause:**
The issue was caused by inheriting from Spring Boot Starter Parent 3.4.4, which sets:
```xml
<maven.compiler.release>17</maven.compiler.release>
```

**Status:** ✅ RESOLVED
This property causes the compiler plugin to use the `--release 17` flag, which is:
1. Not supported in Java 8 compiler
2. Takes precedence over `source` and `target` properties

**Verify the fix:**
```bash
cd java8
mvn clean package
# Should build successfully

# Run the JAR
java -jar target/java8-0.0.1-SNAPSHOT.jar
# Should print: Module: java8 - runtime java.version=X
```

**If you encounter this in other modules:**

For any module targeting Java 8, add this to the module's `pom.xml`:
```xml
<properties>
<maven.compiler.release></maven.compiler.release>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
```

**Expected Warnings (safe to ignore):**
```
[WARNING] bootstrap class path is not set in conjunction with -source 8
[WARNING] source value 8 is obsolete and will be removed in a future release
[WARNING] target value 8 is obsolete and will be removed in a future release
```

These are just warnings when building with a newer JDK (e.g., Java 25) targeting an older version (Java 8). The code compiles correctly and runs fine.

**Status:** ✅ RESOLVED (Fixed in java8 module - Nov 30, 2025)
Copy link

Copilot AI Nov 30, 2025

Choose a reason for hiding this comment

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

The date 'Nov 30, 2025' appears to be a typo. Based on the context (documentation last updated November 30, 2025 on line 5), this should likely say 'Nov 30, 2024' or be consistent with the last updated date. Please verify the correct date.

Copilot uses AI. Check for mistakes.

---

Expand Down
11 changes: 5 additions & 6 deletions java18/src/main/java/com/modernjava/guide/Main.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.modernjava.guide;
}
}
System.out.println("Module: java18 - runtime java.version=" + System.getProperty("java.version"));
public static void main(String[] args) {
public class Main {


public class Main {
public static void main(String[] args) {
System.out.println("Module: java18 - runtime java.version=" + System.getProperty("java.version"));
}
}
6 changes: 5 additions & 1 deletion java8/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@
<packaging>jar</packaging>

<properties>
<maven.compiler.release>8</maven.compiler.release>
<!-- Override Spring Boot parent's maven.compiler.release property -->
<!-- Java 8 does not support the release flag, so we unset it and use source/target -->
<maven.compiler.release></maven.compiler.release>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<build>
Expand Down
25 changes: 14 additions & 11 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -104,17 +104,20 @@
Each profile overrides maven.compiler.source/target so the compiler uses the correct version.
-->
<profiles>
<profile>
<id>build-java8</id>
<activation/>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<modules>
<module>java8</module>
</modules>
</profile>
<profile>
<id>build-java8</id>
<activation/>
<properties>
<!-- Override Spring Boot parent's maven.compiler.release property -->
<!-- Java 8 does not support the release flag, so we unset it and use source/target -->
<maven.compiler.release></maven.compiler.release>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<modules>
<module>java8</module>
</modules>
</profile>
Comment on lines +107 to +120
Copy link

Copilot AI Nov 30, 2025

Choose a reason for hiding this comment

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

Inconsistent indentation: This <profile> tag uses tabs instead of the mixed tabs/spaces pattern used in the rest of the profiles section. Line 122 shows the expected indentation with tabs followed by <profile>. This line should match that pattern for consistency.

Suggested change
<profile>
<id>build-java8</id>
<activation/>
<properties>
<!-- Override Spring Boot parent's maven.compiler.release property -->
<!-- Java 8 does not support the release flag, so we unset it and use source/target -->
<maven.compiler.release></maven.compiler.release>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<modules>
<module>java8</module>
</modules>
</profile>
<profile>
<id>build-java8</id>
<activation/>
<properties>
<!-- Override Spring Boot parent's maven.compiler.release property -->
<!-- Java 8 does not support the release flag, so we unset it and use source/target -->
<maven.compiler.release></maven.compiler.release>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<modules>
<module>java8</module>
</modules>
</profile>

Copilot uses AI. Check for mistakes.

<profile>
<id>build-java9</id>
Expand Down