JDK-8189111 : Cannot build JavaFX modules with boot JDK that does not already include them
Type:Bug
Component:javafx
Sub-Component:build
Affected Version:9,10
Priority:P3
Status:Resolved
Resolution:Fixed
Submitted:2017-10-10
Updated:2018-03-26
Resolved:2017-11-20
The Version table provides details related to the release that this issue/RFE will be addressed.
Unresolved : Release in which this issue/RFE will be addressed. Resolved: Release in which this issue/RFE has been resolved. Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.
We have a bootstrap problem in that we can no longer build javafx.* modules using a boot JDK that does not already include the javafx.* modules.
Comments
Changeset: c69cde9a039e
Author: kcr
Date: 2017-11-20 07:58 -0800
URL: http://hg.openjdk.java.net/openjfx/10-dev/rt/rev/c69cde9a039e
8189111: Cannot build JavaFX modules with boot JDK that does not already include them
Reviewed-by: prr
20-11-2017
+1
-phil.
17-11-2017
Webrev:
http://cr.openjdk.java.net/~kcr/8189111/webrev.00/
The fix basically does two things:
1. Add the needed qualified exports when compiling the module classes
2. Fixed an issue with the JSL and Css2Bin tasks, where they were still mistakenly putting the classes for the graphics module on the classpath (which won't work), rather than using the module path
While I was working on this, I added a new HAS_JAVAFX_MODULES property, which is true if the boot JDK has javafx modules. I ended up not needing it, but left the property in anyway. We will eventually need it in order to run tests using a boot JDK without javafx modules, which is currently not possible. This will require conditionally using --patch-module (if the boot JDK has javafx modules) or --module-path (if not).
Testing:
I fully tested the following combinations on Linux:
1. Boot JDK with javafx modules (Oracle JDK 9), local FX & JDK repo including closed sources
2. Boot JDK without javafx modules (OpenJDK 9), local FX & JDK repo including closed sources
3. Boot JDK with javafx modules (Oracle JDK 9), local FX & JDK repo with only open sources
4. Boot JDK without javafx modules (OpenJDK 9), local FX & JDK repo with only open sources
For each of the above combinations I did the following:
* build local FX modules using the boot JDK -- gradle sdk jdkZip
* build local JDK using the built FX exports
* build and test local FX using the locally built JDK -- gradle -PFULL_TEST=true all test
Finally, I did a sanity check on Windows and Mac using a boot JDK with / without javafx modules