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

  显示原文与译文双语对照的内容
106 2

我试图用EJB和WAR创建EAR项目,但是我有一些问题。我从Prototype中创建了 IntelliJ IDEA的主要项目:

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

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

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

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

<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 清洁和安装来构建这个项目。但我有一个错误:

[ERROR] 反应器中的项目包含循环引用:在 graph'顶点 {label='QCforCC-main:QCforCC-war:1.0-SNAPSHOT'}': 1 中,我们可以看到错误的完整堆栈跟踪,并在运行时显示错误的完整消息。使用 switch 运行 Maven 以启用完整的调试日志记录。[ERROR] [ERROR] 有关错误和可能解决方案的详细信息,请阅读以下文章:[ERROR] [Help 1 ] http://cwiki.apache.org/confluence/display/MAVEN/ProjectCycleException

进程结束,退出代码 1

pom.xml 里我有:

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

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

在处理POMs时遇到一些问题:[WARNING]'生成。插件。插件( groupid: artifactid ) 必须唯一但找到了插件is的重复声明插件:maven-ear-plugin @ 行 41,带值'ear'的列 21 [ERROR]'打包'。聚合器项目要求'pom'作为打包。@ 行 12,列 16

时间:原作者:0个回答

122 3

我强烈建议你理解多模块构建工作的方式。Sonatype书有一个伟大的章节,详细描述。

为了使用EJB和WAR构建 EAR,你实际上需要3 个插件模块,对于 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>

然后,POMs的每个孩子都会这样:

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>

war模块/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>

ear模块/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>
原作者:
141 4
> 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>
原作者:
...