This is why I suggested long ago that there should be .jmod zips in Maven 
central or similar.  We need a dependency management system that works with 
JMODs for exactly this reason. Zips in the current public repos would work.

Scott

> On Nov 21, 2022, at 11:08 AM, Armin Schrenk <[email protected]> wrote:
> 
> Oh, thanks, didn't knew that. I tried the JMOD files provided by Gloun 
> company with a local build. Works!
> 
> But how can this be integrated into an automatic/CI build? Using a more or 
> less arbitrary url pointing to a third-party website downloading a zip file 
> of unknown structure would result in a "ducktape build" and is not very 
> resilient against any changes. Furthermore, some build systems (i.e., 
> ubuntu-ppa) do not allow external downloads.
> 
> Does automatic build examples exist which are jlinking JFX to a custom JRE?
> 
> Best wishes,
> 
> Armin
> 
> Am 16/11/2022 um 15:39 schrieb Kevin Rushforth:
>> Leaving aside the question of signed libraries, if you are using jpackage / 
>> jlink to create a custom Java runtime with the JavaFX modules, then you 
>> should use the JMODs bundles and not the artifacts from Maven central. The 
>> maven modules are a handy convenience for developers, but not recommend for 
>> creating packaged applications.
>> 
>> -- Kevin
>> 
>> 
>> 
>> 
>> On 11/16/2022 6:29 AM, Armin Schrenk wrote:
>>> Hello,
>>> 
>>> for our application, a customer reported that the shared libraries (in this 
>>> case DLLs) used by JFX are unsigned and thus were blocked from loading, 
>>> which blocks the app from starting. The culprit for blocking is a new 
>>> security feature for Windows 11, Smart App Control 
>>> (https://support.microsoft.com/en-gb/topic/what-is-smart-app-control-285ea03d-fa88-4d56-882e-6698afdb7003).
>>>  Since this feature seems to be a future part of Windows, i suggest to sign 
>>> the shared libs before the maven release. In our case, the archive 
>>> javafx-graphics-*-win.jar contains the DLLs.
>>> 
>>> Apart from this feature request, we want to fix the issue on our side. To 
>>> do that, I investigated into the sharedLib loading of JFX.
>>> 
>>> SharedLib Loading is in JFX is done with the NativeLibLoader 
>>> (https://github.com/openjdk/jfx/blob/19+11/modules/javafx.graphics/src/main/java/com/sun/glass/utils/NativeLibLoader.java).
>>>  It does the following to load the native lib:
>>> 
>>> 1. Load the DLLs from a certain path (see below)
>>> 2. On Failure, load the DLLs from a resource (aka the jar) by extracting 
>>> them to a cache directory and load them from there
>>> 3. On Failure, do other stuff not of interest
>>> 
>>> Our app is modular (or as much as possible), thus, the DLLs were always 
>>> loaded from the resource. But this extract-and-cache approach is 
>>> unsatisfying from our point of view. The app uses a custom JRE via jlink 
>>> and is packaged with jpackage, and we would like to place the sharedLibs at 
>>> build time somewhere in the app directory.
>>> 
>>> So I had to figure out the where to place the DLLs, or more specifically, 
>>> what path is checked in Step 1 of shared libLoading. Reading the inline 
>>> comment starting at line 117, it should be the same dir as the jar is 
>>> placed. Unfortunately, this is not the case and i had to dig more through 
>>> the code to find out.
>>> 
>>> Our app has the following structure:
>>> |- JarsAndMods
>>>     | - Mods
>>>         | - modul1.jar
>>>         | - modul2.jar
>>>         | - ...
>>>         | - javafx-graphics-XXX-win.jar
>>>         | - ...
>>>     | - nonModular1.jar
>>>     | - nonModular2.jar
>>>     | - ...
>>> |- executable
>>> 
>>> According to the comment, the path to place all DLLs should be 
>>> /JarsAndMods/Mods.
>>> But verbose logging showed and later proofed by the code, it has to be 
>>> /JarsAndMods/bin.
>>> 
>>> My questions are:
>>> 
>>> Why does JFX require only for Windows the `../bin` directory?
>>> 
>>> Additionally, this inline comment has a FIXME that Step 1 of 
>>> SharedLibLoading should be removed in the future. Is there already an ETA?
>>> 
>>> And lastly, I would love to see some Documentation for this. I can write it 
>>> and create the PR, but where should it be placed?
>>> 
>>> 
>>> Best wishes,
>>> 
>>> Armin
>>> 
>> 

Reply via email to