2011-04-14 30 views
4

据我所知,这是违反maven最佳做法,但也许我的情况是规则中少数例外之一 - 至少我坚持考虑替代方案:(如何从一个来源生成多个Maven构件

环境是这样的:

  • 我们的专有技术为基础的界面的遗留应用程序向外界
  • 我们要立足于原有的接口,我们生成Flash上​​使用闪存作为新的前端
  • CL评估并将它们打包在一个flash swc中供前端开发人员使用
  • 基于传统接口,我们生成了将Flash服务请求(经由blazeds)连接到我们的传统接口
  • 以使其更加困难,我们不希望/不能在每个接口上使用它自己的pom,因为我们有几十个(接口),它们只会在它们的artifactId上有所不同。相反,我使用了一个“通用”项目结构,它将为每个构建(通过jenkins)进行参数化。该项目将只有被用于一个完全自动化的环境。

首先,我试图把所有这些放在一个“简单”的项目中,这个项目一直工作到工件应该安装的地步。

我目前的做法是行家参考第13章,其中有它自己的一些缺点,激发一个多模块项目结构:

GenericProject 
| 
+-- GenerateSources from legacy interface 
| +-- pom.xml 
| 
+-- Java 
| +-- pom.xml 
| 
+-- SWC 
| +-- pom.xml 
| 
+-- pom.xml 

这种方法有一个缺点,那我有“的Java” &“引用SWC“改为”GenerateSource“的内部结构,这是丑陋但可以容忍的。
我的方式真正得到的是,我必须严格调整安装&部署插件,以获得触发整个过程的名称&版本的传统界面的工件。 我现在运行了,但看起来非常脆弱。

我认为拆分/两个简单的项目复制项目:

  • GenerateSources &的Java
  • GenerateSources & SWC

但是这只能解决交叉引用的小麻烦。

正如亚伦在他的评论中指出的,我不清楚这个问题。 一些实验在这之后得到了很多更清晰的对我说: 基本上我有两个问题要解决

  1. 安装/部署两个文物一起
  2. 名比project.artifactId

不同的工件

任何建议,使整个过程更像maven样?

在此先感谢。

+0

我认为你应该把问题分解为更简单更具体的问题。现在,我不确定你的问题是什么。你知道关于允许在构建过程中创建更多构件的JAR插件吗?您是否知道指定最终工件名称的选项? “内部结构的参考”究竟是什么意思? – 2011-04-14 09:17:43

+0

Hi Aaron,在我的单项目方法中,我已经将project.build.finalName设置为“$ {Interface-Name} - $ {Interface-Verion}”和 – Thomas 2011-04-14 10:07:22

+0

[soory,wong key]。 。 。它得到了JAR插件的支持,所以我得到了一个“Interface-Name-Interface-Version.jar”。但是,安装和部署插件坚持使用project.artifactId来实现其目的。另外,快照和发布版本之间的区别也基于project.version而不是$ {Interface-Version},因为我需要它。 – Thomas 2011-04-14 10:17:17

回答

3

一些弯路跟我来到了以下务实的解决方案的多模块方法后:

  1. 使用build-helper-plugin附加辅助神器来安装/全自动部署
  2. 两阶段构建:

    2.1通过sed生成pom.xml,其中包含解析project.artifactId & project.version

    2.2运行Maven构建

虽然理论上可以使用表达式作为project.artifactId & project.version,行家为您提供了这样的警告。 。 。有一个很好的理由: 当您尝试引用生成的工件时,nexus会为您提供“无法读取工件描述符...”错误。 我怀疑这是因为在存储库中存储的pom中,表达式是无法解析的!

2

您应该编写一个附加到generate-sources阶段的小型Maven插件。一个例子见maven-annotation-pluginmain class)。

这将在GenerateSource的输出中包含生成的源,并且只需在其他POM中包含依赖关系即可使用这些类。请注意,您应该在target/下创建这些文件,而不是在src/

至于安装/部署:这些插件从创建工件的插件获取它们的名称。所以你如何设置属性肯定有问题。在你的情况下,这是JAR plugin。该文档有一个示例如何set the name of the default artifact

相关问题