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

managing local namce project name clashes with and between Maven projects

我发现 Maven 是项目工作的一个非常有用的范例,这可能主要是因为存储库的概念。我目前发现了一个减速带,在很大程度上从我的角度来看,同时这里有一个有效的观察,我希望你或同事能对这个困境有一些解决方案。

我的看法是,Maven 是一个项目级工具,可以让您 assemble 您的项目从其他项目作为构建块(Maven 工件)。我将给出一个简单的示例,说明我希望在项目中使用 Maven 实现的目标。我在引用

为了说明示例,请考虑所有内容都在同一组伞中:

对于中等大小的应用程序,我可能有几个 sub-projects/modules,请考虑以下示例。对于开发,我想将项目组织为各种子项目。

 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> 和 '' 是唯一区分子模块的东西。 <version> 数字应该特定于“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 之间,现在有两个:

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

事情是避免人为的长名称,避免需要为常用项目节点发明名称(例如 GUI),其次,当事物根据通用方案命名时,它让我们有脚本和工具来执行一些常见的任务。

这是标准模式的东西吗?我不想重新发明已经运行良好的轮子。

第二件事;类似于:

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

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

可能相关的问题:

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

目前,我要补充一点,我们需要一个 Maven 解决方案 - Gradle 或者替代方案现在超出范围。

我会尽量回答你问题的 "share sub-products" 部分。

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

这种项目结构风格的优点是可以完全分离关注点。我们定期在多个项目中包含内部库代码。

祝你好运。