我对Java比较陌生,但是对于提供一个文件夹和jar的列表方面,我们对类路径的工作方式有了一个很好的理解。
我已经编译了一个JAR(比如example.jar),它有一个主要功能,通常开始执行。有时我希望执行开始于另一个类(比如myAlternateClass.java),它有自己的main。我可以通过在执行jar时使用-cp参数来实现这一点,例如;
java -cp example.jar myAlternateClass
这可以按照我的要求运作,但我不确定这里到底发生了什么。
答案 0 :(得分:3)
我并不是100%确定你正在寻找什么,但我会试一试。
有两种方法可以使用jar文件。如果jar文件在其META-INF / MANIFEST.MF文件中指定了Main-Class,那么您可以使用jar文件加载java,并且将在该类的main方法中开始执行。
java -jar example.jar
另一方面,jar文件可以简单地加载到类路径上,这使得其中的所有类都可以使用。这是你给出的例子:
java -cp example.jar org.somewhere.MySecondClass
-cp example.jar
将jar中的所有类放在类路径上,第二个参数org.somewhere.MySecondClass
给出应该开始执行的类。第二个参数必须在jar中,因为指定一个类路径会覆盖默认值(它只是当前目录)。在这种情况下,java忽略jar的MANIFEST.MF文件中指定的任何Main-Class(如果指定了一个even)。
可以通过在它们之间放置冒号来指定多个jar文件以及不在jar中的java文件的目录。所以,
java -jar example.jar:. MyClass
可以从当前目录启动MyClass,但是将example.jar放在类路径上,以便MyClass可以创建example.jar中可用的任何类的实例。