Maven耳朵项目与ejb和战争模块

时间:2014-04-30 09:26:03

标签: java maven java-ee jboss

我在使用maven和Jboss 7的web应用程序上工作3个模块ejb ear和war所以战争将ejb作为依赖,而ejb将同时成为耳朵的模块,所以当我这样做时我在这棵树上得到了两次相同的ejb

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>

耳朵的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>

3 个答案:

答案 0 :(得分:3)

配置EAR模块的正确方法是将EJB jar依赖于&#34;提供&#34; WAR模块中的范围,并且直接在EAR下使用EJB jar,如下所示:

EAR
|
|-lib/someutil.jar
|-EJB.jar
|-my-web.war
|  |-WEB_INF/lib
|    |-coolutil.jar
|-EJB2.jar

但是my-web.war可以依赖于任何EJB.jar,但它在运行时由容器解析。因此,请将ejb依赖关系标记为&#34;提供&#34; (通过容器)在WAR的pom.xml中。

答案 1 :(得分:1)

选项:#1

Yon甚至不需要耳朵。 您可以将所有EJB作为jar放入战争中。 只需将EJB项目作为依赖项添加到War项目中。

选项:#2

如果你还想要EAR。所有EJB项目输出都应该是jar。并且Web项目输出应该是战争。最后,这些EJB jar和web war将放在一个EAR中。这是一种古老的时尚方式,为了保持简单,您可以按照我在上面的选项#1中解释的方法。

答案 2 :(得分:0)

我有这个问题,并在ejb模块pom.xml中将ejb包装标签从ejb更改为jar修复了该问题。不知道为什么!