С такой ситуацией я сталкиваюсь: на данный момент у меня есть два проекта 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.так что, надеюсь, к тому времени развертывание сайта будет работать).