如何使用外部库运行 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的主要内容,如果未能解决你的问题,请参考以下文章
如何引用公共目录(不是库)中的外部 jar 文件来使用 ant 构建 android 项目?
Java 8 .jar 文件不会使用 Netbeans 8.0.2 从桌面运行以使用外部库进行编译;如果库包含在源代码中,则运行良好