Java 如何从JAR文件执行脚本?

Java 如何从JAR文件执行脚本?,java,maven,jar,Java,Maven,Jar,我有一个maven项目,在这个项目中,我试图执行一个脚本(用R编写)。我把这个脚本文件也放在源代码目录中。我发现这个脚本根本没有执行。但是,当我将这个脚本移到jar文件之外时,它会执行!谁能告诉我为什么,并给我一些解决方案,把脚本放在罐子里,同时确保它的执行 非常感谢 jar中的文件不再是文件,因此要执行它,首先需要从外部提取的文件路径执行它您需要从jar文件中提取脚本: jar -xvf my.jar com/foo/my.script.sh 我会这样做: 使用ClassLoader.ge

我有一个maven项目,在这个项目中,我试图执行一个脚本(用R编写)。我把这个脚本文件也放在源代码目录中。我发现这个脚本根本没有执行。但是,当我将这个脚本移到jar文件之外时,它会执行!谁能告诉我为什么,并给我一些解决方案,把脚本放在罐子里,同时确保它的执行


非常感谢

jar中的文件不再是文件,因此要执行它,首先需要从外部提取的文件路径执行它

您需要从jar文件中提取脚本:

jar -xvf my.jar com/foo/my.script.sh

我会这样做:

  • 使用ClassLoader.getResourceAsStream()获取文件的InputStream
  • 将此输入流写入tmp dir
  • 使用Runtime.getRuntime()执行它。执行(…)

您的意思是提取整个jar文件还是只提取要执行的脚本文件?您能告诉我如何从jar中提取一个文件吗?只需从jar中提取所需的文件,有关更多详细信息,请参阅answer的链接谢谢您的帮助。脚本执行后,我必须删除提取的文件。看起来不太干净~但最重要的是,顺便说一句,它很管用。我不知道ACWrapper这个类来自哪里?你能解释一下吗?谢谢你的意思是最好从Java程序执行这个命令,然后执行第二个命令(提取的文件)?它看起来非常简单,没有任何外部库支持~@carlspring是的,我同意,但最好为步骤2提供一些代码。我不知道如何创建临时文件,临时文件位于何处,并在退出时将其删除?感谢~@EnsomHodder创建并使用如下内容:File.createTempFile(“前缀”、“后缀”)@EnsomHodder删除并使用File.deleteOnExit()@KonstantinSolomatov所以在创建临时文件后,我创建了一个输出流,将脚本文件写入这个新创建的tmp文件,然后调用它?@KonstantinSolomatov对不起,我正在尝试你的方法,但是我无法实现它。首先,我从给定的文件名“/src/main/resources/aaa.R”(要执行的脚本)获取inputstream;其次,我创建了一个临时文件,并从中创建了一个FileOutputStream来编写脚本。但是,当我的程序尝试从getResourcesAsStream获得的inputstream读取字节数组时,它将抛出NullPointerException。你能帮我渡过难关吗?我非常感谢你的帮助!