在maven目标jar

时间:2018-01-23 09:05:02

标签: java maven pom.xml

我的应用程序的资源目录中有一个文件pythonScript.py。构建jar后,文件位于target\MyApp\BOOT-INF\classes

现在,当我直接调用此文件pythonScript.py时,我收到以下错误:

file - python.py does not exists

这就是我调用python文件的方式:

Java代码

private static final String imageRemoverScript = "removeImages.py";

String[] cmd = { "python", imageRemoverScript, File.getAbsolutePath(),
                 basePath.concat(fileName.concat(new String("" + fileCount))) };

ScriptCallerUtility.pythonScript(cmd);

1 个答案:

答案 0 :(得分:0)

如果Python文件位于resources文件夹中并且您有maven项目,那么您将python文件包含在jar文件中。

所以你实际上可以做的是创建一个Java可执行类,它从类路径中提取Python文件,并将Python文件复制到一个临时文件中。然后执行临时文件,然后删除它。

以下是实现上述操作的示例:

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Scanner;

public class PythonRunner {

    public static void main(String[] args) throws IOException {
        Path temp = Files.createTempFile("py", ".py"); // Create temporary file with prefix, suffix
        try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sample.py")) {
            Files.copy(in, temp, StandardCopyOption.REPLACE_EXISTING); // Copy to temporary file.
            // Execute the file and do whatever your need
            Process process = new ProcessBuilder(
                    "C:\\Users\\BLAH\\python.exe", temp.toString()).start();
            try(Scanner scanner = new Scanner(process.getInputStream())) {
                scanner.useDelimiter("\\Z");
                System.out.println(scanner.next());
            }
            Files.deleteIfExists(temp); // Delete the temporary file.
        }
    }
}

然后你可以使用生成的jar文件使用类似于此命令的命令运行它:

java -cp project.example-1.0-SNAPSHOT.jar com.fernandes.python.run.PythonRunner

如果sample.py包含:

print ("hi")

您将看到此控制台:

hi