2015-10-07 165 views
6

我試圖用EJB和WAR創建EAR項目,但我遇到了一些問題。 我從原型創造的IntelliJ IDEA的主要項目:如何在maven中使用EJB和WAR構建EAR項目?

<dependency> 
    <groupId>org.codehaus.mojo.archetypes</groupId> 
    <artifactId>ear-javaee6</artifactId> 
    <version>1.5</version> 
</dependency> 

然後,我創建了從原型EJB模塊:

<dependency> 
    <groupId>org.codehaus.mojo.archetypes</groupId> 
    <artifactId>ejb-javaee6</artifactId> 
    <version>1.5</version> 
</dependency> 

然後我創建了從原型第二模塊:

<dependency> 
    <groupId>javax.faces</groupId> 
    <artifactId>javax.faces-war-archetype</artifactId> 
    <version>2.2</version> 
</dependency> 

然後我添加了對主要pom.xml的依賴關係:

<!-- Define the versions of your ear components here --> 
<dependencies> 
    <dependency> 
     <groupId>QCforCC-main</groupId> 
     <artifactId>QCforCC-ejb</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>ejb</type> 
    </dependency> 
    <dependency> 
     <groupId>QCforCC-main</groupId> 
     <artifactId>QCforCC-war</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
</dependencies> 

然後我試圖建立項目 - 使用maven clean和instal。 但是我有一個錯誤:

[ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='QCforCC-main:QCforCC-war:1.0-SNAPSHOT'}' and 'Vertex{label='QCforCC-main:QCforCC-ejb:1.0-SNAPSHOT'}' introduces to cycle in the graph QCforCC-main:QCforCC-ejb:1.0-SNAPSHOT --> QCforCC-main:QCforCC-war:1.0-SNAPSHOT --> QCforCC-main:QCforCC-ejb:1.0-SNAPSHOT -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectCycleException

Process finished with exit code 1

及入耳式pom.xml我:

<modules> 
    <module>QCforCC-ejb</module> 
    <module>QCforCC-war</module> 
</modules> 
<packaging>pom</packaging> 

但是,如果我改變<packaging>pom</packaging><packaging>ear</packaging> IDEA顯示錯誤彈出:

Some problems were encountered while processing the POMs: [WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-ear-plugin @ line 41, column 21 [ERROR] 'packaging' with value 'ear' is invalid. Aggregator projects require 'pom' as packaging. @ line 12, column 16

回答

8

我高度建議您理解多模塊構建如何工作。 Sonatype的書很好地詳細描述了chapter。要使用EJB和WAR構建EAR,對於EJB,WAR和EAR,實際上需要三個模塊。母公司POM只是將所有東西放在一起,並且具有POM的包裝類型。

因此父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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.sonatype.mavenbook.multi</groupId> 
    <artifactId>simple-parent</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0</version> 
    <name>Multi Chapter Simple Parent Project</name> 

    <modules> 
     <module>ejb-module</module> 
     <module>war-module</module> 
     <module>ear-module</module> 
    </modules> 
</project> 

然後,每個子多金屬氧酸鹽是這樣的:

EJB模塊/ 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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>org.sonatype.mavenbook.multi</groupId> 
     <artifactId>simple-parent</artifactId> 
     <version>1.0</version> 
    </parent> 
    <artifactId>ejb-module</artifactId> 
    <packaging>ejb</packaging> 
</project> 

戰模塊/ 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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>org.sonatype.mavenbook.multi</groupId> 
     <artifactId>simple-parent</artifactId> 
     <version>1.0</version> 
    </parent> 

    <artifactId>war-module</artifactId> 
    <packaging>war</packaging> 
    <name>simple-webapp Maven Webapp</name> 
    <dependencies> 
     <dependency> 
      <groupId>org.sonatype.mavenbook.multi</groupId> 
      <artifactId>ejb-module</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 
</project> 

耳模塊/ 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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>org.sonatype.mavenbook.multi</groupId> 
     <artifactId>simple-parent</artifactId> 
     <version>1.0</version> 
    </parent> 

    <artifactId>ear-module</artifactId> 
    <packaging>ear</packaging> 
    <name>EAR module</name> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-ear-plugin</artifactId> 
       <version>2.10.1</version> 
       <configuration> 
        <ejbModule> 
         <groupId>org.sonatype.mavenbook.multi</groupId> 
         <artifactId>ejb-module</artifactId> 
         <bundleFilename>ejb-module.jar</bundleFilename> 
        </ejbModule> 
        <webModule> 
         <groupId>org.sonatype.mavenbook.multi</groupId> 
         <artifactId>war-module</artifactId> 
         <contextRoot>/foo</contextRoot> 
        </webModule> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+0

是什麼? – Pavel

+1

請參閱maven-ear-plugin的文檔:https://maven.apache.org/plugins/maven-ear-plugin/modules.html – sh0rug0ru

+0

工件QCforCC-ear:ejb爆炸:java.io.IOException: com.sun.enterprise.admin.remote.RemoteFailureException:未識別C:\ app \ QCforCC-mainApp \ QCforCC-ear \ target \ QCforCC-ear-1.0-SNAPSHOT的存檔類型 – Pavel

0
> 1. parent QCforCC-parent : 

    <artifactId>QCforCC-parent</artifactId> 
    <packaging>pom</packaging> 
    ... 
    ... 
    <modules> 
     <module>QCforCC-ear</module> 
     <module>QCforCC-ejb</module> 
     <module>QCforCC-war</module> 
    </modules> 

> 2. QCforCC-ear : 

<artifactId>QCforCC-ear</artifactId> 
<packaging>ear</packaging> 
... 
... 
<plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-ear-plugin</artifactId> 
     <configuration> 
      <version>5</version> 
      <displayName>XXXXXXXX</displayName> 
      <modules> 
      <webModule>    
       <moduleId>WebModule_XXX</moduleId> 
       <groupId>${project.groupId}</groupId> 
       <artifactId>>QCforCC-war</artifactId> 
       <contextRoot>XXXXXXXX</contextRoot> 
      </webModule> 
       <jarModule> 
          <groupId>${project.groupId}</groupId> 
          <artifactId>QCforCC-ejb</artifactId> 
       </jarModule>    
      </modules> 
     </configuration> 
     </plugin> 
    </plugins>