我使用Maven 2.2的Nexus 1.4.0部署行家文物改变只
比方说,我有一个POM结构是这样的(具有相应版本)
parentproj, v1.0.1
- childproj1, v1.0.2
- childproj2, v1.0.7
childproj1和childproj2代表不同部分应用程序(例如gui和后端),我希望能够将它们的版本分开,以便我可以发布新版本的后端,而无需发布新版本的gui。
现在,部署此结构关系,因此很方便去parentproj说
MVN部署-DperformRelease =真
这将部署的所有文物,Nexus的realease库。这工作得很好,我第一次部署它,但我第二次碰到的问题:让我们说,我做了一个更新childproj1使我们现在有以下版本:
parentproj, v1.0.1
- childproj1, v1.0.3
- childproj2, v1.0.7
在这种情况下的Nexus不会让我从parentproj进行mvn部署,因为它已经在1.0.7版本中有了一个childproj2的副本。 Nexus会说“资源,非法请求:ID ='发行版'的版本库不允许更新工件。”这很好,我不想错误地更新现有版本。
但我想我想要做的是能够告诉maven类似于“仅部署那些版本尚未存在于发布存储库中的工件”。
有没有办法做到这一点,还是我必须自己部署每个项目?
谢谢你的回答约翰,我们也在调查这种方法,它很可能是最后采取的方法。我同意版本一致性带来很多价值,但是我也担心,如果您需要升级整个平台以进行任何更改,那么对于大型项目来说,构建过程可能会太臃肿和耗时。 – David 2009-12-07 14:54:28
+1,用于暗示版本上的SNAPSHOT限定符(正确且正确)的用法以解决此问题。 – whaley 2011-07-21 14:55:45
我不同意关于被一起编译和一起测试的最后声明。如果你在JAR上有固定的版本依赖关系,Maven将使用这些JAR编译你的项目,这样你仍然可以用SNAPSHOT或固定的版本依赖关系来编译所有的东西。至于测试,通过真正的单元测试,我认为应该嘲笑类依赖,特别是JAR边界。这意味着你的代码不会一起测试,除非你有针对部署的应用程序运行某种功能/集成测试,那么SNAPSHOT或固定版本不会再出现问题。 – 2011-07-22 06:43:30