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

标签 java shell command-line classpath

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

我试过了:

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

等等……

每个都给出一个错误说:

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

或给出 NoClassDefFoundError 指示未找到库。

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

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

最佳答案

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

来自 the documentation :

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.

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

你有两个选择:

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

关于java - 从命令行运行 JAR 文件并指定类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18413014/

相关文章:

python - 通过 Python 脚本更改用户 (su) (pexpect, popen...)

Xcode 命令行工具 - 如何在终端中运行?

shell - cp 命令应该忽略一些文件

java - 带 ArrayBlockingQueue 的 ThreadPoolExecutor

java - 在 Firebase 的 onDataChange 中设置变量(单值监听器)

JAVA - 为树数据结构创建一个迭代器,实现迭代器,并获取头节点

shell - 比较bash中声音文件的长度

java - 使用 Scanner 的 nextLine() 和 hasNextLine() 方法时出现问题

amazon-web-services - 如何在 AWS CLI 中输入 shell 参数

c++ - 模仿 C++ 中的 shell 参数解析器