Migrate Ultimate to Java 21 and update framework components
This series of patches migrates Ultimate to Java 21 and updates the framework components to the following versions:
- Eclipse 4.32
- Eclipse CDT 11.6
- Jetty 12
The patches also improve the build process by unifying build automation for Ant tasks in Eclipse and Maven builds. Specific Ant settings and the installation of the Tycho plugin in the Eclipse IDE are no longer required for building Ultimate. In addition, dependencies from the P2 repositories are resolved automatically. Therefore, only one PDE target platform file is now required for all supported target architectures.
The following tasks must be completed before the migration is completed:
-
Implementation and optimization:
- [x] Fix broken Jetty logging in the WebBackend by getting Jetty logging working via SLF4J facade provided by Pax Logging
- [x] Extend Jenkins build environment for Java 21 builds (install OpenJDK 21)
- [x] Create Eclipse IDE workspace settings file for Eclise IDE 2024-06 to simplify development setup
- Include code formatter styles and complete styles with settings for new Java 21 language features
- Add save actions to the workspace settings
-
Testing and quality assurance:
- [x] Check that an Eclipse and Maven build succeeds on Linux
- [x] Check that an Eclipse and Maven build succeeds on MacOS
- [x] Check that an Eclipse and Maven build succeeds on Windows
- [x] Check that a built Ultimate products run on Linux
- [x] Check that a built Ultimate products run on MacOS
- [x] Check that a built Ultimate products run on Windows
- [x] Check that a nightly build via Maven succeeds on Jenkins
- [x] Check that a nightly Sonar run via Maven succeeds on Jenkins
- [x] Ensure that the performance of Ultimate is not degraded by the migration (comparison through benchmark runs)
-
Documentation and explanation:
- [ ] Add brief Ultimate build and run description to the project's README
- [ ] Add brief development setup description to the project's README
- [x] Remove deprecated development setup instructions from the GitHub Wiki
I tried makeFresh.sh with Maven 3.9.8 and Java 21.04 on my Windows 10 machine and it built successfully.
I can confirm that I'm able to build Ultimate on MacOS Ventura via Maven 3.9.8 and Eclipse 2024-06 and that the built products run as expected.
:+1: great work :tada:
From a quick test: I was able to set up an eclipse workspace, build and run Ultimate, and verify a simple program successfully (on Ubuntu).
Observations:
- When first building, I had the usual ~4300 build errors, mostly in projects with parser generators (ASTBuilder, Library-BoogieAST, ...). Refreshing and rebuilding 2 or 3 times fixed them.
- I ran into the usual problem that upon first launch, Z3 is not on the PATH. Do you know if it's possible to change the default environment for run configurations, such that we can initialize that correctly? (Of course, this would be a very specific bonus feature).
One additional observation: The startup time of Debug-EA.product is currently extremely high for me. I tried it twice just now, once it took 37s, the second time 30s!
One additional observation: The startup time of
Debug-EA.productis currently extremely high for me. I tried it twice just now, once it took 37s, the second time 30s!
I experienced the same issue.
I ran into the usual problem that upon first launch, Z3 is not on the PATH. Do you know if it's possible to change the default environment for run configurations, such that we can initialize that correctly? (Of course, this would be a very specific bonus feature).
Great to hear that you are able to build Ultimate successfully using the Eclipse IDE. That's a good point and I think it should be possible by either adjust the launch configuration or (if available) adjust a global setting automatically (through our upcoming idea of a importing a preconfigured workspace settings file).
One additional observation: The startup time of
Debug-EA.productis currently extremely high for me. I tried it twice just now, once it took 37s, the second time 30s!I experienced the same issue.
I can report the same observation. Currently, I don't know the reason for that performance issue but it seems like Eclipse executes the built product without any delay directly. But then framework startup slows down the execution ...
After further investigation, the following error seems to be present when reading or writing *.graphml witnesses using the JUNG library:
[de.uni_freiburg.informatik.ultimate.core: NoClassDefFoundError: edu/uci/ics/jung/graph/DirectedGraph: de.uni_freiburg.informatik.ultimate.witnessparser.WitnessAutomatonConstructor.getGraphTransformer(WitnessAutomatonConstructor.java:250)]
For example, if a DirectedSparseGraph is created in the WitnessAutomatonConstructor on line 256, the DirectedGraph interface in the package edu.uci.ics.jung.graph must be loaded for the internal data structures. The Equinox framework tries to load this interface from the JUNG graph implementation module (jung-graph-impl). However, the interface is not stored there, as a package with the same name is also provided in the JUNG API module (jung-api). All data structures are located there, but they cannot be resolved from the jung-graph-impl module due to the package name clash.
The problem that the edu.uci.ics.jung.graph package appears in both separate modules and causes problems while resolving dependencies has already been reported in the JUNG project. Unfortunately, this issue will no longer be fixed in JUNG version 2.