下面是一个用于在 jar 文件中运行main类方法的 bat 文件的工作示例,其中另外指示了依赖项:和,其 API 由类中的应用程序使用。这也意味着bat文件旁边的dll文件夹中有一个子目录jdk-11.0.21+9和JNA库。com.acme.jna.Appjna-wrapper-0.0.1-SNAPSHOT.jarjna-5.14.0.jarcommons-cli-1.6.0.jarcom.acme.jna.App
:: Full path to the bin directory of the 32-bit version of Java
:: set javabin="C:\Program Files (x86)\Eclipse Adoptium\jdk-11.0.22.7-hotspot\bin"
:: or if java-hotspot is in the script directory
:: set javabin=%~dp0\jdk-11.0.21+9\bin
set javabin=%~dp0\jdk-11.0.21+9\bin
:: Full path to the directory containing native libraries for JNA
:: set jnalibpath="C:/path/to/jna/libraries/"
:: or if you have dll subdirectory
:: set jnalibpath=%~dp0\dll\
set jnalibpath=%~dp0\dll\
cd %javabin%
java ^
-Djna.debug_load=true ^
-Djna.debug_load.jna=true ^
-Djna.library.path=%jnalibpath% ^
-Dfile.encoding=UTF-8 ^
-Dstdout.encoding=UTF-8 ^
-Dstderr.encoding=UTF-8 ^
-classpath ^
%~dp0commons-cli-1.6.0.jar;^
%~dp0jna-5.14.0.jar;^
%~dp0jna-wrapper-0.0.1-SNAPSHOT.jar ^
com.acme.jna.App ^
-host 192.168.178.4
-classpath
您可以使用或选项将缺失的类添加到类路径中-cp
,但这会使应用程序的运行变得困难。如果依赖项没有写在 中的某个位置META-INF
,那么将很难确定将哪些库添加到类路径中。您可以从文档中了解如何运行该应用程序。该选项
-jar
的设计使您可以运行不需要参数的可执行 jar 文件。因此,这些选项可能不兼容。您还可以阅读有关如何运行 jar 文件的答案。
在这个答案中,我通常建议将缺少的库放在
META-INF/lib
. 无论哪种方法最适合您,请使用它。下面是一个用于在 jar 文件中运行
main
类方法的 bat 文件的工作示例,其中另外指示了依赖项:和,其 API 由类中的应用程序使用。这也意味着bat文件旁边的dll文件夹中有一个子目录jdk-11.0.21+9和JNA库。com.acme.jna.App
jna-wrapper-0.0.1-SNAPSHOT.jar
jna-5.14.0.jar
commons-cli-1.6.0.jar
com.acme.jna.App
这里我们调用java并安装
classpath
。此外,还传递了一个参数host
,该参数将在类args
方法数组中可用。main
com.acme.jna.App
我不知道在这种情况下,
jna-wrapper
在 Maven 项目的 pom.xml 中指示主类是否重要,但以防万一......