В моей войне, у меня есть файл exe
в WEB-INF\classes\
Java, выполнить ех из WAR в Java коде
Как я могу выполнить этот файл в Java коде (Как я могу указать путь к этому файлу)?
command = " ? ";
Process x = p.exec(command);
В моей войне, у меня есть файл exe
в WEB-INF\classes\
Java, выполнить ех из WAR в Java коде
Как я могу выполнить этот файл в Java коде (Как я могу указать путь к этому файлу)?
command = " ? ";
Process x = p.exec(command);
Лучший способ сделать найти реальное местоположение файла внутри веб-приложение является использование ServletContext.getRealPath (см http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String))
Вы можете получить доступ к этому объекту из сеанса ...
Te следующий подход может работать:
1) Подготовить полный путь исполняемого файла:
ServletContext context = getContext();
String fullPath = context.getRealPath("/WEB-INF/classes/executable");
2) Execute, как вы обычно делаете это:
String[] cmd = { fullPath /*[...] arguments */};
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
Это упрощенный пример; вы также можете узнать больше о ProcessBuilder.
ОК, спасибо, но у меня есть другие другие проблемы, разрешенные по-другому – user2519456
Зависит от того, где вы его используете и как. Если это тестовый сервер или предопределенная инфраструктура, и это простой способ автоматизации (возможно, временного решения) - почему бы и нет. В противном случае я бы согласился с тем, что «это плохая идея», и вы должны подумать о переносе исполняемых файлов, зависящих от платформы, из войны. –
Это плохая идея. Представьте себе, что ваш .war packege должен работать практически на любом сервере («.war - независимая от платформы»), а ваш .exe-файл скомпилирован только для одной архитектуры.
Лучше должен выполнять ваш .exe как внешнюю программу только для отдельной независимой от платформы и зависящей от платформы части. Затем в java вы можете протестировать операционную систему и на этой основе запустить желаемую программу externel.
Прочитано this link с похожим вопросом.
ОК, спасибо, отличная идея! Я делаю это таким образом – user2519456
ОК, спасибо, это работает – user2519456