How to create a fat jar for my JavaFX program?

Davide Perini perini.davide at dpsoftware.org
Mon Jul 20 19:15:21 UTC 2020


Ok solved it reading this stackoverflow:
https://stackoverflow.com/questions/52653836/maven-shade-javafx-runtime-components-are-missing

thanks to all

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