论坛首页 Java企业应用论坛

maven的苦恼

浏览 9958 次
锁定老帖子 主题:maven的苦恼
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-17  
maven对于java项目的开发代码组织无疑是很power的,简单清晰的pom配置,不用像ant那样关注复杂细节,灵活的组合编译打包等等,带来很多的便利。但也有让人很窝火的时候,尤其是你对它不是很了解情况下,非常容易出问题。今天就遇到一个版本变量问题。

通常组织一个比较大型的项目代码,目录数量还有层次深度是很多且复杂的,拆分为子项目,子项目下面又有子子项目,比如现在我们的项目

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。有好办法再写出来。
   发表时间:2012-04-18  
建议还是好好想想,怎么解决这个分级问题,serv-project2-sub2中既然引用了project-main,你不觉得你现在的树级结构可以分开吗? 分成不同的project,而serv-project2-sub2 要加 parent,而这个 parent 就是 project-main, 这也是Maven的好处之一。
0 请登录后投票
   发表时间:2012-04-18  
Git在代码版本管理方面很有优势
0 请登录后投票
   发表时间:2012-04-19  
看看struts源码中的组织结构,应该就可以满足。
maven最好还是命令行,ide。。。
0 请登录后投票
   发表时间:2012-04-19  
lz可以看看 gradle吧
0 请登录后投票
   发表时间:2012-04-19  
yizhilong28 写道
看看struts源码中的组织结构,应该就可以满足。
maven最好还是命令行,ide。。。


IDE还没命令行支持好?
你告诉我哪里不行了。。。。。。。。。。。有区别么。。。。。。。。。

0 请登录后投票
   发表时间:2012-04-19  
我想你说的是mvn在编译时,把pom文件复制到.m2/repository/的时候,mvn 没有替换那些变量为真实的值。 写个ant 来替换 ${maven.version} 字符串, 在maven install 执行它,我们是这样解决的,但要添加一个properties 文件让ant使用。这样的话,要修改版本号的时候,只修改两个文件。
0 请登录后投票
   发表时间:2012-04-19  
lz提出的问题 是存在的,目前我们项目中是采用两级,每次如果需要install的话 在他的上进 install ,单独的子项目也可以install 。
0 请登录后投票
   发表时间:2012-04-19  
我看了一个周的mvn,打算用它做jar包管理,但配置太复杂,最后放弃了,一点没觉得简单
0 请登录后投票
   发表时间:2012-04-19  
liugh1974 写道
我想你说的是mvn在编译时,把pom文件复制到.m2/repository/的时候,mvn 没有替换那些变量为真实的值。 写个ant 来替换 ${maven.version} 字符串, 在maven install 执行它,我们是这样解决的,但要添加一个properties 文件让ant使用。这样的话,要修改版本号的时候,只修改两个文件。


mvn ${maven.version} 不能自己读取properties中的文件进行替换还要结合ant确实有些麻烦.

mvn不是很喜欢
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics