Aleksey Timofeev
Aleksey Timofeev

Reputation: 1

Gluon and JNA/JNR

I used JNA with GLUON before and had no problems. Everything worked. I tried replacing JNA with JNR.

When I run mvn gluonfx:runagent , JNR runs successfully.

However, after mvn clean gluonfx:build when running the exe file, the JRA does not work.

The message in the log is:

Warning: Could not resolve JNRTest$NativeLib for reflection configuration. Reason: java.lang.ClassNotFoundException: JNRTest$NativeLib.

Code JNR

import jnr.ffi.LibraryLoader;
import lombok.extern.slf4j.Slf4j;

public class JNRTest {
 public interface NativeLib {
     double cosh(double value);
 }

 public double test() {
     NativeLib lib = LibraryLoader.create(NativeLib.class).load("msvcrt.dll");
     return lib.cosh(2.3);
 }
}

Pom file:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <main.class>Main</main.class>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <javafx.version>17</javafx.version>
        <maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
        <javafx.maven.plugin.version>0.0.8</javafx.maven.plugin.version>
        <gluonfx.maven.plugin.version>1.0.19</gluonfx.maven.plugin.version>
        <gluonfx.target>host</gluonfx.target>
        <lombok.version>1.18.20</lombok.version>
        <logback.version>1.3.0-alpha14</logback.version>
        <guava.version>30.0-jre</guava.version>
        <gson.version>2.10.1</gson.version>
        <jna.version>5.14.0</jna.version>
    </properties>

    <dependencies>
        <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>com.github.jnr</groupId>
            <artifactId>jnr-ffi</artifactId>
            <version>2.2.10</version>
        </dependency>

        <dependency>
            <groupId>com.gluonhq</groupId>
            <artifactId>substrate</artifactId>
            <version>0.0.2</version>
        </dependency>


        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>${jna.version}</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna-platform</artifactId>
            <version>${jna.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>${gson.version}</version>
        </dependency>

        <dependency>
            <groupId>de.gsi.chart</groupId>
            <artifactId>chartfx-chart</artifactId>
            <version>11.2.7</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <annotationProcessorPaths>
                        <annotationProcessorPath>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </annotationProcessorPath>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>${javafx.maven.plugin.version}</version>
                <configuration>
                    <mainClass>${main.class}</mainClass>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.gluonhq</groupId>
                <artifactId>gluonfx-maven-plugin</artifactId>
                <version>${gluonfx.maven.plugin.version}</version>
                <configuration>
                    <target>${gluonfx.target}</target>
                    <mainClass>${main.class}</mainClass>
                    <linkerArgs>
                        <arg>management_ext.lib</arg>
                        <arg>psapi.lib</arg>
                    </linkerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

What could be the problem?

Upvotes: 0

Views: 19

Answers (0)

Related Questions