On Thu, Jul 3, 2025 at 10:34 PM Mikolaj Izdebski <mizde...@redhat.com>
wrote:

> Hi,
>
> On Thu, Jul 3, 2025 at 4:59 PM Dimitris Soumis <dsou...@redhat.com> wrote:
> >
> > Hi all,
> >
> > While working on improving compatibility of the tomcat package with
> third-party Java runtimes [1] (i.e. Eclipse Adoptium [2]), I ran into a
> persistent and somewhat opaque behavior in Fedora’s Java stack that leads
> DNF to always install java-21-openjdk-headless, even when a valid
> third-party JRE is already installed and provides the expected.
>
> I understand and fully support the desire to run Tomcat with arbitrary
> Java at user discretion.
>
> >
> > When installing tomcat, I observed that dnf pulls in
> java-21-openjdk-headless even though the relevant spec file has been
> modified with the relaxed dependency of Requires: (jre-headless or jre).
> > I already have temurin-21-jre installed, which provides: jre-headless
> and jre.
> > Running dnf install jre-headless correctly resolves to nothing (already
> satisfied).
> >
> > After investigation, I found out that java-21-openjdk-headless is
> required by ecj, which is required by tomcat. I inspected the spec file of
> ecj and initially, I suspected the %jpackage_script macro was injecting the
> dependency. But even after commenting out that macro in ecj.spec and
> building locally, the behavior persisted.
> > Although I didn't dig deeper, I suspect some maven macros are injecting
> that dependency.
> >
> > The above result in two noteworthy matters:
> > 1) Even if a package like tomcat is fully compatible with third-party
> Java runtimes, its dependencies (like ecj) defeat that compatibility
> silently.
> > 2)  Users trying to use supported alternatives like Temurin will always
> get Fedora’s OpenJDK installed unless they use non-obvious flags like: dnf
> install tomcat --exclude='java*-openjdk*'
>
> ecj can be used both as a library (as used by Tomcat) and as a
> command-line application -- it provides a launcher shell script that
> needs to invoke a Java JRE.
> The fact that one package serves two different purposes is the source
> of the problem you are seeing.
>
> In Fedora, Java *libraries* no longer have Requires on any Java, so
> that they can be easier used with any Java of user choice.
>
> Fedora-packaged Java *applications* can follow one of the "Runtime
> Strategies for Java Applications", typically in one of these
> categories:
>
> 1. Generic Java dependency
> The package declares a generic java dependency, allowing compatibility
> with any implementation, including third-party JDKs.
> The actual runtime is chosen based on available repositories and
> system alternatives.
> Examples: Tomcat, LibreOffice
>
> 2. Specific OpenJDK version dependency
> The application explicitly depends on a specific OpenJDK version.
> Third-party JDKs or alternatives won't affect it.
> Examples: JFlex, CUP, *ECJ*
>
> 3. Version-specific subpackages
> The package provides bindings for multiple Java versions, and users
> select the one they need.
> Examples: Maven, Ant
>
> There is not a single best strategy that fits all use cases. Each of
> them has pros and cons, and package maintainers have the authority to
> choose what is best for their application.
>
> Currently, ecj falls into the second category. However, maintainers
> can opt to move it into the first category.
> This would allow the ecj launcher script to invoke whatever Java
> runtime is present on the system, including third-party distributions
> like Temurin.
>
> Alternatively, and this is my preferred solution, we could split the
> library part into a separate subpackage, e.g. ecj-lib. In that model:
> - The main ecj package would remain the command-line tool, with its
> specific OpenJDK dependency.
> - The ecj-lib subpackage (used by Tomcat) would not depend on any JRE,
> preserving full compatibility with any runtime.
>
> Either way, I'm happy to help with updating ecj to support running
> Tomcat with arbitrary Java.
>
> >
> > and two questions:
> > 1) Should macros automatically inject dependencies, or should this be
> made overridable?
> > 2) Would it be more appropriate for packages like ecj to declare a more
> neutral dependency, such as: Requires: (java-headless or jre-headless) ?
>
> The %jpackage_script macro can either
> - generate a script that launches a specific Java, and then generate a
> dependency on that Java, or
> - generate a generic script that invokes whatever Java is in PATH,
> without generating any dependency - it is up to package maintainers to
> declare appropriate Requires/Recommends in the spec file, or not
> declare any dependencies at all.
>
> Which strategy is used is up to package maintainers -- maintainers
> know their users and applications and can make the right choice.
>
> --
> Mikolaj Izdebski
>
> >
> > And other than that, there still exists the need for versioned Temurin
> rpms as discussed here.
> >
> > I’d be happy to open a bug, but I wanted to raise this for discussion
> first to see if others have encountered the same challenge or have best
> practices to suggest.
> >
> > Thanks for your time and input.
> >
> >
> > P.S. Such cases were what I was worrying about and I mentioned at the
> discussion of the proposal :)
> >
> > Kind regards,
> > Dimitris Soumis
> >
> > [1] Relevant BZ#2374859
> > [2] change proposal
> > --
> > _______________________________________________
> > devel mailing list -- devel@lists.fedoraproject.org
> > To unsubscribe send an email to devel-le...@lists.fedoraproject.org
> > Fedora Code of Conduct:
> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> > List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> > List Archives:
> https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
> > Do not reply to spam, report it:
> https://pagure.io/fedora-infrastructure/new_issue
>
> Hi Mikolaj,

Thank you for the detailed and informative reply.

The idea of splitting ecj into ecj and ecj-lib makes a lot of sense to me.
It would serve the purpose of keeping Tomcat and similar applications
runtime agnostic. I will move forward by opening a bugzilla to track this
issue.

Kind regards,
Dimitris Soumis
-- 
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to