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

c6ubokkw  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(104)

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

  • 2个令牌文件
  • 1个脚本文件
  • 1个文本文件
  • 1个json文件

在我的本地程序中,我可以执行,脚本将运行良好。它将搜索我的资源文件夹,找到这4个文件,并使用它们来执行任务没有问题。然而,当我在后端外部服务器上部署这个程序进行测试时,程序报告说它在资源目录中找不到这些文件。
据我所知,当它编译成jar文件时,我让它搜索的目录就不再有效了
目录将更改为...

  • /部署
  • --数据
  • --project.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文件?还是推荐另一种方法?

eqqqjvef

eqqqjvef1#

"/src/main/resources/";-为什么在部署应用程序时会有一个“src”目录?根本没有文件***(jar文件中有一个条目。那不是文件!).
Windows不能查看jar文件内部(如果可以的话,那就太奇怪了!).
因此,您需要回答两个独立的问题:

  • 如何读取jar文件中的资源?
  • 我如何写一个文件到一个临时目录,这样我就可以在它指向windows cmd?

你必须这样做(基本上,“从你自己的jar中提取bat文件,就像一个迷你安装程序”)-因为要么这样,要么编写你自己的all-java cmd.exe变体,知道如何读取和执行bat文件。因为windows的cmd.exe不知道如何在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.

相关问题