管理本地namce项目名称与Maven项目之间的冲突

时间:2015-03-30 02:27:27

标签: java maven projects-and-solutions

我发现Maven是一个非常有用的项目工作范例,可能主要是因为存储库概念。我现在已经发现了一个速度驼峰,从我的角度来看,同时在那里有一个有效的观察点,我希望你或同事能有一些解决这个难题的方法。

我认为Maven是一个项目级工具,可以让你将项目从其他项目组装成构建块(Maven artefacts)。我将给出一个愚蠢的例子,说明我希望在项目中使用Maven实现的目标。我正在引用

为了说明这个例子,考虑一切都在同一组伞中:

  • com.product

对于中等规模的应用程序,我可能有几个子项目/模块,请考虑以下示例。为了开发,我希望组织项目作为各种子项目。

 app_one
  |
  +-- pom.xml 
       |
       +-- gui
       |   |
       |   +-- pom.xml ....... <artefact>gui</artefact>
       |
       +-- datastore (DAL) ... <artefact>data</artefact>
       |   |
       |   +-- pom.xml 
       |
       +-- domainentities .... <artefact>entities</artefact>
       |   |
       :   +-- pom.xml 
       :

我正在寻找一种分离后续(结构相似)应用程序的好方法,例如: app_two 。其他人如何组织项目以避免人工制品名称冲突。 <groupId>和&#39;&#39;是唯一区分子模块的东西。 <version>号码应该是特定的,&#39; groupId:artefact`对

 app_two
  |
  +-- pom.xml 
       |
       +-- gui
       |   |
       |   +-- pom.xml ....... <artefact>gui</artefact>
       |
       +-- datastore (DAL) ... <artefact>data</artefact>
       |   |
       |   +-- pom.xml 
       |
       +-- domainentities .... <artefact>entities</artefact>
       |   |
       :   +-- pom.xml 
       :

在两个示例应用之间,app_one和app_two现在有两个:

  • com.product:GUI
  • com.product:数据
  • com.product:实体

在概念上完全不同且不同的人工制品。构建是本地项目,子项目是内部使用。

事情是避免人为的长名称,并避免为常用的项目节点(例如 GUI )创建名称;其次,当根据通用方案命名事物时,它允许我们拥有脚本和执行一些常见任务的工具。

这是标准模式的东西吗?我不想重新发明那些效果很好的车轮。

第二件事;类似的东西:

  • 数据

通常可以在不同的应用项目中重复使用。因此,交易的第二部分可能是人们如何与Maven共享项目中的子组件?我们过去所做的尝试并没有很好的锻炼。

此时看起来好像Maven非常适合构建应用程序构建块,例如log4j或jdbc-driver。在应用程序子模块级别上有什么好的做法?

可能相关的问题

我觉得这些问题也涵盖了类似的问题,只是为了提供手头问题的深度。目前还没有答案。

目前,我还要补充一点,我们想要一个Maven解决方案 - Gradle或替代方案目前已超出范围。

1 个答案:

答案 0 :(得分:1)

我试着回答你问题的“分享子产品”部分。

  • 设置您自己的内部Maven存储库(假设您还没有存储库)。我们使用似乎足够的Nexus。
  • 将公共代码从应用程序层次结构移出到具有适当名称的顶级项目(例如 ProductPojos )。为此提供合适的群组名称空间(例如 com.mycompany.product.common
  • 此项目的输出应该是一个jar文件,您可以将其发布到Maven存储库(像Jenkins这样的CI工具可以轻松实现)
  • 现在需要Pojos的每个应用程序项目都需要Maven依赖声明,通常使用编译范围,以便Pojo jar将包含在应用程序输出artefact中。

这种风格的项目结构具有强制清晰分离关注点的优势。我们经常在多个项目中包含内部库代码。

祝你好运。