我们在基于java的项目中有大约100个maven工件。这些工件分为5种不同的产品。显然,其中一些产品是在产品之间共享的。
问题在于,如果您在svn中为某个版本标记产品。标签不稳定。因为依赖共享模块是快照,其他人可以更改它们。
假设:模块A依赖于模块B,它是快照版本。 我在SVN中标记模块A以获取版本或里程碑或... 稍后,如果有人更改模块B,它可能会影响标记版本。下次如果我尝试构建标签版本,我将有一个破坏的版本。
有什么方法可以解决这个问题吗?
我不想使用个人资料来停止快照更新。
全部谢谢。
答案 0 :(得分:2)
如果版本具有版本为快照的依赖关系,我不会标记该版本。
答案 1 :(得分:1)
问题在于,如果您在svn中为某个版本标记产品,那么该标记就不稳定,因为依赖的共享模块是快照,而其他人可以更改它们(...)有没有办法解决这个问题?
您发现问题并且答案显而易见:您应该仅在执行发布时使用固定版本。有两个插件可以帮助简化整个过程:
versions:update-parent
和versions:update-child-modules
。但最重要的是:在发布(和标记)时修复您的版本以便以后重现。
答案 2 :(得分:0)
即使我同意鲍里斯和帕斯卡尔,也有两种方法。
您只需创建一次每个构建。因此,您有调查错误的代码(您需要希望错误不在您的某个依赖项中)。但主要的优点是,您只有一个二进制文件可以在所有环境中进行生产。只有一个要求。该应用程序需要与环境无关。
标记整个scm,包括所有快照。在构建代码时,您必须检查项目和所有依赖项。并按正确的顺序构建它们,以便获得完全相同的结果。如果涉及多个SCM,这对于许多依赖项来说会很繁琐。
当然,您可以尝试混合使用这两种方法。这样您就可以标记自己的项目以及可选的某些依赖项。所有其他依赖项保留了所需的工件(包括用于安装到本地存储库的pom),以便您可以随时重新运行构建。
在您设法仅使用已发布的依赖项之前,这应该只是一种临时解决方法。
答案 3 :(得分:0)
如果您使用maven-release-plugin
发布组件,它将检查依赖项并在遇到快照依赖项时停止构建。