Bug 1810950

Summary: Maven package requires JDK 8 specifically and ignores alternatives
Product: [Fedora] Fedora Reporter: Tristan Deloche <tristandeloche>
Component: mavenAssignee: Stewardship SIG <stewardship-sig>
Status: CLOSED WONTFIX QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: rawhideCC: ascheel, decathorpe, java-sig-commits, mhroncok, mizdebsk, msrb, sochotni, stewardship-sig
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-03-31 15:14:25 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Tristan Deloche 2020-03-06 09:37:19 UTC
Description of problem:


Version-Release number of selected component (if applicable): at least since Fedora 31


How reproducible: always reproducible


Steps to Reproduce:
1. Install any JDK package that's not 8 (and its "-devel" version)
2. Install maven package (which requires JDK 8)
3. Set the "java" and "javac" alternatives to that other JDK
4. Check "mvn -v", see that it still uses JDK 8 forcefully

Actual results:
Maven is executed with JDK 8


Expected results:
Maven is executed with the JDK set using alternatives (reasonably the one of "javac", but maybe should be another alternative alias as its a jdk reference rather than one to the javac binary)


Additional info:
Assuming no JAVA_HOME, no .mavenrc etc, the /usr/bin/mvn script has the following line:

if [ -f /usr/share/java-utils/java-functions ] ; then
  . /usr/share/java-utils/java-functions
  set_jvm
  set_javacmd
fi

And in /usr/share/java-utils/java-functions we have, amongst others:

...
    case "${_prefer_jre}" in
        1|[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee])
            dirs="/usr/lib/jvm/jre-1.8.0-openjdk:/usr/lib/jvm/java-1.8.0-openjdk"
            ;;
        *)
            dirs="/usr/lib/jvm/java-1.8.0-openjdk:/usr/lib/jvm/jre-1.8.0-openjdk"
            ;;
    esac
...

Meaning that assuming no override, we will always use the JDK 8 installed as a dependency of maven, ignoring any user system-wide Java alternative setting.

Comment 1 Tristan Deloche 2020-03-06 09:39:04 UTC
Note that, on top of this, the dependency on Java 8 *explicitly* is quite awkward ; it should at best be required only if nothing installed provides Java yet, and even then it probably makes more sense to just use the latest JDK for the current release version.

Comment 2 Miro HronĨok 2020-03-06 09:45:05 UTC
Could you run the following command please?

 $ rpm -q maven

Comment 3 Alex Scheel 2020-03-17 16:32:23 UTC
Additionally, why is this an issue? Having multiple JDKs won't matter and ensuring mvn gets run consistently IMO, is far better than having to support whatever custom JDK the user has installed (IBM? Oracle? &c).

Comment 4 Alex Scheel 2020-03-31 15:14:25 UTC
No response in a bit. Per Maven packaging, this is expected behavior. This follows other packaging in distros, e.g., Python packaging using the system python. We can only reasonably support the default JDK; other third-party JDKs aren't supported. CLOSING->WONTFIX.

Comment 5 Red Hat Bugzilla 2023-09-14 05:54:01 UTC
The needinfo request[s] on this closed bug have been removed as they have been unresolved for 1000 days