如何在maven中使用EJB和WAR构建EAR项目?

Pav*_*vel 8 ear java-ee maven

我尝试使用EJB和WAR创建EAR项目,但我遇到了一些问题.我从Archetype创建IntelliJ IDEA中的主项目:

<dependency>
    <groupId>org.codehaus.mojo.archetypes</groupId>
    <artifactId>ear-javaee6</artifactId>
    <version>1.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后我从Archetype创建了EJB模块:

<dependency>
    <groupId>org.codehaus.mojo.archetypes</groupId>
    <artifactId>ejb-javaee6</artifactId>
    <version>1.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后我从Archetype创建了第二个模块:

<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>javax.faces-war-archetype</artifactId>
    <version>2.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后我将依赖项添加到主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>
Run Code Online (Sandbox Code Playgroud)

然后我尝试构建项目 - 使用maven clean和instal.但是我有一个错误:

[错误]反应堆中的项目包含循环引用:"Vertex {label ='QCforCC-main:QCforCC-war:1.0-SNAPSHOT'}'和'Vertex {label ='QCforCC-main:QCforCC-ejb: 1.0-SNAPSHOT'}'在图中引入循环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]要查看错误的完整堆栈跟踪,请使用-e开关重新运行Maven.[ERROR]使用-X开关重新运行Maven以启用完整的调试日志记录.[错误] [错误]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectCycleException

进程以退出代码1结束

在EAR pom.xml我有:

  [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
Run Code Online (Sandbox Code Playgroud)

但如果我 在弹出窗口中更改<packaging>pom</packaging><packaging>ear</packaging>IDEA show错误:

处理POM时遇到一些问题:[警告]'build.plugins.plugin.(groupId:artifactId)'必须是唯一的,但发现重复的插件声明org.apache.maven.plugins:maven-ear-plugin @ line 41 ,第21栏[错误]'包装',价值'耳'无效.聚合器项目需要'pom'作为包装.@第12行,第16栏

sh0*_*0ru 10

我强烈建议您了解多模块构建的工作原理.Sonatype的书中有一个非常详细的章节.

要使用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>
Run Code Online (Sandbox Code Playgroud)

然后,每个子POM看起来像这样:

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>
Run Code Online (Sandbox Code Playgroud)

战模块/ 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>
Run Code Online (Sandbox Code Playgroud)

耳模块/ 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>
Run Code Online (Sandbox Code Playgroud)

  • 认为ejbModule和webModule应该在元素`<modules>`中 (3认同)