Tried to use JLink to create a runtime image, however:
Error: automatic module cannot be used with JLink: graphviz.java
I'm using the following library which has only automatic modules.
Did some searches, and it seems that I can use ModiTect to generate module-info for the library and create a runtime image.
However, as I am new to modules I couldn't figure it out. I guess I would need a more in-depth explanation then what I could find on ModiTect's GitHub page.
my modules-info.java:
module elitonlais {
requires javafx.controls;
requires javafx.fxml;
requires graphviz.java;
opens elitonlais to javafx.fxml;
opens elitonlais.controller to javafx.fxml;
opens elitonlais.model to javafx.fxml;
exports elitonlais;
exports elitonlais.controller;
exports elitonlais.model;
}
My pom file:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>elitonlais</groupId>
<artifactId>minafd</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>14</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>14</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>guru.nidi</groupId>
<artifactId>graphviz-java</artifactId>
<version>0.17.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.3</version>
<configuration>
<mainClass>elitonlais.App</mainClass>
<launcher>launch.sh</launcher>
<compress>2</compress>
<jlinkZipName>MinAFD</jlinkZipName>
<jlinkImageName>MinAFD</jlinkImageName>
<includePathExceptionsInClasspath>true</includePathExceptionsInClasspath>
</configuration>
</plugin>
<plugin>
<groupId>org.moditect</groupId>
<artifactId>moditect-maven-plugin</artifactId>
<version>1.0.0.Beta2</version>
<executions>
<execution>
<id>create-runtime-image</id>
<phase>package</phase>
<goals>
<goal>create-runtime-image</goal>
</goals>
<configuration>
<modulePath>
<path>${project.build.directory}/modules</path>
</modulePath>
<modules>
<module>module-info.java</module>
<!-- <module>javafx.controls</module>
<module>javafx.graphics</module> -->
</modules>
<launcher>
<name>test33</name>
<module>module-info.java/elitonlais.app</module>
</launcher>
<compression>2</compression>
<stripDebug>true</stripDebug>
<outputDirectory>${project.build.directory}/jlink-image</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
The entire project structure: https://github.com/EMachad0/MinAFD
You should be able to add it following the documentation at the link Adding module descriptors to existing JAR files.
Adding the following to your existing
pom.xml
as an additional<execution>
step for ModiTect should work:Note also that the project has specified an automatic module name of
guru.nidi.graphviz
so you'll need to change your ownmodule-info
to require that, rather than the auto-derivedgraphviz.java
.