我有一个脚本生成 2 个新文件作为令牌并使用它们进行身份验证以执行任务。它还有两个额外的文件,它从一个文本文件中读取信息并将其插入到另一个 JSON 文件中。
所以我有...
在我的本地程序中,我可以执行并且脚本可以正常运行。它会搜索我的资源文件夹,找到这 4 个文件,并使用它们毫无问题地执行任务。然而,当我在我的后端外部服务器上部署这个程序进行测试时,程序报告它无法再在资源目录中找到这些文件。
据我所知,当它编译成一个 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 文件?或者推荐另一种方法?
"/src/main/resources/";
- 为什么部署应用程序时会有“src”目录?根本没有文件(jar文件中有一个条目。那不是文件!)。
Windows 无法查看 jar 文件内部(如果可以的话,那就太奇怪了!)。
因此,您需要回答两个不同的问题:
你必须这样做(基本上,'从你自己的 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.