在多项目构建中似乎有几种方法来构建父pom,我想知道是否有人对每种方式的优点/缺点有任何想法.
拥有父pom的最简单方法是将它放在项目的根目录中,即
myproject/
myproject-core/
myproject-api/
myproject-app/
pom.xml
Run Code Online (Sandbox Code Playgroud)
其中pom.xml既是父项目又是-core -api和-app模块
下一个方法是将父项分离到它自己的子目录中,如中所示
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
Run Code Online (Sandbox Code Playgroud)
父pom仍然包含模块,但它们是相对的,例如../myproject-core
最后,有一个选项,模块定义和父项分开,如
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
pom.xml
Run Code Online (Sandbox Code Playgroud)
父pom包含任何"共享"配置(dependencyManagement,属性等),myproject/pom.xml包含模块列表.
目的是可扩展到大规模构建,因此应该可以扩展到大量项目和工件.
一些奖金问题:
编辑:每个子项目都有自己的pom.xml,我把它留了下来以保持简洁.
我有一些相关的遗留项目是一团糟,我想将它们作为一个在subversion上共享的多模块项目(第一个多模块项目,我们总是把它们分开).有几个关键部分1)webservice,2)各种swing客户端,3)模型(w /持久性来自hibernate),4)核心JSE任务.
我一直在努力使用Eclipse(Helios),Maven(2.2.1),m2eclipse(0.10.0)和Subversion(1.6)为我们的团队正确设置它几天.我一直在捣乱自己,或者随机出现错误,迫使我回溯.我希望有人可以帮我解决一些最好的做法.
以下是一些问题:
m2eclipse需要一个"平面"的eclipse项目结构.这是否意味着我应该为每个模块创建一个subversion存储库?如果我做一个存储库并尝试从父项目签入,我很难在嵌套项目目标(和其他)目录上设置svn:ignore属性.
如果我为每个存储库执行一个模块,我似乎可以在ok中检查它们.那么问题是通过subclipse检查的最佳方法是什么?有最好的订单吗?父母或子女项目首先?我是否需要签出父项目并修改子项目的结帐路径以嵌套在文件目录中,以便我从父项目中"清理安装"?
或者,我应该放弃subclipse和m2eclipse并结帐并从命令行运行我的maven目标.
或者,我应该只使用SCM与Maven集成.或者,甚至可能只是尝试获得多模块项目设置.
其他人做什么?有没有人有一些文件(我错过了)或一些链接(谷歌不推荐)?
提前感谢您的反馈.
与'普通'svn目录结构相反,我使用以下结构:
trunk/
project1/
project2/
project3/
...
branches/
project1-branch/
project1/
project2/
...
project2-branch/
project1/
project2/
...
tags/
project1/
V1
V2
...
如您所见,我没有为每个项目单独的三元组(主干/分支/标签).
对于开发,我会检查包含我需要的所有项目的主干(有时是稀疏结账)(项目之间存在依赖关系,而某些项目只是库).
我在这里看到的好处是:
更新和签入很简单,因为我有一个所有项目的公共根目录(主干).一个简单svn update或svn commit全部.
创建标签或分支很简单,因为它只是我必须拥有的主干svn copy.(分支和标签实际上包含的项目比需要的多,但是它svn copy很便宜,如果需要,我仍然可以在分支或标签上进行稀疏检查.)
将资源从一个项目移动到另一个项目很容易,因为它们都存在于同一个存储库中.
当我正在完全检查主干时,全局重构(例如更改常用类的包)很容易,因为我可以确定我不会错过任何项目.
合并很容易,因为即使从一个项目到另一个项目的重构移动,我总是可以立即合并整个分支.
我打算迁移到maven并将所有项目从trunk转移到maven项目.我想从maven依赖管理和可用的插件中受益(现在我正在使用巨大的自定义ant文件).
现在我的问题是:
我是否必须更改svn目录结构以为每个项目提供自己的三元组(主干/分支/标签)?我猜答案是'是'.
如果我改变结构,我会松开上面提到的哪些好处(我的意思是用maven做什么会更复杂)?
用maven做同样的方法是什么?