具有客户端和服务器工件的Maven(EJB)项目

Cor*_*son 9 maven-2

这是我对"Maven build中的多个工件"问题的变化:

我正从Ant搬到Maven.我的应用程序是一个打包为EAR的EJB服务器,但它也公开了一个客户端JAR供其他客户端应用程序使用.这个jar包含EJB接口,facade类和一些帮助器.

我知道Maven的方法是每个项目有一个工件(POM); 但是,两个工件(服务器EAR和客户端JAR)都需要从相同的源树构建 - 服务器和客户端共享,例如EJB和"home"接口.

我怎么在Maven这样做?

我有一个包含两个POM的项目,比如server-pom.xml和client-pom.xml吗?我以为我也可以有一个父POM(pom.xml)可以用来构建客户端和服务器一次犯规?但是,生命周期在'包'阶段之后出现分歧,因为服务器必须经过汇编(tar/gzip),而客户端在'package'之后完成,并且可以简单地安装到存储库中.

有关最佳方法的任何建议/经验吗?

Pas*_*ent 18

我知道Maven的方法是每个项目有一个工件(POM); 但是,两个工件(服务器EAR和客户端JAR)都需要从相同的源树构建 - 服务器和客户端共享,例如EJB和"home"接口.

"每个项目一个工件"规则有一些例外,EJB项目就是其中之一.因此,maven-ejb-plugin可以配置为生成EJB jar 客户端JAR,如下所示:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-ejb-plugin</artifactId>
        <configuration>
           <generateClient>true</generateClient>
        </configuration>
      </plugin>
    </plugins>
  </build>
Run Code Online (Sandbox Code Playgroud)

要在另一个项目中使用ejb客户端,只需将其添加为以下项的依赖项<type>ejb-client</type>:

<project>
  [...]
  <dependencies>
    <dependency>
      <groupId>com.example</groupId>
      <artifactId>ejb-project</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>ejb-client</type>
    </dependency>
  </dependencies>
  [...]
</project>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅生成EJB客户端,使用ejb-client作为依赖关系以及ejb mojo的文档(包括如何自定义ejb客户端中包含/排除的类).

  • @Cornel您必须为多模块项目运行`mvn install`,模块之间的依赖关系通过本地存储库解析. (3认同)
  • @Cornel嗯...什么?1.您不应该将ejb-client声明为模块2.在rector构建期间考虑ejb-client依赖关系来计算构建顺序3.类路径是使用本地存储库构建的,因此您必须`安装`你的ejb-client,就像任何其他工件一样.换句话说,我不明白你在说什么:) (2认同)

Joh*_*ett 6

我以前用过多模块项目来解决这个问题.

project/
    pom.xml  <- type=pom, lists sub modules
    ejb/
        src/main/java, etc.
        pom.xml <- type=ejb, describes ejb module, has dependency on "jar" module
    jar/ 
        src/main/java, etc.
        pom.xml <- type=jar, simple, builds jar
    ear/ 
        pom.xml <- type=ear, has reference to ejb module that it should use
    ...
Run Code Online (Sandbox Code Playgroud)

我已经将这种方法用于相当复杂的项目,这些项目可能有十几个必须一起构建的不同模块.请参阅ear docs以引用ejb.

父pom.xml使用modules标记:

<modules>
    <module>jar</module>
    <module>ejb</module>
    <module>ear</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

孩子pom.xml使用parent标签:

<parent>
    <groupid>mygroup</group>
    <artifactId>parentName</artifactId>
</parent>
Run Code Online (Sandbox Code Playgroud)