在 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.jar
或 java -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 文件中运行类的主要内容,如果未能解决你的问题,请参考以下文章
类路径中的某些运行时 JAR 文件的版本不兼容。考虑将它们从类路径中删除
我用jar file(附带MANIFEST.MF)导出jar包可以运行 但是用Runnable jar file却说找不到类