Плагин maven-ear не включает jarModule в application.xml
Я следовал примеру на сайте maven-ear-plugin, который показывает, как добавить сторонние библиотеки в сгенерированный файл application.xml. Тем не менее, он не работает, как я ожидал. Точно так же веб-модуль contextRoot игнорируется.
Согласно документации, то, что я пытаюсь сделать, должно быть вполне возможным.
Корневой контекст веб-модуля может быть настроен с использованием параметра contextRoot.
Обратите внимание, что сторонние библиотеки (например, JarModule) не включены в сгенерированный application.xml (в запись java должен быть включен только ejb-клиент). Однако зависимость jar может быть включена в сгенерированный файл application.xml, указав флаг includeInApplicationXml.
У меня есть следующий вывод, когда он выполняет сборку в моем application.xml.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
"http://java.sun.com/dtd/application_1_3.dtd">
<application>
<display-name>MyApp.EAR</display-name>
<module>
<ejb>MyApp.jar</ejb>
</module>
<module>
<web>
<web-uri>MyApp.war</web-uri>
<context-root>/MyApp.Web</context-root>
</web>
</module>
</application>
Из следующего maven configuraton (pom.xml).
...
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah</groupId>
<artifactId>MyApp.EAR</artifactId>
<version>1.0</version>
<packaging>ear</packaging>
<build>
<plugins>
<plugin>
<groupId>maven-ear-plugin</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.7</version>
<configuration>
<applicationName>MyApp</applicationName>
<modules>
<ejbModule>
<groupId>com.blah</groupId>
<artifactId>MyApp.EJB</artifactId>
</ejbModule>
<webModule>
<groupId>com.blah</groupId>
<artifactId>MyApp.Web</artifactId>
<contextRoot>MyApp</contextRoot>
</webModule>
<jarModule>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<includeLibInApplicationXml>true</includeLibInApplicationXml>
</jarModule>
</modules>
<archive>
<manifestEntries>
<WebLogic-Application-Version>${weblogic.version}</WebLogic-Application-Version>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- web and ejb modules -->
<dependency>
<groupId>com.blah</groupId>
<artifactId>MyApp.EJB</artifactId>
<version>1.0</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>com.blah</groupId>
<artifactId>MyApp.Web</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
</dependencies>
...
Сразу видно, что application.xml генерируется не так, как я планировал.
- Предоставленный contextRoot неверен в application.xml, вместо этого вместо указанного MyApp выводится имя по умолчанию MyApp.Web.
- Указанный jarModule org.slf4j полностью отсутствует в application.xml.
Что я делаю неправильно?
Отладка из Maven показана ниже.
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.apache.maven.plugins:maven-ear-plugin:2.4.2:generate-application-xml (default-generate-application-xml)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<description>${project.description}</description>
<displayName>${project.artifactId}</displayName>
<encoding default-value="UTF-8"/>
<generatedDescriptorLocation>${project.build.directory}</generatedDescriptorLocation>
<includeLibInApplicationXml default-value="false"/>
<project>${project}</project>
<version default-value="1.3"/>
<workDirectory>${project.build.directory}/${project.build.finalName}</workDirectory>
</configuration>
PS Я пытался создать тег maven-ear-plugin, но он не позволил мне, так как я недостаточно авторитетен! Если бы кто-то мог создать это, я был бы благодарен.
2 ответа
Я разобрался, как обычно, это была ошибка пользователя.
Как ни странно, он создавал EAR-файл довольно корректно, хотя мой плагин не был настроен должным образом.
Я заменил...
<groupId>maven-ear-plugin</groupId>
<artifactId>maven-ear-plugin</artifactId>
с...
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
Потом поменял...
<includeLibInApplicationXml>true</includeLibInApplicationXml>
чтобы...
<includeInApplicationXml>true</includeInApplicationXml>
Затем вдруг он сделал то, что я намеревался сделать в первую очередь.
Мой последний файл pom.xml выглядел так, как я решил, что хочу, чтобы все банки были включены автоматически.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah</groupId>
<artifactId>MyApp.EAR</artifactId>
<version>1.0</version>
<packaging>ear</packaging>
<properties>
<weblogic.version>10.3</weblogic.version>
<weblogic.version.minor>${weblogic.version}.4</weblogic.version.minor>
<weblogic.host>***</weblogic.host>
<weblogic.port>***</weblogic.port>
<weblogic.username>***</weblogic.username>
<weblogic.password>***</weblogic.password>
</properties>
<build>
<finalName>MyApp</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.7</version>
<configuration>
<applicationName>MyApp</applicationName>
<includeLibInApplicationXml>true</includeLibInApplicationXml>
<modules>
<ejbModule>
<groupId>com.blah</groupId>
<artifactId>MyApp.EJB</artifactId>
</ejbModule>
<webModule>
<groupId>com.blah</groupId>
<artifactId>MyApp.Web</artifactId>
<contextRoot>MyApp</contextRoot>
</webModule>
</modules>
<archive>
<manifestEntries>
<WebLogic-Application-Version>${weblogic.version}</WebLogic-Application-Version>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>com.oracle.weblogic</groupId>
<artifactId>weblogic-maven-plugin</artifactId>
<version>10.3.4</version>
<configuration>
<adminurl>t3://${weblogic.host}:${weblogic.port}</adminurl>
<user>${weblogic.username}</user>
<password>${weblogic.password}</password>
<upload>true</upload>
<action>deploy</action>
<remote>false</remote>
<verbose>true</verbose>
<source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source>
<name>${project.build.finalName}</name>
</configuration>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<versionRange>[2.7,)</versionRange>
<goals>
<goal>generate-application-xml</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>com.blah</groupId>
<artifactId>MyApp.EJB</artifactId>
<version>1.0</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>com.blah</groupId>
<artifactId>MyApp.Web</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
</dependencies>
</project>
Большое спасибо, уже несколько часов ищу решение этой проблемы.:) Буду рекламировать мою пому на случай, если это поможет кому-то еще.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>appletree.be-multi</artifactId>
<groupId>be.appletree</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>appletree.be-ear</artifactId>
<packaging>ear</packaging>
<dependencies>
<dependency>
<groupId>be.appletree</groupId>
<artifactId>appletree.be-domain</artifactId>
<version>1.0-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>be.appletree</groupId>
<artifactId>appletree.be-ejb</artifactId>
<version>1.0-SNAPSHOT</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>be.appletree</groupId>
<artifactId>appletree.be-web</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.8</version>
<configuration>
<modules>
<jarModule>
<groupId>be.appletree</groupId>
<artifactId>appletree.be-domain</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
<webModule>
<groupId>be.appletree</groupId>
<artifactId>appletree.be-web</artifactId>
</webModule>
<ejbModule>
<groupId>be.appletree</groupId>
<artifactId>appletree.be-ejb</artifactId>
</ejbModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
</project>