我想打包一個將部署在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
(如果確實有必要)提前
感謝。