How to create a fat jar for my JavaFX program?
Davide Perini
perini.davide at dpsoftware.org
Mon Jul 20 19:06:57 UTC 2020
PS: I add that I'm not new to maven,
before java fx, I had a fat jar with gstreamer library, jna, and so on.
the only problem I have is that it seems that I'm not able to bundle
javafx with my fat jar.
Il 20/07/2020 20.55, Davide Perini ha scritto:
> I agree, don't want to download a JDK.
> Is there a way to simply to it the old but good way using maven
> assembly plugin or shade plugin?
>
> I am following this guide here:
> https://openjfx.io/openjfx-docs/#modular
>
> I have done what they suggest in my pom file:
>
> <dependency> <groupId>org.openjfx</groupId>
> <artifactId>javafx-controls</artifactId>
> <version>${javafx.version}</version> </dependency> <dependency>
> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId>
> <version>${javafx.version}</version> </dependency> <dependency>
> <groupId>org.openjfx</groupId>
> <artifactId>javafx-graphics</artifactId> <version>14</version>
> <classifier>win</classifier> </dependency>
>
>
> <plugin> <groupId>org.openjfx</groupId>
> <artifactId>javafx-maven-plugin</artifactId>
> <version>${javafx.maven.plugin.version}</version> <configuration>
> <mainClass>org.dpsoftware.FastScreenCapture</mainClass>
> </configuration> </plugin> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-assembly-plugin</artifactId> <configuration>
> <outputDirectory>${project.build.directory}/</outputDirectory>
> <finalName>JavaFastScreenCapture</finalName> </configuration>
> <executions> <execution>
> <id>make-executable-jar-with-dependencies</id> <phase>package</phase>
> <goals> <goal>single</goal> </goals> <configuration> <archive>
> <manifest> <addClasspath>true</addClasspath>
> <mainClass>org.dpsoftware.FastScreenCapture</mainClass> </manifest>
> </archive> <descriptorRefs>
> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs>
> </configuration> </execution> </executions> </plugin>
>
>
> jar with dependencies says
>
> Error: JavaFX runtime components are missing, and are required to run
> this application
>
>
> still don't understand how to do it the right way.
> I would like to do it with maven, is this possible?
>
> Thanks,
> Davide
>
> Il 20/07/2020 20.26, Scott Palmer ha scritto:
>> jlink and jdeps are module-based, so you do have to be careful.
>> Neither will work properly when you try to run it against a
>> non-modular project (found that out the hard way when Java 11 broke
>> the world by removing the EE modules from Java SE and no modules were
>> available to replace them), but you can use them to make a JRE image
>> from a set of modules, such as those supplied by OpenJFX.
>>
>> I still think the .jmod files should be hosted by artifact
>> repositories to make this work smoothly. Downloading an SDK, seems
>> so old-school when we have good dependency-management tools.
>>
>> Once you have a JRE image that includes JavaFX, then your application
>> Jar files (all of them, no need to make anything 'fat') can easily be
>> bundled with that JRE using jpackage.
>>
>> I have done Gradle scripts to do all that and it wasn’t difficult.
>>
>> Scott
>>
>>> On Jul 20, 2020, at 1:39 PM, Michael Paus <mp at jugs.org> wrote:
>>>
>>> In order to create a real platform installer with jpackage and
>>> jlink/jdeps you don't have to use the java
>>> module system at all. Have a look at this tutorial which I
>>> co-autored together with Dirk Lemmermann:
>>> <https://github.com/dlemmermann/JPackageScriptFX>
>>> Michael
>>>
>>> Am 20.07.20 um 19:25 schrieb Davide Perini:
>>>> Unfortunantly so few dependencies supports Java Modules this day,
>>>> so fat JAR is the only way I can do it.
>>>>
>>>> Thanks
>>>>
>>>> Il 20/07/2020 02.50, Scott Palmer ha scritto:
>>>>> The JavaFX classes are there, but what about the native libraries?
>>>>>
>>>>> A fat jar isn’t a good way to distribute a Java application these
>>>>> days. Now you should probably be using jpackage and/or jlink to
>>>>> bundle your application classes with a runtime suitable for
>>>>> running the application.
>>>>>
>>>>> Scott
>>>>>
>>>>>> On Jul 19, 2020, at 5:32 PM, Davide Perini
>>>>>> <perini.davide at dpsoftware.org> wrote:
>>>>>>
>>>>>> Hi all,
>>>>>> thanks for the great project, I love JavaFX.
>>>>>>
>>>>>> I always used the maven plugin to crete fat jars with all my
>>>>>> deps. The resulting jar is an executable one and ready to use.
>>>>>>
>>>>>> This is my pom that create the fat jar.
>>>>>>
>>>>>> but when I try to exceute the jar I get this error:
>>>>>>
>>>>>> Error: JavaFX runtime components are missing, and are required to
>>>>>> run this appli
>>>>>> cation
>>>>>>
>>>>>>
>>>>>> if I explode the fat jar I can see that there are the javafx
>>>>>> class in it. what am I doing wrong?
>>>>>>
>>>>>> Thanks
>>>>>> Davide
>>>>>>
>>>>>> <plugin> <groupId>org.openjfx</groupId>
>>>>>> <artifactId>javafx-maven-plugin</artifactId>
>>>>>> <version>${javafx.maven.plugin.version}</version> <configuration>
>>>>>> <mainClass>org.dpsoftware.FastScreenCapture</mainClass>
>>>>>> </configuration> </plugin> <plugin>
>>>>>> <groupId>org.apache.maven.plugins</groupId>
>>>>>> <artifactId>maven-assembly-plugin</artifactId> <configuration>
>>>>>> <outputDirectory>${project.build.directory}/</outputDirectory>
>>>>>> <finalName>JavaFastScreenCapture</finalName> </configuration>
>>>>>> <executions> <execution>
>>>>>> <id>make-executable-jar-with-dependencies</id>
>>>>>> <phase>package</phase> <goals> <goal>single</goal> </goals>
>>>>>> <configuration> <archive> <manifest>
>>>>>> <addClasspath>true</addClasspath>
>>>>>> <mainClass>org.dpsoftware.FastScreenCapture</mainClass>
>>>>>> </manifest> </archive> <descriptorRefs>
>>>>>> <descriptorRef>jar-with-dependencies</descriptorRef>
>>>>>> </descriptorRefs> </configuration> </execution> </executions>
>>>>>> </plugin>
>>>>>>
>
More information about the openjfx-dev
mailing list