使用Mercurial和Eclipse的项目特征子模块的最佳实践?

时间:2010-05-17 19:04:40

标签: eclipse ant mercurial multi-module

我为几个不同的客户提供了几个ANT项目;我的项目目录结构如下:

L___standard_workspace
    L___.hg
    L___validation_commons-sub-proj  <- JS Library/Module
    |   L___java
    |   |   L___jar
    |   L___old_stuff
    |   L___src
    |   |   L___css
    |   |   L___js
    |   |       L___validation_commons
    |   L___src-test
    |       L___js
    L___v_file_attachment-sub-proj  <- JS Library/Module
    |   L___java
    |   |   L___jar
    |   L___src
    |   |   L___css
    |   |   L___js
    |   L___src-test
    |       L___js
    L___z_business_logic-sub-proj  <- JS Library/Module
    |   L___java
    |   |   L___jar
    |   L___src
    |       L___css
    |       L___js
    L____master-proj               <- Master web-deployment module where js libraries are compiled to.
        L___docs
        L___java
        |   L___jar
        |   L___src
        |       L___AntTasks
        |           L___build
        |           |   L___classes
        |           |       L___com
        |           |           L___company
        |           L___dist
        |           L___nbproject
        |           |   L___private
        |           L___src
        |               L___com
        |                   L___company
        L___remoteConfig
        L___src
        |   L___css
        |   |   L___blueprint
        |   |   |   L___plugins
        |   |   |   |   L___buttons
        |   |   |   |   |   L___icons
        |   |   |   |   L___fancy-type
        |   |   |   |   L___link-icons
        |   |   |   |   |   L___icons
        |   |   |   |   L___rtl
        |   |   |   L___src
        |   |   L___jsmvc
        |   L___img
        |   |   L___background-shadows
        |   |   L___banners
        |   |   L___menu
        |   L___js
        |   |   L___approve
        |   |   L___cart
        |   |   L___confirm
        |   |   L___history
        |   |   L___jsmvc
        |   |   L___mixed
        |   |   L___office
        |   L___stylesheets
        |   L___swf
        L___src-standard

在工作副本中,模块将子项目编译为单个Javascript文件,该文件放在主项目的Javascript目录中。

例如,目录:

  • validation_commons-sub-proj
  • v_file_attachment-sub-proj
  • z_business_logic-sub-proj

...所有这些都被合并并缩小(有点像编译)到_master-proj/js目录中的不同Javascript文件名;在最后一步中,_master-proj被编译为部署到服务器。

现在关于我想用hg设置它的方式,我希望能够做的是将主项目及其子项目从他们自己的基线存储库克隆到客户端工作副本,以便可以将模块(使用hg)添加到特定客户的工作副本。

此外,当我对一个客户的工作副本中的/修复错误进行一些更改时,我希望能够选择将更改/错误修复推送回主项目/子项目的基线存储库,为了最终将更改/修复提取到其他客户的工作副本中,这些副本可能包含需要修复的相同错误。

通过这种方式,我将能够在不同的客户端上使用相同的错误修复。

然而......我不确定使用hg和Eclipse执行此操作的最佳方法。

read here您可以使用hg的Convert Extension使用--filemap选项将子目录拆分为单独的项目。

但是,我仍然有点困惑,如果使用Convert Extension是否更好,或者如果将每个模块放在他们自己的存储库中并将其检入更好每个客户的单个工作区。

1 个答案:

答案 0 :(得分:3)

是的,subrepos看起来像你正在寻找的,但我想也许这是错误问题的正确答案,我强烈怀疑你会遇到类似的issues that occur when using svn:externals < / p>

相反,我建议您将合并和缩小的JS文件“发布”到artefact repository并使用依赖管理器(例如Ivy)将特定版本的工件拖入主项目中。这种方法可以让您更好地控制主项目使用的子项目版本。

如果您需要为特定客户的子项目修复错误,您可以在该子项目的主线上进行修复,发布新版本(理想情况下通过automated build pipeline)和更新他们的主项目以使用新版本。哦,你想在发布前用他们的主项目测试新版本吗?在这种情况下,在推送修复程序之前,在本地组合并缩小子项目,将其发布到local repository并让客户端的主项目选择该版本进行测试。