java - 从命令行运行时为类路径提供相对于主类的路径

标签 java command-line classpath

我正在尝试从命令行执行程序 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 的执行位置。就我而言,这可能是任何地方,因为这取决于它的安装位置。有没有直接的方法来解决这个问题?

谢谢大家。

最佳答案

实际上有几种方法:

  1. 使您的 jar 文件成为可执行的 jar 文件。这是通过添加 a manifest file 来完成的。到 jar 指定主类是什么,以及 jar 依赖项相对于主 jar 文件的位置的位置。执行该程序的命令将是 java -jar path\to\jarfile.jar
  2. 使用包装器可执行文件或 shell 脚本,它使用脚本本身的位置来组成类路径。这样的脚本取决于系统(Unix/Windows),但是两个平台都允许脚本文件知道它们自己的位置,从而使用该位置作为 jar 文件位置的基础。该技术的一个优点是它还允许将系统属性、内存选项等传递给 JVM。

我建议您使用标准构建工具,例如 gradle ,其中有 application plugin为您生成所有平台的所有脚本文件,并将整个应用程序捆绑到 zip 或 tar.gz 文件中。

关于java - 从命令行运行时为类路径提供相对于主类的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32568887/

相关文章:

java - 从类路径目录获取资源列表

java - 如何解决 ClassNotFoundException?

java - 如何使用 Powermock 和 Mockito 模拟通过私有(private)构造函数初始化的私有(private)静态最终字段?

java - 索引 mongodb json 文档 java 驱动程序

java - 我想将数据从 mysql 加载到 jsp 但出现无法处理的错误

java - Java 快速排序的 StackOverFlowError

bash - 我可以通过扩展名制作制表符完成过滤器文件吗?

php - 带有 php/node/python 脚本的 START/B 不能按预期工作

command-line - 编写 Clojure 代码以重复从控制台读取行的惯用方法?

java - 我可以使用 Gradle 强制确定类路径中依赖项的顺序吗?