2013-11-15 5 views
1

Я хочу упаковать один 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 (если это действительно необходимо)

Спасибо заранее.

ответ

2

Как настроить Maven для

  1. Выход действительный application.xml или GlassFish-application.xml
  2. Копирование зависимостей не EAR/Lib/но EAR/META-INF/Lib (если это действительно необходимо)
  • application.xml может быть автогенерированным maven-ejb-plugin, и для простого теста я бы оставил его до плагина
  • для копирование зависимостей - это зависит от того, что вы упаковываете в ухо (может быть война/банку/...), но в вообще, это хорошая идея, чтобы позволить maven сделать это. Для этой цели вы пропустите в своих разделах pom.xml, которые будут ссылаться на модули (war/jar/...), которые вы хотите включить туда
  • Кроме того, я не вижу причины для нестандартной папки libs указанная в: <library-directory>

Так что я бы выбрал конфигурацию, например, образец here.

Чтобы включить соответствующие разделы в ответ:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-ear-plugin</artifactId> 
      <version>2.8</version> 
      <configuration> 
       <version>6</version> 
       <modules> 
        <webModule> 
         <groupId>com.mycompany</groupId> 
         <artifactId>myWar</artifactId> 
         <bundleFileName>myWarNameInTheEar.war</bundleFileName> 
         <contextRoot>/myWarConext</contextRoot> 
        </webModule> 
        <ejbModule> 
         <groupId>com.mycompany</groupId> 
         <artifactId>myEjb</artifactId> 
         <bundleFileName>myEjbNameInTheEar.jar</bundleFileName> 
        </ejbModule> 
       </modules> 
       <displayName>My Ear Name displayed in the App Server</displayName> 
       <generateApplicationXml>true</generateApplicationXml> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<!-- Define the versions of your ear components here --> 
<dependencies> 
    <dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myWar</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
    <dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myEjb</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>ejb</type> 
    </dependency> 
</dependencies> 

Пожалуйста, обратите внимание, что вам нужно указать зависимости - для модулей, но включают в модулях секции, а также, чтобы они упакованы.

Не стесняйтесь спрашивать о других проблемах.

Смежные вопросы