У меня есть артефакт, который создается и развертывается определенным образом (а не как файл jar). В ходе развертывания создается файл войны.
Как настроить pom, чтобы артефакт был также развернут как файл jar в другом месте?
У меня есть артефакт, который создается и развертывается определенным образом (а не как файл jar). В ходе развертывания создается файл войны.
Как настроить pom, чтобы артефакт был также развернут как файл jar в другом месте?
Maven deploy
означает развертывание артефакта в Репозиторий Maven, а не на сервере приложений.
Настройте дополнительный артефакт JAR следующим образом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>make-a-jar</id>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Прикрепите этот новый артефакт к вашему проекту:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>some file</file>
<type>jar</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
Этот пост в блоге, и его комментарии имеют ответ.
Эти три конфигурации плагинов позволят вам построить/установить/развернуть версию jar вместе с войной.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>make-a-jar</id>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<packaging>jar</packaging>
<artifactId>${project.artifactId}</artifactId>
<groupId>${project.groupId}</groupId>
<version>${project.version}</version>
<file>
${project.build.directory}/${project.artifactId}-${project.version}.jar
</file>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<packaging>jar</packaging>
<generatePom>true</generatePom>
<url>${project.distributionManagement.repository.url}</url>
<artifactId>${project.artifactId}</artifactId>
<groupId>${project.groupId}</groupId>
<version>${project.version}</version>
<file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file>
</configuration>
</execution>
</executions>
</plugin>
"maven way" состоит в том, чтобы разделить src/main/java
на отдельный модуль и зависеть от этого файла войны.
Если вы абсолютно устойчивы к такому подходу, вы можете использовать профиль для изменения содержимого элемента packaging
. Я не уверен, что это возможно.
Разделение их - правильный путь. Принуждение maven для производства войны и банки в одном модуле возможно, но вызовет проблемы в будущем.
Вы должны добавить соответствующую зависимость артефакта в зависимостях файла pom.
Пример:
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>1.2.2</version>
<scope>compile</scope>
</dependency>
Один из способов решения этой проблемы - создать модуль для создания банку, а затем использовать плагин сборки для создания военного файла с банкой в WEB-INF/lib этой войны. Я бы настоятельно рекомендовал против этого. Вам будет лучше иметь проект jar и военный проект с родительским проектом, строящим оба модуля.