Создание файлов WAR из конфигурации MUVEN MAVEN MUVEN
-
28-09-2019 - |
Вопрос
у меня есть Мавен Проект, с 4 компонентами, настойчивость, общими и другими.
Соответствующие вещи от моего Пома Файлы:
Родитель POM:
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<modules>
<module>components/TestWeb</module>
<module>components/TestOther</module>
<module>components/TestPersistence</module>
<module>components/TestCommon</module>
</modules>
<build>
<defaultGoal>package</defaultGoal>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<dependentWarExcludes>
**/hibernate.cfg.xml,**/sql-map-config.xml,**/web.xml,WEB-INF/classes/META-INF/**
</dependentWarExcludes>
</configuration>
</plugin>
</plugins>
</build>
общий помпон:
<modelVersion>4.0.0</modelVersion>
<artifactId>test-common</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<relativePath>../../pom.xml</relativePath>
<version>0.0.1-SNAPSHOT</version>
</parent>
Пом настойчивость:
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>test-persistence</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<relativePath>../../pom.xml</relativePath>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.test</groupId>
<artifactId>test-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
Веб Pom:
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>test-web</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>TestWeb</name>
<parent>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<relativePath>../../pom.xml</relativePath>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependency>
<groupId>com.test</groupId>
<artifactId>test-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.test</groupId>
<artifactId>test-persistence</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.test</groupId>
<artifactId>test-other</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Может быть, я сломал что-то в копировании и вставке, но XML действителен.
- Когда я запускаю пакет MVN, проект Военный файл Не создается, но все пакеты компонентов создаются и хорошо сформированы.
- Если, то я бегу
mvn war:war
, Файл войны сгенерирован пустым.
Как это может исправить?
Решение
Наличие плагинов в корневом проекте не работает. Вы можете настроить плагины здесь, как это
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.2</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
Но они все еще должны быть упомянутыми в подпроектах, которые будут активными (за исключением плагинов, которые являются частью процесса по умолчанию, например, Maven-компилятор-плагин и плагин Maven-Resource).
Так что либо вы перемещаете вашу конфигурацию War-Plugin в pluginManagement
в корневом проекте и включить
<build>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<execution>
<goals>...</goals>
</execution>
</plugin>
</build>
В вашем военном проекте или вы перемещаете всю конфигурацию в войну.
Дополнительное примечание: убедитесь, что порядок модулей в корневом POM выровнен к отношениям зависимости между проектами (в вашем случае просто обратный порядок).
Другие советы
Я создал аналогичную структуру проекта и вставил приставок, которые вы предоставили, но не смогли воспроизвести проблему. Бег mvn package
Из агрегата пом просто работает, как ожидалось:
$ mvn package [INFO] Scanning for projects... ... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] ------------------------------------------------------------------------ [INFO] Unnamed - com.test:test:pom:0.0.1-SNAPSHOT ............ SUCCESS [5.819s] [INFO] Unnamed - com.test:test-common:jar:0.0.1-SNAPSHOT ..... SUCCESS [3.343s] [INFO] Unnamed - com.test:test-persistence:jar:0.0.1-SNAPSHOT SUCCESS [0.136s] [INFO] Unnamed - com.test:test-other:jar:0.0.1-SNAPSHOT ...... SUCCESS [0.079s] [INFO] Unnamed - com.test:test-web:war:0.0.1-SNAPSHOT ........ SUCCESS [1.899s] [INFO] ------------------------------------------------------------------------ [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ ...
И дает следующий результат:
$ tree . . ├── components │ ├── TestCommon │ │ ├── pom.xml │ │ ├── ... │ │ └── target │ │ ├── maven-archiver │ │ │ └── pom.properties │ │ └── test-common-0.0.1-SNAPSHOT.jar │ ├── TestOther │ │ ├── pom.xml │ │ ├── ... │ │ └── target │ │ ├── maven-archiver │ │ │ └── pom.properties │ │ └── test-other-0.0.1-SNAPSHOT.jar │ ├── TestPersistence │ │ ├── pom.xml │ │ ├── ... │ │ └── target │ │ ├── maven-archiver │ │ │ └── pom.properties │ │ └── test-persistence-0.0.1-SNAPSHOT.jar │ └── TestWeb │ ├── pom.xml │ ├── src │ │ └── main │ │ └── webapp │ │ ├── index.jsp │ │ └── WEB-INF │ │ └── web.xml │ └── target │ ├── maven-archiver │ │ └── pom.properties │ ├── test-web-0.0.1-SNAPSHOT │ │ ├── index.jsp │ │ ├── META-INF │ │ └── WEB-INF │ │ ├── classes │ │ ├── lib │ │ │ ├── test-common-0.0.1-SNAPSHOT.jar │ │ │ ├── test-other-0.0.1-SNAPSHOT.jar │ │ │ └── test-persistence-0.0.1-SNAPSHOT.jar │ │ └── web.xml │ └── test-web-0.0.1-SNAPSHOT.war └── pom.xml
Таким образом, ваша проблема должна иметь какое -то отношение к самому вашему военному проекту, его структуре или чем -то в этом роде. Пожалуйста, покажите его структуру и вывод Maven при запуске war:war
в теме.
Кстати, вот как обычно должен выглядеть пом в мультимодулях
<project>
<modelVersion>4.0.0</modelVersion>
<!--groupId>com.test</groupId--> <!-- unnecessary, you inherit it -->
<artifactId>test-web</artifactId>
<packaging>war</packaging>
<!--version>0.0.1-SNAPSHOT</version--> <!-- unnecessary, you inherit it -->
<parent>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<relativePath>../../pom.xml</relativePath>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId> <!-- DRY, use built-in properties -->
<artifactId>test-common</artifactId>
<version>${project.version}</version> <!-- DRY, use built-in properties -->
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>test-persistence</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>test-other</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
Другое дело, конфигурация плагина войны из родительского проекта является унаследован (вы можете проверить это, работая help:effective-pom
В веб-модуле) Но это имеет смысл настроить его в сам веб-модуль.