如何在 Jar 文件内或旁边执行脚本?

问题描述 投票:0回答:1

我有一个脚本生成 2 个新文件作为令牌并使用它们进行身份验证以执行任务。它还有两个额外的文件,它从一个文本文件中读取信息并将其插入到另一个 JSON 文件中。

所以我有...

  • 2 个代币文件
  • 1 个脚本文件
  • 1 个文本文件
  • 1 个 json 文件

在我的本地程序中,我可以执行并且脚本可以正常运行。它会搜索我的资源文件夹,找到这 4 个文件,并使用它们毫无问题地执行任务。然而,当我在我的后端外部服务器上部署这个程序进行测试时,程序报告它无法再在资源目录中找到这些文件。

据我所知,当它编译成一个 jar 文件时,我让它搜索的目录不再有效

目录更改为...

  • /部署
  • --数据
  • --项目.jar

我查找资源文件的代码是这样的:

private final String scriptPath = "/src/main/resources/";

public void runScript4() {

    String script = "hello.bat";
    try {
        String result = null;
        Process awk = new ProcessBuilder( scriptPath + script).start();
        awk.waitFor();
        System.out.println("Script executing...");
        BufferedReader in =
                new BufferedReader(new InputStreamReader(awk.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
            result += inputLine;
        }
        in.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

在本地,它将转到 src/main/resources 以获取脚本并使用在同一目录中找到的其他文件,但是当它被部署并构建到 jar 中时,这不起作用。

在线部署时执行此脚本的最佳方法是什么?有没有办法让脚本在 jar 中创建新文件以及编辑现有的 txt/JSON 文件?或者推荐另一种方法?

java file jar scripting edit
1个回答
0
投票

"/src/main/resources/";
- 为什么部署应用程序时会有“src”目录?根本没有文件(jar文件中有一个条目。那不是文件!)。

Windows 无法查看 jar 文件内部(如果可以的话,那就太奇怪了!)。

因此,您需要回答两个不同的问题:

  • 如何读取 jar 文件中的资源?
  • 如何将文件写入临时目录,以便我可以将 Windows cmd 指向它?

你必须这样做(基本上,'从你自己的 jar 中提取那个 bat 文件,就像一个迷你安装程序') - 因为要么是那样,要么编写你自己的知道如何读取和执行 bat 的全 java cmd.exe 变体文件。因为windows的

cmd.exe
不知道如何执行bat文件inside的jar(jar?什么是jar?-为什么windows会知道那是什么?)

这两个很容易结合起来:

var tempFile = Files.createTempFile("hello", ".bat");
try (var in = MyClass.class.getResourceAsStream("/hello.bat")) {
  Files.copy(in, tempFile);
}

// now run processbuilder and point it at tempFile.
© www.soinside.com 2019 - 2024. All rights reserved.