首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确设置具有滑动发布周期的多模块Maven项目?

如何正确设置具有滑动发布周期的多模块Maven项目?
EN

Stack Overflow用户
提问于 2009-07-31 00:59:19
回答 4查看 8.4K关注 0票数 12

我正试图找到最好的方法来设置我们的多模块Apache项目,这种方式允许不同的模块发布周期,并且在调试项目时不引入依赖问题。

我们目前有一个大致如下的设置:

  • parent-1.1-SNAPSHOT
  • module @1.2
    • bigsystem@1.4-快照
      • ,由parent@1.1-SNAPSHOT

亲生

代码语言:javascript
复制
- module b@1.3-SNAPSHOT  
    - parented by parent@1.1-SNAPSHOT
    - depends on a@1.1

代码语言:javascript
复制
- module c@1.1-SNAPSHOT  
    - parented by parent@1.1-SNAPSHOT
    - depends on a@1.2
    - depends on b@1.1

模块b和c中声明的依赖项包含编译模块所需的最低版本,这不一定是模块的当前版本,也不一定是正在部署的模块的版本。

从构建的角度来看,每个模块都可以根据需要释放/更新,但是,当尝试调试在IntelliJ IDEA下部署的应用程序(版本8和9 EAP)打开顶级pom时,IDEA决定,既然我们声明了对@1.2的依赖,那么无论何时我们进入一个类,它都应该从一个-1.2源打开它,而不是从项目中当前的@1.4源打开它。这进一步混淆了这样一个事实,即踏入b的任何一个类都需要我们使用b@1.1而不是b@1.3。

我最初的尝试是在父pom的dependencyManagement部分中声明版本号,并让子模块继承版本。这在一定程度上解决了调试思想问题,因为dependencyManagement部分可以将每个人指向当前的-SNAPSHOT版本。

不幸的是,在执行maven发行版时,由于必须在发布模块之前释放父版本的pom,这会导致问题,但是由于父版本可能引用了多个正在开发的-SNAPSHOTS,所以不能发布它,因此我们最终会将版本引用添加回模块pom以满足发行版的要求。

使用maven的dependencyManagement部分似乎只有当我们同时发布所有的包时才能很好地工作,不管它们是否发生了变化,但是由于我们只想在需要时管理每个子模块的版本,所以这个模型似乎不适合。

我怀疑我遗漏了一些东西,dependencyManagement和版本范围的组合可能满足需求,尽管我还没有看到版本范围正常工作。

有更好的办法吗?一个合适的方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-22 22:54:33

我们最终使用的最后/工作解决方案与我们最初使用的非常相似。实际项目结构保持不变:

  • parent-1.1-SNAPSHOT
  • module @1.2
  • bigsystem@1.2
  • a@1.4- parent@1.1-SNAPSHOT
  • module b@1.3的父级快照o-由父级@1.1父本获得的快照o-快照o依赖于一个@1.1
  • 模块c@1.1-父@1.1的父级快照o取决于b@1.1
  • distribution a@1.2-SNAPSHOP

的@1.2 o

然而,主要的区别是:

artifacts

  • individual父模块不包含任何版本的项目模块完全声明其项目依赖关系并指定版本范围,即[1.0.0,1.1.0)
  • all模块从.1开始的版本号周期,即1.0.1-快照,这允许初始快照满足版本范围( 1.0.0 -快照早于1.0.0最终),因此,included).
  • distribution pom (最初没有显示问题)标识了在发布时从本地maven存储库部署/包含在特定release.
  • delete中的所有项目-SNAPSHOTS的确切版本,以便仅限于拾取版本(或使用-Dmaven.repo.local=/tmp/sometemprepo进行新的本地回购)

这使得每个模块更加独立,并使我们可以自由地发布和部署我们的项目工件的新版本。

票数 2
EN

Stack Overflow用户

发布于 2009-07-31 01:17:59

我建议不要让它们成为模块,而是让它们的POMs独立。这样,您就不必担心试图满足父POM依赖关系。因为它们是独立发布的,所以它们确实应该有独立的项目对象模型。将ApacheCommons视为一个模板。

票数 4
EN

Stack Overflow用户

发布于 2009-08-21 15:34:55

我认为出现IDEA的问题是因为您正在使用源结构中的根POM来做两件通常在Maven中互斥的事情。您首先将POM用作存储无关(从构建角度来看) Maven项目的公共配置信息的位置。其次,您正在使用POM作为构建的聚合器。你可以不做另一件事来做这两件事。

就像Rob所说的,从父POM的模块部分移除模块a、b等项目。其次,将父POM移到它自己的目录中,因为它实际上是构建和发布过程中其他模块的同级。现在的方式是,它更像是父/聚合器。

您现在拥有它的方式也不适合单独标记和释放每个模块,因为您的父POM标记可能不必要地包含所有模块子文件夹。

您的文件结构如下所示:

  • pom.xml

亲本

  • pom.xml

  • 模块

  • pom.xml

  • 模块X

至于您缺少的东西,dependencyManagement并不适合管理项目内依赖项的版本。这是聚合构建中模块之间的依赖关系。它更适合于为外部依赖项声明全局版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1210187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档