如何在不使用svn:externals的情况下使用Maven模块?
我从未完全理解如何/为什么要使用Maven模块(反应堆)。
我们在产品之间以及库之间共享(作为依赖项)数十个库。如果要改用Maven模块,那么如何在SVN和工作副本中进行设置?
Maven模块真的需要成为子文件夹吗?它们也需要成为SVN存储库中的子文件夹吗?
假设我们只需要工作副本中的子文件夹,我想使用svn:externals可以使一个" util"库同时成为多个项目的模块。但是我读过关于使用svn:externals
的许多坏事,因为没有什么可以阻止我们修改外部代码,但是没有被跟踪。
有什么建议?我是否想念模块上的船?
解决方案
否...仅当将子项目集成到父项目中以创建更大的工件时,才应使用模块化项目,因此,一个示例可能是Enterprise项目,其中模块包含EJB(服务器和客户端),WAR,然后将它们合并到EAR文件中。此模块化只是为了方便起见,如果需要,可以跳过。
对于可重用的库,请将它们设为独立的项目,然后将其部署到共享存储库中。然后,必须在使用它们的项目中将它们引用为依赖项。
我想这是Subversion的问题。这会迫使我们创建用于分支的文件夹结构。其他版本控制系统允许在不可见文件夹结构的情况下进行分支,从而可以更轻松地创建maven模块。
我使用的产品有250多个模块,它们驻留在"逻辑" maven模块中,这些模块仅表示功能区域。例如" CoreService","实用程序"和"应用程序"。我们很高兴为此使用maven模块,因为我们可以确保所有CoreServices都使用特定版本的特定依赖项,并且确保所有应用程序都具有特定的AspectJ库。
不过对于解决方案:
Subversion中有一个功能,可以找到名为" relativePath"的父模块,该模块是"父"标签中的一个标签。将子项目放置在其父文件夹中的唯一原因是,可以在构建父项目时将其放置在反应堆中。子项目仍然可以单独构建(和安装)。
Subersion 1.5中还增强了对svn:externals
的支持,允许相对URL:s,在这种情况下也应派上用场。
-祝我们好运,如果我们找到解决方案,请在这里报告!