如何使用外部库运行 jar

Posted

技术标签:

【中文标题】如何使用外部库运行 jar【英文标题】:How to run a jar with external libs 【发布时间】:2020-03-27 22:22:13 【问题描述】:

首先,我在 linux 环境中工作。 其次,我有一个 jar 文件,其中包含我项目的所有类,包括主类,位于一个目录中。第三,我将项目的所有外部依赖 jar 放在一个名为 lib 的子目录中。

问题是如何运行我的程序? 我试过了:

java -classpath ".:/lib/*"  com.pom.ticketprocessing.main.TicketProcessing
java -classpath ".:/lib/*"  tp.com.pom.ticketprocessing.main.TicketProcessing
java -classpath ".:/lib/*"  tp.jar.com.pom.ticketprocessing.main.TicketProcessing
java -classpath ".:/lib/*"  TicketProcessing
java -classpath "tp.jar:/lib/*.jar"  TicketProcessing
java -classpath "./tp.jar:./lib/*.jar"  TicketProcessing

在每种情况下,我都会收到错误:错误:无法找到或加载主类 TicketProcessing

那么,我该如何运行这个程序呢? 提前致谢。

【问题讨论】:

1) 第一行看起来最真实。不知道您的目录结构和名称很难说更多。 2)向我们展示你的“lib”目录的内容和./lib/tp.jar的内容。 不确定为什么 lib 目录的内容很重要。 lib 目录中有超过 6 个 jar 文件。这些 jar 是库文件,如 log4j 和数据库访问 jar。包含主类和应用程序的 jar 称为 tp.jar 但不在 lib 目录中。我有 ./deploy/tp.jar 和 ./deploy/lib/*.jar 主类叫做 TicketProcessing。 以上都不是。在列出所有库的 Manifest.MF 中添加 Class-path: 条目,并使用 java -jar ...当然还有Main-class: 属性。 【参考方案1】:

1) 由于您自己的 jar 不在 lib 目录中,因此您需要将它们都放在类路径中。这就是第 1 - 4 行不正确的原因。他们都不见了tp.jar

2) 要引用 jar,classpath 应该使用不带任何通配符的 jar 名称,或者使用一个星号后面的目录。这意味着您可以使用 .../lib/abc.jar:.../lib/def.jar.../lib/*,但以下将被忽略:.../lib/*.jar.

3) 注意/的使用。当path元素以/开头时,表示文件系统根目录下的路径,而不是当前目录下的路径。

4) . 的使用仅在调用当前目录中的脚本或可执行二进制文件时很重要。但是,当您将路径作为参数提供给 Java 时,就没有必要了。

在您的情况下,您需要以下命令:

java -classpath "tp.jar:lib/*" com.pom.ticketprocessing.main.TicketProcessing

或者如果你喜欢圆点:

java -classpath "./tp.jar:./lib/*" com.pom.ticketprocessing.main.TicketProcessing

【讨论】:

mentallurg,非常感谢您的解释和回答。它奏效了。

以上是关于如何使用外部库运行 jar的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Eclipse 中包含的外部库创建 jar?

如何引用公共目录(不是库)中的外部 jar 文件来使用 ant 构建 android 项目?

Eclipse:如何使用外部 jar 构建可执行 jar?

Java 8 .jar 文件不会使用 Netbeans 8.0.2 从桌面运行以使用外部库进行编译;如果库包含在源代码中,则运行良好

在 IntelliJ IDEA 中将外部库添加到工件 jar

如何缩小外部java库?