Java 如何以编程方式获取运行时使用的JNA版本?

Java 如何以编程方式获取运行时使用的JNA版本?,java,jna,Java,Jna,我试图在运行时打印日志中使用的JNA版本 如何在运行时通过代码获取JNA的版本?当前JNA版本在构建时写入相应命名接口中的常量版本。该接口是包私有的,但由类实现,使常量可从本机公开使用。(林特可能会抱怨。)所以你可以简单地做: import com.sun.jna.Native; public class Test { public static void main(String[] args) { System.out.println("JNA Versio

我试图在运行时打印日志中使用的JNA版本


如何在运行时通过代码获取JNA的版本?

当前JNA版本在构建时写入相应命名接口中的常量
版本。该接口是包私有的,但由类实现,使常量可从
本机
公开使用。(林特可能会抱怨。)所以你可以简单地做:

import com.sun.jna.Native;

public class Test {
    public static void main(String[] args) {
        System.out.println("JNA Version: " + Native.VERSION);
    }
}
输出:

JNA Version: 5.6.0
您还可以获取本机位的版本,该版本遵循与整个项目版本不同的编号方案(使用不会更改已编译本机部分的新映射递增),但在某些上下文中可能相关:

System.out.println("JNA Native Version: " + Native.VERSION_NATIVE);

Native
类还公开了一个
boolean
方法,您可以使用该方法检查JNA是否至少是指定的版本或更高版本。

不幸的是,版本和版本\u Native不可见,因此您的答案不起作用。@CCCCoder3我的答案起作用。我只是执行了它。你试过了吗?您是否注意到我指定了
Native
类,该类在
Version
接口中公开包私有常量?这到底是怎么“不起作用”的呢?您是否遇到编译器错误/运行时错误?空结果?默认情况下,接口中的常量为
public
。无法使用
Version.Version
的原因是接口本身是包私有的。但是,
Native
类是
public
,因此它的iherited(
public
)字段
VERSION
可见。它不适用于我,可能我使用的版本与您不同?但是如果你看到版本的文档,你会看到它是包公共的。当本机实现版本时,它将无法更改这一点。我不知道你为什么认为它神奇地公开了。这将真正帮助我理解你所说的“不适合你”的意思。你到底看到了什么错误?