2010-07-06 2 views
5

Мы хотели бы отправить некоторые вспомогательные скрипты (shell-скрипты) как часть войны с приложением. К сожалению, похоже, что наша система сборки (maven) отбрасывает разрешения для всех файлов, а сценарии заканчиваются без установленного бита исполняемого файла.Исполняемые файлы в военном файле

Возможно ли это сделать? Поддерживает ли формат .war исполняемые файлы? Если да: как можно было бы maven сохранить разрешения/исправить их где-нибудь в этом процессе?

+0

Могу я просто спросить, как эти вспомогательные скрипты будут использоваться (и кем)? –

+0

самим приложением :), я знаю, это не способ «JE22», но мы должны перенести некоторые файлы результатов на разные хосты с помощью scp и ftp. Выполнение этого с помощью простого сценария оболочки (который получает файл результата в качестве аргумента) не вызывает затруднений. мы не хотим делать это с помощью plain-java. – reto

ответ

4

Проблема более вероятна, что эти биты не поддерживаются в базовом zip-формате.

Бит исполнения не нужно устанавливать, если вы явно выполняете/bin/sh с именем сценария.

Также обратите внимание, что ваша программа, которая знает местоположение сценария, может вызывать «chmod + x script.sh» перед запуском.

0

Поставка исполняемых файлов за пределы WAR. Назовите их из WAR.

+0

Это решение, но оно приносит другие проблемы (первое из них приходит мне на ум). Я не уверен, что это должна быть лучшая практика. –

+0

Альтернативное решение: поставьте исполняемый файл внутри WAR, и при каждом запуске программно извлеките исполняемый файл в тот же каталог и вызовите его там. – mcandre

+0

Я пробовал это решение, но не смог заставить его работать. По какой-то причине загрузчик классов не смог найти ресурс скрипта. Я потрачу еще час или около того, работая над ним, и если это не удастся, это даст возможность для нового вопроса :) –

1

AFAIK, нет никакого способа установить права доступа к файлам в пределах войны/банку (это, однако, возможно при использовании Maven Assembly плагин для создания архива в бинарное распределение вашего проекта, но это другая история).

Так что, я бы либо:

  • Deliver (в виде бинарного дистрибутива) и запустить эти скрипты вне веб-приложение ~ или ~
  • Прочитайте файлы из пути к классам, записать их в каталог java.io.tmpdir, установите бит выполнения, а затем выполните их там ~ или ~
  • Используйте решение @ Thorbjørn (не пробовал, но я думаю, это сработает); Мне просто интересно, откуда вы выполняете эти сценарии.
+0

Чтение между строк, война взорван, поэтому скрипты являются действительными файлами, которые могут быть вызваны. В противном случае скрипты могут быть предоставлены на stdin под Unix. –