当前位置: 首页 > 知识库问答 >
问题:

在jar中从Resourse运行SH文件

訾渝
2023-03-14

我可以运行在JAR中找到的SH文件吗?

我正在尝试从参考资料中提取文件并将其插入进程中。

                String fileName = command[0];
                ClassLoader classLoader = getClass().getClassLoader();

                File file = new File(classLoader.getResource(fileName).getFile());

                List<String> temp = new ArrayList<>();

                temp.add("sh");
                temp.add(file.getPath());
                temp.addAll(Arrays.stream(command).filter(s -> !s.contains(".sh")).collect(Collectors.toList()));

                String[] stringExec = new String[temp.size()];

                for (int i = 0; i < stringExec.length; i++)
                    stringExec[i] = temp.get(i);

//                Process process = Runtime.getRuntime().exec(stringExec);


                Path script = Files.createTempFile(null, ".sh",
                        PosixFilePermissions.asFileAttribute(
                                PosixFilePermissions.fromString("rw-rw-r--")));

                    Files.copy(file.toPath(), script, StandardCopyOption.REPLACE_EXISTING);

                String[] cmd = { "bash", script.toString() };

                ProcessBuilder builder = new ProcessBuilder(cmd);
                builder.inheritIO();

                Process process = builder.start();
                process.waitFor();

                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

                BufferedReader stdError = new BufferedReader(new
                        InputStreamReader(process.getErrorStream()));

                String line;
                while ((line = reader.readLine()) != null) {
                    CustomLog.log(line, TypeLog.LOG);
                }

                while ((line = stdError.readLine()) != null) {
                    CustomLog.log(line, TypeLog.WARN);
                }

                Files.delete(script);

当我尝试以这种方式运行时,我给了我一个错误

java.nio.file.NoSuchFileException: file:/root/Documents/module.jar!/file.sh

或者只是如果外部文件然后我可以执行它?

共有1个答案

茅鸿宝
2023-03-14

我怀疑files.copy会从JAR中复制文件。我建议使用classloader.getResourceasStream并将流复制到临时文件

 类似资料:
  • 注意2:在Jenkins/Configuration/under shell中,我提到了C:\cygwin\bin\mintty.exe 下面是输出 $C:\cygwin\bin\cygpath-w C:\cygwin\bin\mintty.exe[workspace]$C:\cygwin\bin\mintty.exe-xe D:\539707\tomcat-7.0.12\temp\hudson4

  • 我在Grizzly服务器上为Jersey应用程序运行以下简单示例: 当我从IntelliJ运行它时,一切都按照预期工作。 已连接到目标VM,地址:“127.0.0.1:61163”,传输:“Socket”2016年12月30日4:00:07PM com.sun.jersey.api.core.PackagesResourceConfig init信息:在包中扫描根资源和提供程序类:Applicat

  • 在docker文件中运行sh脚本时,出现以下错误: /上传。上海:5:/上载sh:sudo:找不到/上载sh:21: /上载sh:换人不好 DockerFile 有什么想法吗?

  • 问题内容: 如果您在 / myfolder中 有一个名为jar的文件,并且您想使用从中调用的类,那么如何从命令行进行操作呢? 我以为会进入目录然后说,但这不起作用。任何帮助,将不胜感激。 问题答案: 使用。 如果该类不在包中,则只需。 如果您不在所在目录中,则可以执行以下操作: 在Unix或Linux平台上:

  • 我需要使用存储在jar文件中的build.xml文件运行ANT构建。这个jar文件在类路径上可用。有没有可能做到这一点,而不爆炸的jar文件,并保存build.xml到本地目录?如果是这样,我该怎么做。 更新: jar文件是一个ant构建项目,其中类路径中的build.xml是通过使用ant库的java程序运行的。前端是一个web应用程序,它作为依赖项加载这个构建项目jar。用户将单击构建应用程序

  • 问题内容: 我在Bean Shell Sampler中尝试了以下方法; 看来,它无法运行。.我是否以正确的方式进行操作? 问题答案: 如果您需要使用Beanshell进行此操作,建议对process命令行进行以下修改: 有关更多信息,请参见cmd.exe文档。 但是,在大多数情况下,使用OS Process Sampler 可能更容易,它允许执行任意命令和程序。了解如何从JMeter本地和远程运行