在 Jar 文件中运行类

Posted

技术标签:

【中文标题】在 Jar 文件中运行类【英文标题】:Run class in Jar file 【发布时间】:2011-10-10 11:24:26 【问题描述】:

如果您在 /myfolder 中有一个名为 myJar.jar 的 jar 文件,并且您想从中使用名为 myClass 的类,您如何从命令行执行此操作?

我以为是进入目录并说java -cp myJar.jar.myClass,但这不起作用。任何帮助将不胜感激。

【问题讨论】:

java -cp myJar.jar myClass 对我来说很好用——你的命令行中有一个虚假的句号而不是空格吗? 你说你想“使用”那个类是什么意思?有没有你特别想调用的主要方法? 【参考方案1】:

这是执行.jar 的正确方法,.jar 中的任何一个类都应该有main(),以下是它的参数:

java -DLB="uk" -DType="CLIENT_IND" -jar com.fbi.rrm.rrm-batchy-1.5.jar

【讨论】:

【参考方案2】:

Java 中有两种可用的 JAR 文件:

    包含清单文件的可运行/可执行 jar 文件。 要运行 Runnable jar,您可以使用 java -jar fileName.jarjava -jar -classpath abc.jar fileName.jar

    不包含清单文件的简单 jar 文件,因此您只需提供路径 java -cp ./fileName.jar MainClass

    即可运行主类

【讨论】:

【参考方案3】:

使用java -cp myjar.jar com.mypackage.myClass

    如果类不在包中,则只需 java -cp myjar.jar myClass

    如果你不在myJar.jar所在的目录中,那么你可以这样做:

      在 Unix 或 Linux 平台上:

      java -cp /location_of_jar/myjar.jar com.mypackage.myClass

      在 Windows 上:

      java -cp c:\location_of_jar\myjar.jar com.mypackage.myClass

【讨论】:

只是添加它 - 如果 com.mypackage.myClass(在上面的示例中)对其他 jar 有依赖关系,请按如下方式运行它:java -cpdependentfile1.jar;dependentfile2.jar;c: \location_of_jar\myjar.jar com.mypackage.myClass 一个可能的失败路径,以防万一这不起作用:确保你的类的完全限定路径与你的 jar 文件中的完全匹配。如果你解压缩 -l /location-of-jar/myjar.jar,并看到 com/mypackage/myClass 以外的其他内容,这就是你的问题。 (例如,如果你看到 bin/com/mypackage/myClass,你应该已经 cd'ed 到 bin 来构建你的 jar 文件;你没有工作。) 使用 MyClass,而不是 myClass 通过尝试上述方法,我在线程“main”java.lang.NoClassDefFoundError: cucumber/api/cli/Main at com.company.project.demo.bdd.runner.Execute 中收到错误异常.main(Execute.java:20) 引起:java.lang.ClassNotFoundException: cucumber.api.cli.Main at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 1 更多 如果你在 linux 上使用 ':' 而不是 ';'对于添加依赖 jar,类路径分隔符 ':' 是 ';'在窗户上。示例:-> java -cpdependentfile1.jar:dependentfile2.jar:c:\location_of_jar\myjar.jar com.mypackage.myClass【参考方案4】:

你想要:

java -cp myJar.jar myClass

Documentation 给出了以下示例:

C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool

【讨论】:

【参考方案5】:

假设您在myJar.jar 文件所在的目录中,并且myClass 上有一个public static void main() 方法:

您使用以下命令行:

java -cp ./myJar.jar myClass

地点:

    myJar.jar 位于当前路径,请注意. 不在大多数系统的当前路径中。 完全合格的路径也是首选。

    myClass 是类的完全限定包路径,该示例假定myClass默认包 中,这是不好的做法,如果它在嵌套包中,则为com.mycompany.mycode.myClass

【讨论】:

以上是关于在 Jar 文件中运行类的主要内容,如果未能解决你的问题,请参考以下文章

Java:在运行时将类添加到 Jar 存档

类路径中的某些运行时 JAR 文件的版本不兼容。考虑将它们从类路径中删除

由于无法加载主类错误而无法运行 JAR 文件

我用jar file(附带MANIFEST.MF)导出jar包可以运行 但是用Runnable jar file却说找不到类

Travis CI 说 JRE 是 11 但仍然不会运行类文件版本 55 的 JAR

你可以在 Pentaho 勺子工具中运行 jar 文件吗?