【问题标题】:Pass Resources Folder path to the command when running a jar运行 jar 时将资源文件夹路径传递给命令
【发布时间】:2021-08-19 18:32:48
【问题描述】:

我构建了一个 jar 文件,但不包括我的资源文件夹。因为运行jar时需要编辑属性文件。但我不知道如何将资源文件夹路径与 jar 命令一起传递。我用来运行 jar 的当前命令如下

java -jar myProject.jar

我也试过下面的命令

java -jar myProject.jar -Dconfig=/a/full/path

更新 因为我想编辑我的属性文件在运行 jar 文件之前我不想在 jar 文件中嵌入资源文件夹。我需要将资源文件夹路径传递给用于运行 jar 文件的命令

【问题讨论】:

    标签: java command-line jar


    【解决方案1】:

    使用资源系统(MyClass.class.getResource/getResourceAsStream 是正确的方法;通常写成MyClass.class.getClassLoader().getResourcegetClass().getResourcegetClass().getClassLoader().getResource(),这些都有些错误)对于“可变”文件是不正确的。

    如果有属性文件,则在用户的主目录中查找它(Paths.get(System.getProperty("user.home"), "myapp.properties")。如果不存在,则加载此文件的默认版本,打包到您的 jar 中,通过使用 @ 读取它987654327@,并将其写入该位置,然后通知用户他们可以在那里进行编辑。

    在您的 jar 旁边有一个您从自己的进程写入的文件是一种糟糕的安全做法,并且通常是一种过时的应用程序模型,现在已经持续了 20 年。除了用户自己和管理员用户之外,包含可执行代码的目录不应是可写的。应用程序绝对没有任何业务可以在可执行文件附近编写任何内容。如果您的系统甚至允许您,那么您的操作系统/您的用户设置配置错误。或者至少,假设(即强制)计算机用户以一种模式运行,这意味着他们启动的进程可以写入可执行文件所在的位置 -只是糟糕的软件。

    结论:您认为您想写入位于您的 jar 旁边的属性文件,但您没有。相反,写在 user.home - 这就是它的用途。

    【讨论】:

    • 我没有写入我的属性文件。我想根据环境(例如文件路径、数据库名称、用户名等)在运行我的 jar 之前更改属性。因此我想将资源文件夹传递到我的命令中
    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多