файл скрипта запущенного Python, содержащийся в .jar - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь выполнить скрипт python, который содержится внутри .jar. Это работает в среде Eclipse, но позже при попытке запустить из консоли с помощью java -jar my.jar это не удалось, потому что он не находит путь к файлу:

Caused by: java.io.FileNotFoundException: class path resource [test.py] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:

В Java я использую это:

        File file = resourceLoader.getResource("classpath:test.py").getFile();

        map.put("file", file.getPath());

        CommandLine commandLine = new CommandLine("python.exe");
        commandLine.addArgument("${file}");
        commandLine.addArgument("-e");
        commandLine.addArgument("env");
        commandLine.addArgument("-i");
        commandLine.addArgument("'" + id + "'");

        commandLine.setSubstitutionMap(map);

Я нашел ответы, которые рекомендуют мне не использовать это resourceLoader.getResource("classpath:test.py").getFile();, но resource.getInputStream(). Как я могу преобразовать этот входной поток в объект File, чтобы выполнить его позже?

1 Ответ

1 голос
/ 07 октября 2019

Вы не можете запустить / открыть файл, который находится внутри .jar. Чтобы запустить его, вам придется скопировать его, вероятно, во временную папку и запустить его оттуда. Пример, где рабочий стол открывает изображение, которое находится внутри .jar:

public static void main(String[] args) throws IOException {
    String pathOfImageInsideJar = Test.class.getResource("/test/example/image.jpg").getFile();
    File imageInsideJar = new File(pathOfImageInsideJar);
    File tempExport = File.createTempFile("tempimage", ".jpg");
    tempExport.deleteOnExit();
    Files.copy(imageInsideJar.toPath(), tempExport.toPath(), StandardCopyOption.REPLACE_EXISTING);
    Desktop.getDesktop().open(tempExport);
}
...