2010-10-15 56 views
1

我们在基于java的项目中拥有大约100个maven工件。这些工件分为5种不同的产品。显然其中一些是产品之间共享的。如何使用Maven和SVN实现稳定发布

问题在于,如果您在svn中为产品添加标签以获得发布。标签不稳定。因为从属共享模块是快照,并且可以由其他人更改。

让我们说:模块A依赖于模块B,它是快照版本。 我在SVN中标记模块A以获取版本或里程碑或... 稍后如果有人更改模块B,则可能会影响标记版本。下一次,如果我尝试构建标记版本,我将会破坏构建。

有什么办法可以解决这个问题吗?

我不想使用配置文件停止快照更新。

谢谢所有。

回答

2

我不标记版本,如果它具有依赖性,哪个版本是快照。

+0

我同意鲍里斯。快照是开发版本,而不是发布版本。所以如果你想有一个发布版本,那么你应该只使用发布的依赖。 – 2010-10-15 12:56:22

1

的问题是,如果你在SVN的发布标志产品,标签是不是稳定的,因为相关共享模块快照,他们可以通过别人(...)来改变有什么办法解决这个问题?

您确定了问题,答案很明显:只有在执行发布时才应使用固定版本。有两个插件,可以帮助简化整个过程:

但是底线是:在释放(和标记)时修复你的版本以备以后再现。

+0

发布插件是检查快照依赖关系的最佳方法。 – Salandur 2010-10-15 14:08:51

+0

我甚至会说:这是检查快照,将POM升级到固定版本,更改SCM信息,构建,提交,标记,碰撞到下一个快照,提交等最好的方法:) – 2010-10-15 14:15:35

0

即使我同意鲍里斯和帕斯卡尔有两种方法。

  1. 您只创建一次每个构建。因此,您有用于调查错误的代码(您需要希望该错误不在您的某个依赖项中)。但主要优点是,您只需一个二进制文件即可在所有环境中移动到生产环境。只有一个要求。该应用程序需要与环境无关。

  2. 标记包含所有快照的整个scm。当你构建代码时,你必须检查你的项目和所有的依赖关系。并以正确的顺序构建它们,以便获得完全相同的结果。如果涉及到多个SCM,这会使许多依赖关系变得单调乏味。

当然,你可以尝试混合两种方法。这样你就可以标记你自己的项目和可选的依赖项。所有其他的依赖关系保留了所需的工件(包括用于安装到本地存储库中的pom),以便您可以随时重新运行构建。

这应该只是一个临时解决方法,直到您设法只使用发布的依赖关系。

0

如果您使用maven-release-plugin发布组件,它将执行检查依赖项并在遇到快照依赖项时停止构建。