锁定老帖子 主题:maven的苦恼
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-17
通常组织一个比较大型的项目代码,目录数量还有层次深度是很多且复杂的,拆分为子项目,子项目下面又有子子项目,比如现在我们的项目 project-main | --client | --server |_serv-project1 | --serv-project2 | |-serv-project2-sub1 | |-serv-project2-sub2 ... 项目结构分了四级,现在有这样个需求,就是由project-main这一层来定义整个项目的版本号,子项目都需遵循project-main定义的版本号。那么就可以有两种方式来实现:1)子(子)项目中hard code版本号,这个方式当版本升级时非常麻烦,届时替换不可避免,当pom文件数巨大的时候很头疼。2)在project-main中,声明属性变量,例如: <properties> <main.version>1.0</main.version> </properties> 这么做的话,在子(子)项目中可以通过变量${main.version}引用。方式2似乎问题很好解决了,但是,但是的是,在开发当中,尤其是配合ide开发的时候,有个问题就此浮现了。比如,想单独对serv-project2-sub2进行maven build,这种要求很合理吧,遗憾的是,这时候maven找不到变量${maven.version}了,它会去repository找一些依赖,比如serv-project2-sub2依赖xx,它会去这么找xx-${maven.version},当然了,它是找不到的,因为${maven.version}无法识别。这个问题让人非常困惑,为什么maven不去做变量替换呢?这个我没搞懂,不过,在编译maven的时候,如果你的version是赋给变量,那么maven提示这是不鼓励的,可能有它的理由,但是这点不得而知。而且最古怪的是,当无法解析变量的时候,ide+maven提示的错误是很让人摸不着头脑,比如报slf4j的错误,往slf4这条路解决把你引入死胡同,让你一通抓狂。 这个问题很纠结,目前没有找到好的方法,所以只能暂时把版本号hardcode,即方式1。有好办法再写出来。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-04-18
建议还是好好想想,怎么解决这个分级问题,serv-project2-sub2中既然引用了project-main,你不觉得你现在的树级结构可以分开吗? 分成不同的project,而serv-project2-sub2 要加 parent,而这个 parent 就是 project-main, 这也是Maven的好处之一。
|
|
返回顶楼 | |
发表时间:2012-04-18
Git在代码版本管理方面很有优势
|
|
返回顶楼 | |
发表时间:2012-04-19
看看struts源码中的组织结构,应该就可以满足。
maven最好还是命令行,ide。。。 |
|
返回顶楼 | |
发表时间:2012-04-19
lz可以看看 gradle吧
|
|
返回顶楼 | |
发表时间:2012-04-19
yizhilong28 写道 看看struts源码中的组织结构,应该就可以满足。
maven最好还是命令行,ide。。。 IDE还没命令行支持好? 你告诉我哪里不行了。。。。。。。。。。。有区别么。。。。。。。。。 |
|
返回顶楼 | |
发表时间:2012-04-19
我想你说的是mvn在编译时,把pom文件复制到.m2/repository/的时候,mvn 没有替换那些变量为真实的值。 写个ant 来替换 ${maven.version} 字符串, 在maven install 执行它,我们是这样解决的,但要添加一个properties 文件让ant使用。这样的话,要修改版本号的时候,只修改两个文件。
|
|
返回顶楼 | |
发表时间:2012-04-19
lz提出的问题 是存在的,目前我们项目中是采用两级,每次如果需要install的话 在他的上进 install ,单独的子项目也可以install 。
|
|
返回顶楼 | |
发表时间:2012-04-19
我看了一个周的mvn,打算用它做jar包管理,但配置太复杂,最后放弃了,一点没觉得简单
|
|
返回顶楼 | |
发表时间:2012-04-19
liugh1974 写道 我想你说的是mvn在编译时,把pom文件复制到.m2/repository/的时候,mvn 没有替换那些变量为真实的值。 写个ant 来替换 ${maven.version} 字符串, 在maven install 执行它,我们是这样解决的,但要添加一个properties 文件让ant使用。这样的话,要修改版本号的时候,只修改两个文件。
mvn ${maven.version} 不能自己读取properties中的文件进行替换还要结合ant确实有些麻烦. mvn不是很喜欢 |
|
返回顶楼 | |