下面是我对“来自Maven构建的多个工件”问题的修改:
我正在从Ant移植到Maven。我的应用程序是一个EJB服务器,它被打包为EAR,但它也公开了一个客户端JAR,供其他客户端应用程序使用。这个jar包含EJB接口、facade类和一些帮助程序。
我知道Maven的方法是每个项目都有一个工件(POM);但是,两个工件(服务器EAR和客户端JAR)都需要从相同的源树构建--服务器和客户机共享,例如EJB和'home‘接口。
我怎么在Maven做这件事?
我是否有一个包含两个POMs的项目,比如server-pu.xml和Client-pu.xml?我在想,我也可以有一个父POM (pom.xml),它可以用一个错误的陷阱来构建客户端和服务器?但是,生命周期在“包”阶段之后会出现差异,因为服务器必须通过程序集(tar/gzip),而客户端是在“包”之后完成的,可以简单地安装到存储库中。
对于处理这一问题的最佳方法有何建议/经验?
发布于 2009-12-18 11:21:45
我知道Maven的方法是每个项目都有一个工件(POM);但是,两个工件(服务器EAR和客户端JAR)都需要从相同的源树构建--服务器和客户机共享,例如EJB和'home‘接口。
“每个项目一个工件”规则有一些例外,EJB项目就是其中之一。因此,可以将maven-ejb插件配置为生成EJB ,并将配置为客户机jar,如下所示:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<configuration>
<generateClient>true</generateClient>
</configuration>
</plugin>
</plugins>
</build>
要在另一个项目中使用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>
有关更多细节,请参见生成EJB客户端、将ejb-客户机用作依赖项和ejb mojo文档(包括如何自定义包含/排除在ejb mojo客户机中的类)。
发布于 2009-12-18 08:03:19
我以前用过多模块项目来解决这个问题。
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
...
我已经将这种方法用于非常复杂的项目,这些项目可能有十几个必须一起构建的不同模块。请参见耳医生引用该ejb。
父pom.xml使用modules
标记:
<modules>
<module>jar</module>
<module>ejb</module>
<module>ear</module>
</modules>
子表的parent
标记是:
<parent>
<groupid>mygroup</group>
<artifactId>parentName</artifactId>
</parent>
https://stackoverflow.com/questions/1928996
复制相似问题