2012-07-05 148 views
4

我有一个maven项目,其中,我正在尝试执行脚本(用R编写)。我也把这个脚本文件放在源代码目录中。我发现这个脚本完全没有执行。但是,当我将此脚本移到jar文件外时,它会执行!任何人都可以告诉我为什么,并给我一些解决方案,将脚本放入jar中,同时确保其执行?如何从JAR文件执行脚本?

非常感谢!里面罐子

回答

6

我会做到以下几点:

  • 获取的InputStream与ClassLoader.getResourceAsStream()文件
  • 写这篇文章的InputStream TMP的目录
  • 与调用Runtime.getRuntime执行它()。执行(..)
+0

到目前为止的最佳答案。 – carlspring

+0

@carlspring是的,我同意,但最好给步骤2的一点点代码。我不知道如何创建临时文件,临时定位,并在退出时删除它?谢谢〜 –

+0

@EnsomHodder创建类似这样的用法:File.createTempFile(“prefix”,“suffix”) –

1

文件不再是一个文件,所以它执行首先需要extract it somewhere,然后从外部提取的文件路径执行它

+0

你的意思是提取出完整的jar文件或仅脚本文件来执行?你能告诉我如何从jar中提取单个文件吗? –

+0

只需从jar中提取所需的文件,查看链接以获取更多详细信息,从答案 –

+0

感谢您的帮助。脚本执行后,我必须删除提取的文件。似乎它不是很干净〜但最重要的是,它的工作原理 –

1

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

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

的类,所以你的意思是从Java程序执行这个命令更好,然后执行第二个命令(解压文件)?它似乎很简单,并没有任何外部库支持〜 –