Spring boot - Как указать путь Java в Process Builder - PullRequest
0 голосов
/ 11 октября 2018

Я имею Java 7 в моей системе в качестве конфигурации по умолчанию.Но я должен использовать Java 8 только для весенней загрузки.

Следующая команда работает нормально в моем терминале.

ubuntu@karthick:~$ JAVA_HOME=/opt/jdk1.8.0_181 mvn spring-boot:run

Но когда я попытался выполнить ее из Process Builder, она показываетошибка.

Код:

ProcessBuilder pb = new ProcessBuilder("JAVA_HOME=/opt/jdk1.8.0_181", "mvn", "spring-boot:run");
pb.directory(new File("/home/ubuntu/project/springbootexample"));
Process p = pb.start();

Появляется ошибка ниже

error=2, No such file or directory. Stacktrace follows:
java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
    at java.lang.ProcessImpl.start(ProcessImpl.java:130)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
    ...
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at net.bull.javamelody.JspWrapper.invoke(JspWrapper.java:150)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:281)
    at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:202)
    at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:180)
    at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:82)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

Как решить проблему?

1 Ответ

0 голосов
/ 11 октября 2018

Я бы предложил создать файл скрипта (test.sh ниже), в котором вы можете установить java home и добавить другую команду для запуска весенней загрузки и просто вызвать этот скрипт из java, используя следующий код:

  String[] args = { "/bin/bash", "test.sh"};

        StringBuilder builder = new StringBuilder();
        Process p2 = null;
        String result = null;
        String[] cmd = { "sudo", "-s" };
        Runtime.getRuntime().exec(cmd);
        p2 = Runtime.getRuntime().exec(args);
        BufferedReader reader = new BufferedReader(new 
       InputStreamReader(p2.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            builder.append(line);
        }
        result = builder.toString();
...