在maven2中,如何组装不同模块的各个部分以创建最终分布?

时间:2010-05-05 15:05:35

标签: maven-2 assemblies

我有四个maven项目:

  1. client api jar
  2. 网络服务大战
  3. ui jar
  4. 网络界面大战
  5. 需要打包服务war以包含客户端api jar和javadocs(以便每个版本的服务都使用捆绑的客户端jar和Web文档进行分发)。 Web界面之战将需要ui jar和所有依赖项(webstart / applet部署)。

    所以我需要一个完成所有包装的第五个项目。如何使用ant或脚本执行此操作对我来说非常清楚,但不是在maven中。

    我尝试了以下内容:

    • 将javadocs作为war包装的一部分包含在内:这需要在项目2中执行包之前执行项目1中的javadocs目标。还没有找到一种方法来跨不同项目绑定插件/目标。在project2中使用程序集插件也有同样的问题。
    • 创建第五个项目并使用程序集插件。仍然存在与以前相同的问题,问题是因为我需要从每个子项目中获得不同的部分,所以我不明白如何使用该程序集来完成。

    这在maven中难以做到,我应该放弃吗?或者我看错了,在这种情况下,我应该怎么看?

    谢谢!


    经过进一步思考,这是一个部分答案:

    • 每个项目都应该构建其所有工件。这是通过将插件配置为按照prepare-resources和package阶段运行来完成的。因此,在我的情况下,我准备所有需要生成(jar,javadocs,xsd文档,...)作为不同的工件,以便单个“包”目标执行创建所有。因此,它不是“项目2如何强迫项目1运行不同的目标”,而是“让项目1创建其所有工件作为正常生命周期的一部分。”这似乎简化了事情。

2 个答案:

答案 0 :(得分:1)

我在你的描述中看到的第一件事就是混合东西。打包客户端api(包阶段)没问题。但是现在你想创建一个包含JavaDocs的client-api.jar?这有点奇怪。为什么不创建两个工件(client-api-1.0.jar和client-api-1.0-javadoc.tar.gz)?这两个工件之间的关系是版本号。这可以通过查看Maven Assembly Plugin FAQ

来解决

你提到的第二件事是“web界面”,这也可以通过程序集插件实现(深入研究文档)。也许你可以发布你的pom,以便我们能够以更详细的方式提供帮助。

顺便说一句:你不需要蚂蚁。 Maven可以解决这个问题。

答案 1 :(得分:0)

  

需要打包服务war以包含客户端api jar和javadocs(以便每个版本的服务都使用捆绑的客户端jar和Web文档进行分发)

您需要创建客户端项目的源jar,并将此源jar包含在war模块中javadoc插件的配置中。 Aggregating Javadocs from Dependency Sources中解释了各个部分的步骤和配置。

  

Web界面之战将需要ui jar和所有依赖项(webstart / applet部署)。

对于需要下载的小程序,请在pre-package期间使用dependency:copy将其复制到您的网络应用中的“正确”位置。请参阅usage页面。对于webstart应用程序,请查看Add JNLPs apps to an existing WAR

  

所以我需要一个完成所有包装的第五个项目(...),因为我需要每个子项目中的不同部分我不明白如何使用程序集来完成。

使用专用模块绝对是创建程序集的方法,包括由其他模块甚至其他模块的程序集生成的工件。

我不是百分百肯定,但创建一个assembly of assemblies可能就是我在这里要做的。基本上,这意味着设置Maven以创建要在最终包中组装的每个模块的程序集,可能使用预定义的程序集描述符bin或修改后的版本(以捆绑jar ,或战争,javadoc等)。然后在专用模块中assemble assemblies via assembly dependencies(要解压缩它们,过滤您想要或不想要的内容,重新打包过滤后的结果)。这需要在custom assembly descriptor上花一些时间,但这绝对是可能的。但是很难更准确。