6

我有一个像这样的Maven项目基础设施:

/trunk/all/pom.xml
/trunk/all/libs/lib1/pom.xml
               /lib2/pom.xml
               ...
/trunk/all/projects/p1/pom.xml
                   /p2/pom.xml
                   ...

你看,我有很多库和很多使用这些库的项目。

所有这些都合并到一个多模块项目中,因为我喜欢

  • 将顶级项目导入 Eclipse 并立即使用我的所有库和项目
  • mvn test在我完成一些全局重构之后,只做一次编译和测试我的所有代码。

目前,我所有的模块都是 version 1.0-SNAPSHOT

现在我想将项目p2和所有库p2使用(例如lib1lib2)发布到版本1.0。之后,我对 . 进行了一些代码修改lib1,但没有lib2.

我希望下一个版本p2是 version 1.1,使用lib1in version 1.1(自上次发布以来已修改),但lib2仍在 version 中1.0(因为未修改)。

更一般地说:如果我进行发布,我想增加正在发布的项目的次要数量以及自上次发布以来所有更改的库的数量。

问题

我是否必须自己处理所有模块版本,或者是否有一个插件能够为我完成所需的工作?

4

2 回答 2

8

我是否必须自己处理所有模块版本,或者是否有一个插件能够为我完成所需的工作?

好吧,如果您不想让各种工件(项目、库)的版本与定义的版本保持同步all/pom.xml(即只是通过整个层次结构继承它),恐怕您将不得不开始手动管理它们。我只是不确定为什么lib2即使您没有对其进行任何更改,您也不会更改 say 的版本。使用您当前的 svn 存储库结构,所有工件都以某种方式具有相同的发布生命周期(当您标记主干时,您将标记其中的所有内容)。

现在,如果p1p2(为了简单起见,我将忽略库)有一个独立的发布周期,我会推荐一个多个“主干/标签/分支”结构,如该线程中所述:

myrepo
  + .links (2)
    + trunks
      + pom.xml
  + parent-pom (1)
    + trunk
      + pom.xml
  + project-A
    + trunk
      + pom.xml
  + project-B
    + trunk
      + pom.xml 

1)项目的父POM有自己的发布周期。每个组件的 POM 都将其用作父组件(简单地用groupIdand artifactId、 no引用relativePath)。对于发布,您必须先发布父 POM。

2) 这是一种便于检查项目特定分支(通常是主干)的结构。颠覆用户检查 myrepo/.links/trunk 以获取所有源的主要版本。诀窍是,该目录包含 svn:externals指向该项目的所有其他模块(parent-pom、project-A、project-B)的主干的外部链接(即带有属性)。此目录中的 pom.xml 从未发布,它仅包含三个模块的模块部分,以启用多模块构建。使用此构造,您可以轻松设置分支,例如:

myrepo
  + .links
    + branch-2.x
      + pom.xml

我已经多次使用过这个设置(我已经在 SO 上写过,请参阅下面的相关问题),效果很好。实际上,包括 Maven 在内的许多项目都在使用这种方法,这并非空穴来风。

这不会解决您的“自动”版本处理(我不知道有任何解决方案),但至少,这种结构与Maven 发布插件很好地配合,并支持您的独立发布周期要求。

也可以看看

相关问题

于 2010-10-27T23:44:27.907 回答
1

你好!也许我遗漏了一些东西,但是如果您的库/模块开始觉得需要拥有自己的版本号,这是否表明它们正在成长并开始自己的生活 - 即成为独立的项目在他们自己的权利?

这意味着将它们视为这样可能是有意义的 - 将它们视为单独的项目,推送到一些 mvn 存储库,然后作为正常依赖项添加到核心项目中?

抱歉,如果我以某种方式错过了重点,但我自己也遇到了多模块项目“问题”……也许这个问题根本不是问题?

于 2011-01-21T08:19:31.183 回答