У нас есть довольно сложный проект, который раньше собирался в Ant, но теперь мы переходим на Maven.
- Существует кувшин с сердечником и множество кувшинов фильтра, которые зависят от кувшина с сердечником.
- Эти jar-файлы собираются в
SAR
вместе с другими зависимыми jar-файлами и несколькими XML-файлами. Я назвал этоfoo-sar
ниже. - Создается еще один JAR, но этот JAR не содержит кода Java, а содержит только несколько XML-файлов приложения. Я назвал это
foo-jar
ниже. foo-jar
иfoo-sar
упакованы в EAR с файломapplication.xml
, который находится в каталогеMETA-INF
.
У меня есть проект Maven с тремя подпроектами:
foo-jar
foo-sar
foo-ear
И foo-jar
, и foo-sar
строятся просто отлично. Однако, когда строится foo-ear
, он строит ухо с файлом application.xml
, но без foo-jar
и foo-sar
в нем. Моя структура каталогов выглядит так:
parent Dir --+
|
+-- foo-ear
|
+-- foo-jar
|
+-- foo-sar
Родительский каталог pom.xml
вызывает все три проекта в правильном порядке (foo-sar
, foo-jar
и foo-ear
). И foo-jar
, и foo-sar
строятся правильно (т. е. я сопоставил результаты сборки Ant). Проект foo-ear
строит без ошибок, но не включает файлы foo-sar
и foo-jar
в корень уха.
Мне не хватает чего-то довольно простого здесь. Возможно, это дополнительный параметр или другая конфигурация.
Вот pom.xml
Уха:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.vegicorp.foo</groupId>
<artifactId>foo-parent</artifactId>
<version>1.0.0</version>
</parent>
<groupId>com.vegicorp.foo</groupId>
<artifactId>foo-app</artifactId>
<packaging>ear</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<artifactTypeMappings>
<!-- The sar is a "jboss-sar" and not just a "sar" -->
<artifactTypeMapping type="jboss-sar" mapping="sar"/>
</artifactTypeMappings>
<modules>
<jarModule>
<artifactId>foo-jar</artifactId>
<unpack>true</unpack>
</jarModule>
<sarModule>
<artifactId>foo-sar</artifactId>
<unpack>true</unpack>
</sarModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
</project>
Новые выпуски
Я понял, что одна из проблем, с которыми я сталкивался, заключалась в том, что <groupId>
было установлено на org.apache.plugins
, а не на org.apache.maven.plugins
для maven-ear-plugin
. Я понятия не имею, почему Maven раньше не обнаруживал эту ошибку и раньше не выдавал мне ошибку сборки.
Как только я установил правильную группу, я начал замечать, что application.xml
строится, хотя я указал, что <generateApplicationXml>
было ложным. Я понял, что это происходит с целью generate-application-xml
, и, по-видимому, <configuration>
по умолчанию соответствует цели ear
. Таким образом, мне пришлось указать <execution>
для цели generate-application-xml
и цели ear
отдельно.
Веселье, веселье, веселье.
Я получил ухо для генерации за исключением одной незначительной проблемы, зависимости в ухе все равно загружаются, хотя я настроил информацию о своем модуле, чтобы делать что-то немного по-другому. Вот мой pom.xml
для уха:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.vegicorp.foo</groupId>
<artifactId>foo-parent</artifactId>
<version>1.0.0</version>
</parent>
<groupId>com.vegicorp.foo</groupId>
<artifactId>foo-app</artifactId>
<packaging>ear</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10.1</version>
<executions>
<execution>
<id>skip-application-xml-generation</id>
<phase>package</phase>
<goals>
<goal>generate-application-xml</goal>
</goals>
<configuration>
<generateApplicationXml>false</generateApplicationXml>
</configuration>
</execution>
<execution>
<id>create-ear</id>
<phase>package</phase>
<goals>
<goal>ear</goal>
</goals>
<configuration>
<artifactTypeMappings>
<artifactTypeMapping type="jboss-sar" mapping="sar"/>
</artifactTypeMappings>
<modules>
<jarModule>
<groupId>${project.groupId}</groupId>
<artifactId>foo-jar</artifactId>
<unpack>true</unpack>
<uri>FooJar.jar</uri>
</jarModule>
<sarModule>
<groupId>${project.groupId}</groupId>
<artifactId>foo-sar</artifactId>
<unpack>true</unpack>
<uri>Foo.sar</uri>
</sarModule>
</modules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>foo-sar</artifactId>
<version>${project.version}</version>
<type>sar</type>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>foo-jar</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
И вот создается Ухо:
$ ls -l foo-app/target/foo-app-1.0.0
drwxr-xr-x 3 david staff 102 Jan 17 11:21 Foo.jar
drwxr-xr-x 137 david staff 4658 Jan 17 11:21 Foo.sar
drwxr-xr-x 4 david staff 136 Jan 17 11:21 META-INF
-rw-r--r-- 1 david staff 3905 Jan 17 11:21 foo-1.0.0.jar
-rw-r--r-- 1 david staff 50104182 Jan 17 11:21 foo-sar-1.0.0.sar
Как я могу настроить свое ухо, чтобы предотвратить включение foo-1.0.0.jar
и foo-sar-1.0.0.sar
в мое ухо? Разве раздел <module>
моего Ear <configuration>
не должен сопоставлять мои зависимости с моими модулями?
<dependencies>
и загруженные модули, но раздел<modules>
моегоpom.xml
игнорируется. Я не могу указать местоположение, имя, распаковать и т. д. Похоже, зависимость действует как обычная зависимость. Кажется, это не работает. - person David W.   schedule 17.01.2017<groupId>
этоorg.apache.plugins
, а неorg.apache.maven.plugins
. Вы правы насчет зависимостей, но теперь у меня есть другие проблемы, как описано выше. - person David W.   schedule 17.01.2017