Java 带有ejb和war模块的Maven ear项目
我正在使用maven和Jboss 7开发一个web应用程序,它包含3个模块EJBEAR和war,因此war将把ejb作为依赖项,ejb将同时作为ear的一个模块,所以当我这样做时,我得到的相同ejb是这棵树的两倍Java 带有ejb和war模块的Maven ear项目,java,maven,jakarta-ee,jboss,Java,Maven,Jakarta Ee,Jboss,我正在使用maven和Jboss 7开发一个web应用程序,它包含3个模块EJBEAR和war,因此war将把ejb作为依赖项,ejb将同时作为ear的一个模块,所以当我这样做时,我得到的相同ejb是这棵树的两倍 ear ...Mywar ........Myejb ...Myejb 这个结构正确吗?还是我应该换一个 用于战争的pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:
ear
...Mywar
........Myejb
...Myejb
这个结构正确吗?还是我应该换一个
用于战争的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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tn.war.ep</groupId>
<artifactId>businessModule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
.....
<dependency>
<groupId>tn.linckia.epgp</groupId>
<artifactId>ejbModule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>ejb</type>
</dependency>
</dependencies>
</project>
4.0.0
tn.war.ep
业务模块
0.0.1-快照
战争
.....
tn.linckia.epgp
EJB模块
0.0.1-快照
ejb
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tn.war.ep</groupId>
<artifactId>earModule</artifactId>
<version>0.0.1</version>
<packaging>ear</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.6</version>
<configuration>
<modules>
<webModule>
<groupId>tn.war.ep</groupId>
<artifactId>businessModule</artifactId>
<bundleFileName>businessModule.war</bundleFileName>
<contextRoot>/businessModule</contextRoot>
</webModule>
<ejbModule>
<groupId>tn.war.ep</groupId>
<artifactId>ejbModule</artifactId>
<bundleFileName>ejbModule.jar</bundleFileName>
</ejbModule>
</modules>
<displayName>Security</displayName>
</configuration>
</plugin>
</plugins>
<finalName>AuthModule</finalName>
</build>
<dependencies>
<dependency>
<groupId>tn.war.ep</groupId>
<artifactId>businessModule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>tn.war.ep</groupId>
<artifactId>ejbModule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>ejb</type>
</dependency>
</dependencies>
</project>
4.0.0
tn.war.ep
耳模块
0.0.1
耳朵
maven资源插件
2.4
UTF-8
org.apache.maven.plugins
maven编译器插件
3.1
org.apache.maven.plugins
maven耳朵插件
2.6
tn.war.ep
业务模块
businessModule.war
/业务模块
tn.war.ep
EJB模块
ejbModule.jar
安全
AuthModule
tn.war.ep
业务模块
0.0.1-快照
战争
tn.war.ep
EJB模块
0.0.1-快照
ejb
选项:#1
你甚至不需要耳朵。
您可以将所有EJB作为JAR放在战争中。
只需将EJB项目作为依赖项添加到War项目中
选项:#2
如果你还想听的话。所有EJB项目输出都应该是JAR。web项目输出应该是war。最后,这些EJB JAR和web war将放在一个耳朵中。这是一种老式的方式,为了保持简单,您可以遵循我在选项1中解释的方法。我遇到了这个问题,在ejb模块pom.xml中将ejb打包标记从ejb更改为jar解决了这个问题。不知道为什么 配置EAR模块的正确方法是让EJB jar依赖项在WAR模块中具有“提供的”作用域,并让EJB jar直接位于EAR之下,如下所示:
EAR
|
|-lib/someutil.jar
|-EJB.jar
|-my-web.war
| |-WEB_INF/lib
| |-coolutil.jar
|-EJB2.jar
但是my-web.war可以依赖于任何EJB.jar,但它在运行时由容器解决。因此,在WAR的pom.xml中将ejb依赖项标记为“提供”(由容器提供)。我被要求在一个ear中交付所有模块,其中包含ejb模块和WAR模块。。。但我的问题是:在树上使用ejb两次是否正确?很好。不,你不应该吃两次。删除WAR项目中的EJB依赖项。那你就不会在战争中拥有它了。如果您在发布pom.xml后仍然有问题,我为ear和WART添加了pom.xml。我将如何在war中获得ejb依赖项的问题,因为我需要将ejb中的实体实例化到war中,它甚至不会编译,因为ejb打包与maven ear插件中的jar打包完全不同。