繁体   English   中英

从命令行运行 JAR 文件并指定类路径

[英]Run a JAR file from the command line and specify classpath

我已经编译了一个JAR文件并在清单中指定了 Main-Class(我使用了 Eclipse导出功能)。 我的依赖项都在一个标有lib的目录中。 我似乎无法直接回答如何执行我的 JAR 文件,同时指定它应该使用lib/*作为类路径。

我试过了:

]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main

ETC...

每个都给出一个错误说:

Error: Could not find or load main class ....

或给出NoClassDefFoundError指示未找到库。

我什至尝试重新制作 JAR 文件并包含lib目录和内容,但仍然没有骰子......

如何从命令行执行 JAR 文件并指定要使用的类路径?

当您指定-jar时,将忽略-cp参数。

文档中

您也不能将所需的 jar 文件“包含”到另一个 jar 文件中(您需要提取它们的内容并将 .class 文件放入您的 jar 文件中)

你有两个选择:

  1. lib目录中的所有 jar 文件包含到清单中(您可以在那里使用相对路径)
  2. 使用-cp在命令行上指定所有内容(包括您的 jar):
    java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

运行一个 jar 文件并指定一个类路径,如下所示:

java -cp <jar_name.jar:libs/*> com.test.App

jar_name.jar是您要执行的 JAR 的全名

libs/*是您的依赖项 JAR 的路径

com.test.App是 JAR 中具有main(String[])方法的类的完全限定名称

jar 和依赖 jar 应该具有执行权限。

您可以在 unix shell 中执行这些操作:

java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

您可以在 windows powershell 中执行以下操作:

java -cp "MyJar.jar;lib\*" com.somepackage.subpackage.Main

或者,如果您愿意,可以使用清单来指定类路径和主类,这样就不需要使用-cp或指定主类。 在您的情况下,它将包含如下行:

Main-Class: com.test.App
Class-Path: lib/one.jar lib/two.jar

不幸的是,您需要在清单中拼出每个 jar(不是一个大问题,因为您只做一次,您可以使用脚本来构建文件或使用 ANT、Maven 或 Gradle 等构建工具)。 并且引用必须是运行java -jar MyJar.jar的相对或绝对目录。

然后执行它

java -jar MyJar.jar

您可以执行 Runtime.getRuntime.exec(command) 重新启动 jar,包括带有 args 的类路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM