Выполнение скрипта из Maven 3 с использованием плагина exec - блокируется - PullRequest
2 голосов
/ 18 октября 2011

С такой ситуацией я сталкиваюсь: на данный момент у меня есть два проекта Maven, один из которых ничего не делает, кроме описания зависимостей, репозиториев и т. Д. (Родитель) и дочерний элемент, который наследует pom.xml другого.В будущем будет создано больше модулей, следуя той же модели, что и дочерняя.

Мы решили развернуть сайты проектов (сгенерированные с помощью maven-site-plugin) в месте, доступном на этоммомент только через sftp .И я обнаружил, что невозможно определить местоположение сайта в <distributionManagement>, потому что я не смог интегрировать протокол sftp (я пытался использовать wagon-ssh-external).

В результате я создал скрипткоторый подключается к удаленному компьютеру и загружает содержимое локальной папки, в которой наш сайт развернут на этапе site-deploy :

echo "Uploading the site.."
lftp -u ${username},${password} sftp://${host} <<EOF
mirror -R --delete-first $sitedir $remotedir
echo "Exiting from lftp.."
bye
EOF
echo "Terminating script execution.."

Это прекрасно работает для родительского сайта, загружаясайт сразу после того, как он создан локально, но когда дочерний элемент получает в конце сценария, он не завершается должным образом, печатает Terminating script execution.. и остается там.

Я использую Eclipse, последнюю версию(3.7) с плагином Maven по умолчанию (v. 3.0.2).Чтобы создать и развернуть сайт в Eclipse, я щелкнул правой кнопкой мыши по родительскому проекту> Запуск от имени> Сборка Maven ...> parent clean site-deploy.

Это части родительского pom.xml:

<distributionManagement>
 <!-- Generate the site locally, then it'll be uploaded to the server -->
 <!-- Children will append their artifact ID to the base url  -->
 <site>
  <id>project-name</id>
  <name>Project Name</name>
  <url>file://${env.HOME}/testsite/</url>
 </site>
</distributionManagement>
...
<build> 
<pluginManagement>
 <plugins>
  <plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>exec-maven-plugin</artifactId>
   <version>1.2.1</version>
  </plugin>
 </plugins>
</pluginManagement>
<plugins>
 <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-site-plugin</artifactId>
  <version>3.0</version>
  <configuration>
    ...
 </plugin>
 <plugin>
  <groupId>org.codehaus.mojo</groupId>          
  <artifactId>exec-maven-plugin</artifactId>
  <inherited>false</inherited>
  <executions>
   <execution>
    <id>sh</id>
    <phase>site-deploy</phase>
    <goals>
     <goal>exec</goal>
    </goals>
    <configuration>
     <executable>sh</executable>
     <arguments>
      <argument>publish-site.sh</argument>
      <argument>${localsitedir}</argument>
      ...
     </arguments>
    </configuration>
   </execution>
  </executions>
 </plugin>
</plugins>
</build>

И от ребенка:

<build>
 <plugin>
  <groupId>org.codehaus.mojo</groupId>          
  <artifactId>exec-maven-plugin</artifactId>
  <executions>
   <execution>
    <id>sh</id>
    <phase>site-deploy</phase>          
    <goals>
     <goal>exec</goal>
    </goals>
    <configuration>
     <executable>sh</executable>
     <arguments>
      <argument>../parent/publish-site.sh</argument>
      <argument>${localsitedir}/child</argument>
      ...
     </arguments>
    </configuration>
   </execution>
  </executions>
 </plugin>
</build>

Я пробовал разные способы настройки exec плагин (без использования pluginManagement, наследование родительской конфигурации плагина и только перезапись части аргументов и т. д.), и он всегда блокируется при завершении сценария и не завершает выполнение.

Сайт загружен правильно, но, конечно, я не хочу вручную останавливать выполнение сборки Maven каждый раз, когда хочу обновить сайт (также планируется развертывание артефактов из проекта на сервере Jenkins.так что, надеюсь, к тому времени развертывание сайта будет работать).

1 Ответ

0 голосов
/ 26 мая 2014

Мой ответ основан на большом количестве предположений ... Я столкнулся с подобной проблемой в отношении команды SSH, которая не завершается, и причина была:

Возможно, 'lftp' запускает процесс, который не завершаетсяи, возможно (вероятно), плагин maven-exec зацикливается на stdout и stderr для печати всех соответствующих сообщений перед выходом.Если они закрыты не всеми авторами, он застревает.

Попробуйте перенаправить вывод 'lftp' в / dev / null, на всякий случай.

...