Search code examples
javafxjavafx-11

Creating Fat Jars: What is the mods folder?


I'm just on:

https://openjfx.io/openjfx-docs/#modular

trying to create a jar I can run on other systems (that do not have the javafx libraries as would happen with a non-developer layman user) and they've told me to use this:

dir /s /b src\*.java > sources.txt & javac --module-path %PATH_TO_FX% -d mods/hellofx @sources.txt & del sources.txt

What is mods/ Where is that supposed to be? Are they talking about out/ ?


Solution

  • The doc you have linked refers to this sample.

    If you clone the sample, and follow instructions on how to compile and run the project, the first command can be divided in three parts:

    dir /s /b src\*.java > sources.txt & \
    javac --module-path %PATH_TO_FX% -d mods/hellofx @sources.txt & \
    del sources.txt
    

    The first part just gets all the Java files in the src path and adds that to sources.txt file:

    C:\path\to\hellofx\src\module-info.java
    C:\path\to\hellofx\src\hellofx\HelloFX.java
    

    The second part calls the javac command (see reference) to compile the content of sources.txt, adding the required --module-path option to include the JavaFX modules, and also adding the output or destination -d option:

    -d directory

    Sets the destination directory for class files. If a class is part of a package, then javac puts the class file in a subdirectory that reflects the package name and creates directories as needed.

    This means that we are going to compile hellofx.HelloFX.java into the directory mods/hellofx, resulting in:

    C:\path\to\hellofx\mods\hellofx\module-info.class
    C:\path\to\hellofx\mods\hellofx\hellofx\HelloFX.class
    

    The third step will just remove the sources.txt file.

    And now you can run your module:

    java --module-path "%PATH_TO_FX%;mods" -m hellofx/hellofx.HelloFX
    

    You can specify any directory for the output, of course, so you can change it to out or build for instance, but then make sure you modify it accordingly in the rest of the instructions.