我想打包一个将部署在GlassFish Server Open Source Edition上的EAR。 以下是pom.xml
文件的相关部分。如何使用Maven打包GlassFish的EAR?
<?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
(如果确实有必要)提前
感谢。