Hi Michael, Thanks for testing this.
You can avoid downloading all platform jars by specifying the javafx.platform with maven: mvn -Djavafx.platform=mac clean package exec:java There is a rationale behind this: maven would be able to detect the OS and make sure only the platform jars related to that OS are downloaded. But that won't work with gradle. So we have this base pom that, unless javafx.platform is specified, will depend on all platforms, which will cause gradle to download the correct platform (and the others as well). Now, for SNAPSHOTs this doesn't work with gradle (see previous mail) but that is another issue. For releases, this works with gradle. I'm very open to suggestions on how to change this. As for architectures: I would suggest we follow the approach of the excellent nd4j project and append the arch if used (see https://oss.sonatype.org/content/repositories/snapshots/org/nd4j/nd4j-native/1.0.0-SNAPSHOT/ -- it even includes linux-x86_64-avx512) For Eclipse: by setting the {javafx.platform} variable somewhere, it will be avoided to download the other platforms. But your error message seems to suggest something else: Error: JavaFX runtime components are missing, and are required to run this application That is an issue I brought up somewhere else: http://mail.openjdk.java.net/pipermail/openjfx-dev/2018-June/021977.html The Java launcher will check if the main class extends javafx.application.Application and if that is the case, it will do a hard check on the availability of the javafx.graphics module in the modulepath. If it can't find that, it will bail with the message above. So that is happening. This doesn't happen when you launch via maven, as maven is launching the application inside its own Java process -- hence the main class is a maven class, not extending javafx.application.Application. The solution to this is somehow tell maven or eclipse to use modules. With gradle, we have a relative easy way to do this: run { doFirst { jvmArgs = [ '--module-path', classpath.asPath, '--add-modules', 'javafx.controls' ] classpath = sourceSets.main.output } } (unfortunately, we can't use gradle due to that snapshot/platform issue, but I tested it with a release extension instead of a snapshot extension and then it works). I would assume maven allows for a similar approach. In general, this is an issue not specific to JavaFX: how can you tell maven to use the artifacts as modules (e.g. set the correct module-path and add the modules). The only thing that is JavaFX specific is that the Java launcher will exit if ((the main class extends Application) AND (no modules used)). See http://mail.openjdk.java.net/pipermail/openjfx-dev/2018-June/021983.html for the discussion about this. I'm not 100% what the best approach is here. It sounds a bit unfair that you can only NOT use classpath when your main class extends javafx.application.Application, but the best approach is probably a fix in a maven plugin so that it works with modules (might already be there?) - Johan On Fri, Jul 6, 2018 at 12:51 PM Michael Paus <m...@jugs.org> wrote: > Hi, > I tried the examples on my Mac with Maven and with a simple > mvn clean package exec:java > on the command line they all compiled and worked out of the box. > Great work! I used OpenJDK 11ea20 for this. > > I have a few questions though: > > 1. I observed that maven downloaded all dependencies for all platforms > (mac,win,linux) > which does not seem to make much sense. Is this normal or could that be > prevented somehow? > > 2. How would the platform concept be extended once we have to also > distinguish between architectures? > (Linux on x86 vs. Linux on ARM for the Raspi for example) > > 3. How is this setup supposed to be used in an IDE like Eclipse. I tried > to import one of the example projects > into Eclipse and Eclipse ended up creating maven dependencies for all > platforms and not just the Mac. > This has the consequence that you cannot start an example directly in > Eclipse anymore because it then fails with: > Error: JavaFX runtime components are missing, and are required to > run this application > You can launch it via maven but I normally prefer to do it directly > which is no problem with a normal maven project. > > Michael > > Am 05.07.18 um 11:03 schrieb Johan Vos: > > A first batch of snapshots for the JavaFX 11 modules is now in the maven > > sonatype snapshot repository (see > > https://oss.sonatype.org/content/repositories/snapshots/org/openjfx/ > although > > you probably don't want to work with these artifacts directly but use > build > > tools like maven or gradle to do that) > > > > This is work based on the not-yet-merged PR#83: > > https://github.com/javafxports/openjdk-jfx/pull/83 > > > > Basically, you need to specify which modules you need (transitive > > dependency management will be handled by maven as the modules contain a > > pom.xml with the same dependencies as the module-info.java), e.g. > > > > > > <dependency> > > <groupId>org.openjfx</groupId> > > <artifactId>javafx.controls</artifactId> > > <version>11.0.0-SNAPSHOT</version> > > </dependency> > > > > > > I have a few samples that show how you can use those artifacts in your > > maven project: > > https://github.com/johanvos/javafx11samples (note that this is a > temporary > > repository) > > the topics/javafx3d directory contains a number of standalone samples > that > > can be executed via > > mvn clean install exec:java > > > > Note that some of the samples create a build.gradle as well, but I never > > managed to get gradle working with the combination of classifiers and > > SNAPSHOT versions (it's actually the reason why I went back from gradle > to > > maven in other projects -- e.g. dl4j related). > > > > If someone else can somehow fix the build.gradle, that would be great of > > course. > > > > Before PR#83 is merged, it would be nice to have a few reports from > people > > using the snapshots. > > > > - Johan > > >