Я хочу упаковать один EAR, который будет развернут на GlassFish Server Open Source Edition. Ниже представлены соответствующие сведения о файле pom.xml
.Как упаковать EAR для GlassFish с Maven?
<?xml version="1.0" encoding="UTF-8"?>
<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>
....
<packaging>ear</packaging>
<dependencies>
....
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.8</version>
<configuration>
<version>6</version>
<defaultLibBundleDir>/lib</defaultLibBundleDir>
</configuration>
</plugin>
</plugins>
</build>
</project>
Я обычно запустить mvn compile
и mvn package
в командном терминале. Полученный EAR имеет следующую структуру.
EAR/lib/*.jar
EAR/META-INF/application.xml
EAR/META-INF/META-INF.MF
EAR/META-INF/maven/...
application.xml является
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
<display-name>test-app</display-name>
<library-directory>/lib</library-directory>
</application>
Если я пытаюсь запустить asadmin deploy test-app.ear
для развертывания EAR в GlassFish я получаю эту ошибку.
remote failure: Error occurred during deployment: org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 22; Deployment descriptor file META-INF/application.xml in archive ....
Здесь я переименовать application.xml
в glassfish-application.xml
и изменить его содержание
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD
GlassFish Application Server 3.1 Java EE Application 6.0//EN"
"http://glassfish.org/dtds/glassfish-application_6_0-1.dtd">
<glassfish-application>
<unique-id>67488732739338240</unique-id>
</glassfish-application>
Если я повторно asadmin deploy test-app.ear
GlassFish распознает дескриптор развертывания, но бросает следующую ошибку, которая говорит Application [test-app] contains no valid components
.
Здесь я перемещаю все банки из EAR/lib/*.jar
в EAR/META-INF/lib/*.jar
.
Если я сейчас перезапущу asadmin deploy test-app.ear
GlassFish признает EAR действительным и разворачивает его.
Поскольку я не хочу вручную менять EAR каждый раз. Как я могу настроить Maven для 1. Выход действительного application.xml
или glassfish-application.xml
2. Скопируйте зависимости не EAR/lib/
но EAR/META-INF/lib
(если это действительно необходимо)
Спасибо заранее.