Skip to content

Commit ffa303a

Browse files
committed
Fix MVX_USE_SYSTEM_JAVA behavior: force system Java usage without version checking
## Bug Fix ### Problem When MVX_USE_SYSTEM_JAVA=true, mvx was still checking version compatibility and falling back to download if versions didn't match exactly. This contradicts the expected behavior where the flag should mean "always use system Java". ### Solution - **No version checking**: When MVX_USE_SYSTEM_JAVA=true, use system Java regardless of version - **No fallback**: Fail with clear error if system Java unavailable (no download fallback) - **Consistent behavior**: All methods (Install, IsInstalled, GetPath) follow same logic ### Changes - Install(): Remove version compatibility check, fail if system Java unavailable - IsInstalled(): Return true if system Java available, false otherwise - GetPath(): Return system JAVA_HOME or error, no fallback to downloaded version ### Documentation Updates - Clarify that MVX_USE_SYSTEM_JAVA forces system Java usage - Document no version checking and no fallback behavior - Update configuration guide with correct expectations ### Impact - **Fixes unexpected downloads** when system Java version differs - **Clearer semantics**: MVX_USE_SYSTEM_JAVA means "always use system" - **Better CI/CD control**: Predictable behavior in containerized environments - **Faster builds**: No time wasted on version checking or downloads This resolves the issue where Java 24 system installation was being rejected for Java 22 request, causing unnecessary downloads despite the explicit MVX_USE_SYSTEM_JAVA=true flag.
1 parent 016c403 commit ffa303a

File tree

3 files changed

+26
-35
lines changed

3 files changed

+26
-35
lines changed

pkg/tools/java.go

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -60,27 +60,23 @@ func (j *JavaTool) Install(version string, cfg config.ToolConfig) error {
6060

6161
// Check if we should use system Java instead of downloading
6262
if useSystemJava() {
63-
logVerbose("%s=true, attempting to use system Java", getSystemToolEnvVar("java"))
63+
logVerbose("%s=true, forcing use of system Java", getSystemToolEnvVar("java"))
6464

6565
detector := getSystemJavaDetector()
6666
systemJavaHome, err := detector.GetSystemHome()
6767
if err != nil {
68-
logVerbose("System Java not available: %v", err)
69-
fmt.Printf(" ⚠️ System Java not available (%v), falling back to download\n", err)
68+
return fmt.Errorf("MVX_USE_SYSTEM_JAVA=true but system Java not available: %v", err)
69+
}
70+
71+
systemVersion, err := detector.GetSystemVersion(systemJavaHome)
72+
if err != nil {
73+
logVerbose("Could not determine system Java version: %v", err)
74+
fmt.Printf(" 🔗 Using system Java from JAVA_HOME: %s (version detection failed)\n", systemJavaHome)
7075
} else {
71-
systemVersion, err := detector.GetSystemVersion(systemJavaHome)
72-
if err != nil {
73-
logVerbose("Could not determine system Java version: %v", err)
74-
fmt.Printf(" ⚠️ Could not determine system Java version (%v), falling back to download\n", err)
75-
} else if !detector.IsVersionCompatible(systemVersion, version) {
76-
logVerbose("System Java version %s does not match requested version %s", systemVersion, version)
77-
fmt.Printf(" ⚠️ System Java version %s does not match requested version %s, falling back to download\n", systemVersion, version)
78-
} else {
79-
// Use system Java by creating a symlink
80-
fmt.Printf(" 🔗 Using system Java %s from JAVA_HOME: %s\n", systemVersion, systemJavaHome)
81-
return detector.CreateSystemLink(systemJavaHome, installDir)
82-
}
76+
fmt.Printf(" 🔗 Using system Java %s from JAVA_HOME: %s\n", systemVersion, systemJavaHome)
8377
}
78+
79+
return detector.CreateSystemLink(systemJavaHome, installDir)
8480
}
8581

8682
// Create installation directory
@@ -110,18 +106,16 @@ func (j *JavaTool) IsInstalled(version string, cfg config.ToolConfig) bool {
110106
distribution = "temurin"
111107
}
112108

113-
// If using system Java, check if system Java is available and compatible
109+
// If using system Java, check if system Java is available (no version compatibility check)
114110
if useSystemJava() {
115111
detector := getSystemJavaDetector()
116112
if systemJavaHome, err := detector.GetSystemHome(); err == nil {
117-
if systemVersion, err := detector.GetSystemVersion(systemJavaHome); err == nil {
118-
if detector.IsVersionCompatible(systemVersion, version) {
119-
logVerbose("System Java %s is available and compatible with requested version %s", systemVersion, version)
120-
return true
121-
}
122-
}
113+
logVerbose("System Java is available at %s (MVX_USE_SYSTEM_JAVA=true)", systemJavaHome)
114+
return true
115+
} else {
116+
logVerbose("System Java not available: %v", err)
117+
return false
123118
}
124-
// If system Java is not available or compatible, fall through to check downloaded version
125119
}
126120

127121
// Try to get the actual Java path (which handles nested directories)
@@ -142,18 +136,15 @@ func (j *JavaTool) GetPath(version string, cfg config.ToolConfig) (string, error
142136
distribution = "temurin"
143137
}
144138

145-
// If using system Java, return system JAVA_HOME if available and compatible
139+
// If using system Java, return system JAVA_HOME if available (no version compatibility check)
146140
if useSystemJava() {
147141
detector := getSystemJavaDetector()
148142
if systemJavaHome, err := detector.GetSystemHome(); err == nil {
149-
if systemVersion, err := detector.GetSystemVersion(systemJavaHome); err == nil {
150-
if detector.IsVersionCompatible(systemVersion, version) {
151-
logVerbose("Using system Java %s from JAVA_HOME: %s", systemVersion, systemJavaHome)
152-
return systemJavaHome, nil
153-
}
154-
}
143+
logVerbose("Using system Java from JAVA_HOME: %s (MVX_USE_SYSTEM_JAVA=true)", systemJavaHome)
144+
return systemJavaHome, nil
145+
} else {
146+
return "", fmt.Errorf("MVX_USE_SYSTEM_JAVA=true but system Java not available: %v", err)
155147
}
156-
// If system Java is not available or compatible, fall through to check downloaded version
157148
}
158149

159150
installDir := j.manager.GetToolVersionDir("java", version, distribution)

website/content/configuration.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ export MVX_RETRY_DELAY="5s"
312312
#### Other System Variables
313313

314314
```bash
315-
# Use system-installed tools when available
315+
# Force use of system-installed tools (no version checking, no fallback)
316316
export MVX_USE_SYSTEM_JAVA=true
317317
export MVX_USE_SYSTEM_MAVEN=true
318318
export MVX_USE_SYSTEM_NODE=true

website/content/tools.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ export JAVA_HOME=/path/to/your/java
9797

9898
When `MVX_USE_SYSTEM_JAVA=true` is set:
9999

100-
-**Uses existing Java**: mvx will use the Java installation from `JAVA_HOME`
101-
-**Version validation**: Ensures the system Java version matches the requested version
100+
-**Always uses system Java**: mvx will use the Java installation from `JAVA_HOME`
101+
-**No version checking**: Uses system Java regardless of version differences
102102
-**Faster setup**: No time spent downloading Java in CI environments
103-
-**Fallback behavior**: If system Java is unavailable or incompatible, falls back to downloading
103+
-**Strict behavior**: Fails if system Java is unavailable (no fallback to download)
104104

105105
**Requirements:**
106106
- `JAVA_HOME` environment variable must be set

0 commit comments

Comments
 (0)