这是我对"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客户端中包含/排除的类).
我以前用过多模块项目来解决这个问题.
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)
| 归档时间: |
|
| 查看次数: |
16241 次 |
| 最近记录: |