我正在使用 maven 2.2 和 nexus 1.4.0
假设我有一个像这样的 pom 结构(有相应的版本)
parentproj, v1.0.1
- childproj1, v1.0.2
- childproj2, v1.0.7
childproj1 和 childproj2 代表应用程序的不同部分(例如 gui 和后端),我希望能够将它们的版本分开,以便我可以发布后端的新版本而不必发布新版本的 gui。
现在,要将这个结构部署到 Nexus,可以方便地转到 parentproj 并说
mvn deploy -DperformRelease=true
这会将所有工件部署到 Nexus realease 存储库。这在我第一次部署时运行良好,但第二次遇到问题:假设我对 childproj1 进行了更新,因此我们现在有以下版本:
parentproj, v1.0.1
- childproj1, v1.0.3
- childproj2, v1.0.7
在这种情况下,Nexus 不会让我从 parentproj 执行 mvn deploy,因为它在 1.0.7 版本中已经有了 childproj2 的副本。 Nexus 会说“资源,非法请求:ID='releases' 的存储库不允许更新工件。”这很好,我不想错误地更新现有版本。
但我想我想要做的是能够告诉 maven 诸如“仅部署那些具有发布存储库中尚不存在的版本的工件”之类的东西。
有没有办法做到这一点,还是我必须自己部署每个项目?
最佳答案
根据我的经验,部署所有内容更容易,并且通常对所有组件使用相同的版本号。例如,如果我的团队正在开发 1.0.7 版本,则所有子模块的版本号都是 1.0.7-SNAPSHOT,直到我们发布,即使某些模块中没有代码更改。然后,当我们部署时,我们将部署整个应用程序。我认为它比零碎的部署有几个优点。首先,如果你每个人都必须回滚到上一个稳定版本,你只需要为所有模块回滚到 1.0.6 ——你不必记住后端是 1.0.3 而 GUI 是 1.0.6。其次,它确保所有组件都相互正确编译,并作为一个逻辑组进行了测试。
抱歉,我知道这不是您问题的具体答案,但是,至少在我的团队的情况下,稍微不同的想法很有用
关于maven-2 - maven 仅部署更改的工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1860300/