Многомодульный проект Maven и причал: запустить
Я пытаюсь разделить проект Maven WAR на два модуля, так что я могу создать отдельный JAR файл с инструментами командной строки. Результат имеет следующую структуру:
-
pom.xml
(упаковка pom
, имеет два модуля)
-
project-jar/
-
project-war/
-
pom.xml
(упаковка war
, зависит от project-jar
)
Если я запускаю команды mvn
из корня, все работает нормально. Я бы хотел использовать mvn jetty:run
, но для этого мне нужно выполнить команду в подпроекте WAR. Если я это сделаю, не удается найти подпроект project-jar
, поэтому он не будет работать. Даже mvn jetty:run-war
с полностью собранным файлом WAR в каталоге target
выходит из строя, потому что он сначала пытается "построить" проект. Мне удалось сделать это, установив project-jar
в локальный репозиторий Maven, что не очень приятно.
Есть ли способ использовать плагин Jetty в многомодульной конфигурации Maven?
Ответы
Ответ 1
Нет волшебного решения, и единственный, который я знаю, немного взломан и полагается на элемент extraClasspath
, который вы можете использовать для объявления дополнительных каталогов классов, относительно. Как это (от JETTY-662):
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.0.1.v20091125</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webAppConfig>
<contextPath>/my-context</contextPath>
<extraClasspath>target/classes;../my-jar-dependency/target/classes</extraClasspath>
</webAppConfig>
<scanTargets>
<scanTarget>../my-jar-dependency/target/classes</scanTarget>
</scanTargets>
</configuration>
</plugin>
Ответ 2
Создайте профиль внутри военного модуля (project-war
). Внутри этого профиля настройте пристань для присоединения к фазе жизненного цикла и выполните цель run
явно. Теперь, когда maven запускается из проекта toplevel с включенным профилем, он будет ссылаться на причал: запустить и иметь разрешение зависимости дочернего модуля (как это обычно бывает при выполнении команд maven из проекта toplevel).
Пример конфигурации, помещенный в pom.xml веб-модуля (project-war
), организует причал: запуск выполняется во время фазы test
. (Вы можете выбрать другую фазу, но убедитесь, что она находится после compile
.)
Выполнить из верхнего уровня: mvn test -Pjetty-run
или mvn test -DskipTests=true -Pjetty-run
. Это скомпилирует зависимости по мере необходимости и сделает их доступными, но вызовет причал: запустите в правильном модуле.
<profiles>
...
<!-- With this profile, jetty will run during the "test" phase -->
<profile>
<id>jetty-run</id>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.1.6.v20100715</version>
<configuration>
...
<webAppSourceDirectory>
${project.build.directory}/${project.build.finalName}
</webAppSourceDirectory>
...
</configuration>
<executions>
<execution>
<id>jetty-run</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
...
</profiles>
Ответ 3
Использование extraClasspath в конфигурации причала работает... но по какой-то причине, если зависимые баночки (из других модулей) устарели, некоторые вещи будут работать некорректно.
Ответ 4
Добавьте плагин причала к корневой помпе и настройте контекстHandler, указывающий на желаемую войну. Это работает для меня в проекте с несколькими модулями jar и двумя оверлейными войнами.
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.0.M2</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<contextHandlers>
<contextHandler
implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
<war>${project.basedir}/project-war/target/project-war-${project.version}.war</war>
<contextPath>/</contextPath>
</contextHandler>
</contextHandlers>
</configuration>
</plugin>
http://eclipse.org/jetty/documentation/current/jetty-maven-plugin.html#running-more-than-one-webapp
Ответ 5
Я знаю, что вы запрашиваете конфигурацию плагина, но вы можете просто определить проект в команде maven:
$ mvn jetty:run --projects project-war