如果我正在创建superjar.jar
,并且它需要一个jar文件stellar.jar
,我需要在superjar.jar的清单文件中添加以下行Class-Path: path/to/stellar.jar
。但在我的类路径中,我已经有了stellar.jar
。这是怎么回事?为什么superjar.jar
不能尝试从我的类路径中查找stellar.jar
的位置?
我需要在superjar.jar类路径的清单文件中添加以下行:Path/to/stellar.jar.
如果环境变量CLASSPATH被忽略,并且它被忽略,如果您将超级jar用作可执行jar,并使用启动它,那么您需要在超级jar中使用该路径
java -jar superjar.jar
superjar.jar可以访问类路径,如果它在启动时没有用不同的特定类路径覆盖类路径,也没有运行可执行jar的技术,它总是只使用该jar中的classpath,并且总是忽略类路径的其他尝试。
CLASSPATH=/foo/bar/superjar.jar:/opt/some/stellar.jar
java somepackage.SomeClass
类路径是相对的还是绝对的,这是一个不同的、无关的讨论。上面的例子使用Unix/Linux语法。在Windows上,您可以使用反斜杠和作为分隔符";"。
如果CLASSPATH意味着一个环境变量,那么您将了解到Java、所有IDE和所有Java EE应用程序服务器都会忽略它。
我工作的任何机器上都没有CLASSPATH环境变量,因为它毫无用处。您需要学习如何在不依赖环境变量的情况下正确设置CLASSPATH。
两件事:
- stellar.jar的路径相对于superjar.jar
- 如果stellar.jar已经在类路径中,那么不管superjar.jar的manifest说什么,它都在类路径