Thanks Nir for the links to the other discussions. I got the thing to run with the simple approach of including all artifacts. Probably did miss some before but it's late in the night here :)
One thing that still bugs me is that I have to do dependency resolution manually if I want to include artifacts for different platforms. Not a huge problem but far from a perfect solution. And I can't stop to think what other big projects are doing. Apart from toy-applications that run on the development system only, everybody should have the same problems I had. Or maybe I am just the last one striving for a platform independent application. Thank you all for helping out! ________________________________ From: Nir Lisker <nlis...@gmail.com> Sent: 20 October 2022 23:14 To: Thomas Reinhardt <thomas.reinha...@s4p.de> Cc: openjfx-dev@openjdk.org <openjfx-dev@openjdk.org> Subject: Re: Platform independent deployment There was a discussion on this some years ago, it started here: https://mail.openjdk.org/pipermail/openjfx-dev/2018-April/021762.html (and continued in https://mail.openjdk.org/pipermail/openjfx-dev/2018-May/021774.html). There might have been another discussion after that, I don't remember. Thomas, the graphics, media, and web modules contain OS-specific libraries. You will need to do what I showed for any of these that you use. On Fri, Oct 21, 2022 at 12:05 AM Thomas Reinhardt <thomas.reinha...@s4p.de<mailto:thomas.reinha...@s4p.de>> wrote: Interesting. I will repeat my test more carefully. Maybe I am just doing something incredible stupid. But Andy has a good point: why include the java classes at all in the platform-specific jars - shouldn't they just contain the native libraries if all the java code is indeed the same? -Thomas ________________________________ From: openjfx-dev <openjfx-dev-r...@openjdk.org<mailto:openjfx-dev-r...@openjdk.org>> on behalf of Andy Goryachev <andy.goryac...@oracle.com<mailto:andy.goryac...@oracle.com>> Sent: 20 October 2022 22:53 To: John Hendrikx <john.hendr...@gmail.com<mailto:john.hendr...@gmail.com>>; openjfx-dev@openjdk.org<mailto:openjfx-dev@openjdk.org> <openjfx-dev@openjdk.org<mailto:openjfx-dev@openjdk.org>> Subject: Re: Platform independent deployment Good point - are we packaging platform-specific javafx parts incorrectly? -andy From: openjfx-dev <openjfx-dev-r...@openjdk.org<mailto:openjfx-dev-r...@openjdk.org>> on behalf of John Hendrikx <john.hendr...@gmail.com<mailto:john.hendr...@gmail.com>> Date: Thursday, 2022/10/20 at 13:03 To: openjfx-dev@openjdk.org<mailto:openjfx-dev@openjdk.org> <openjfx-dev@openjdk.org<mailto:openjfx-dev@openjdk.org>> Subject: Re: Platform independent deployment Correct me if I'm wrong, but all the classes in the artifacts for win, linux and mac are actually exactly the same -- this is Java code after all, why would all Java classes for a platform be platform specific? It doesn't matter which one is packaged. The platform specific stuff lives in the native libraries -- my shaded jar just includes all of them for all platforms (dll for windows, so for linux, dylib for mac). I'm pretty sure I used this exact same jar to run my software on windows and linux. Never tested mac as I don't own one. My pom therefore includes all three, like Nir Lisker has, and my shaded artifact just packages them all (I get a lot of warnings about duplicate classes, but those can just be ignored). --John On 20/10/2022 19:03, Thomas Reinhardt wrote: > > Hi Nir, > > Does not work (I testet it) and it can not work (see below). > > Also, this is exactly what my naive test was (I did not use maven to > copy the artifacts, but the result obviously is the same). > > It can not work as the implementation classes have the same name and > thus the jre can not distinguish which one to load. For example both > javafx-web-18-win and javafx-web-18-linux define a class > "javafx.scene.web.WebEngine". From the jre's point of view they are > the same. > > What would be needed is > > Either: a class "javafx.scene.web.WebEngine" that is only a thin > wrapper to javafx.scene.web.linux.WebEngine. > > Or: a class that loads only one of the implementations during > application startup (technically it could load both implementations > with different classloaders, but lets not go there). > > There might be other solutions but I am not aware of any. > > > I was looking for a help forum but did only find the #introduction > link you mentioned. > > > -Thomas > > > > On 20/10/2022 17:52, Nir Lisker wrote: >> Hi Thomas, >> >> Did you try to just specify the platform-specific dependencies in the >> POM? >> >> <dependency> >> <groupId>org.openjfx</groupId> >> <artifactId>javafx-graphics</artifactId> >> <version>19</version> >> <classifier>win</classifier> >> </dependency> >> <dependency> >> <groupId>org.openjfx</groupId> >> <artifactId>javafx-graphics</artifactId> >> <version>19</version> >> <classifier>linux</classifier> >> </dependency> >> <dependency> >> <groupId>org.openjfx</groupId> >> <artifactId>javafx-graphics</artifactId> >> <version>19</version> >> <classifier>mac</classifier> >> </dependency> >> >> Seems more of a question for help forums, though if this information >> is not mentioned in https://openjfx.io/openjfx-docs/#introduction >> <https://openjfx.io/openjfx-docs/#introduction>, it might be worth >> adding it. >> >> On Thu, Oct 20, 2022 at 9:42 AM Thomas Reinhardt >> <thomas.reinha...@s4p.de<mailto:thomas.reinha...@s4p.de> >> <mailto:thomas.reinha...@s4p.de>> wrote: >> >> >> Hi! >> >> Apologizes if this is not the proper list to ask my question. >> >> For context: we are using the WebView of JavaFX in our legacy swing >> based frontend application. For now that is the only component we >> are >> using but we might migrate completely at a later point in time. >> >> I have an issue with the way platform dependent dependencies are >> handled. We are using maven btw. >> My understanding is that during the build a profile is selected >> based on >> the host os name and architecture. That profile then sets a property >> (javafx.platform) that is in turn used as the classifier for >> platform >> dependent dependencies. >> (Offtopic to my question: eclipse warns that the profile ids are not >> unique in the org.openjfx:javafx pom.xml). >> >> Which means that the result of my build is locked to a single >> platform. >> But we have customers for windows and linux and don't want to have >> separate artifacts as that would mean we also have to handle that >> distinction in our installer etc. >> >> I know I can override the automatically detected platform but >> that does >> not solve the issue. >> >> Ideally I would use something like -Djavafx.platform=all but that >> does >> not exist. >> >> My question is: is there an existing solution where I can just >> include >> all platform dependencies for say windows and linux and the runtime >> "sorts it out"? A naive test (manual copying of artifacts) of mine >> unfortunately failed. Of course I could just use custom classloaders >> and >> do it myself but I really would prefer to use an existing >> solution and >> not implement some workaround. >> >> If there is no solution (yet), is there interest in such a >> feature? We >> might be able to contribute to the project. >> >> >> -Thomas >>