我正在尝试从命令行执行程序 attachmentUploader.jar
的编译版本。这对各种 Java 库有许多依赖项,我计划将它们与程序捆绑在一起并指定为类路径的一部分。该包将在环境之间移动,并将使用该环境的 Java 运行时执行。对于我的环境使用绝对路径,命令如下所示:
"C:\Program Files\Java\jdk1.6.0_37bin\java" -cp "C:/Users/My Documents/jars/attachmentLoader.jar";"C:\Dev Tools\jxl.jar";"C:\Dev Tools\org.apache.commons.codec";"C:\More Dev Tools\java-json.jar" com.custom.test.postClient
我想将所有类路径 jar 路径修改为相对于我的主类的保存位置,但我读到在这种情况下的相对路径将相对于 Java 的执行位置。就我而言,这可能是任何地方,因为这取决于它的安装位置。有没有直接的方法来解决这个问题?
谢谢大家。
最佳答案
实际上有几种方法:
- 使您的 jar 文件成为可执行的 jar 文件。这是通过添加 a manifest file 来完成的。到 jar 指定主类是什么,以及 jar 依赖项相对于主 jar 文件的位置的位置。执行该程序的命令将是
java -jar path\to\jarfile.jar
- 使用包装器可执行文件或 shell 脚本,它使用脚本本身的位置来组成类路径。这样的脚本取决于系统(Unix/Windows),但是两个平台都允许脚本文件知道它们自己的位置,从而使用该位置作为 jar 文件位置的基础。该技术的一个优点是它还允许将系统属性、内存选项等传递给 JVM。
我建议您使用标准构建工具,例如 gradle ,其中有 application plugin为您生成所有平台的所有脚本文件,并将整个应用程序捆绑到 zip 或 tar.gz 文件中。
关于java - 从命令行运行时为类路径提供相对于主类的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32568887/