groupId
template
com.company.projectName
egcom.by.study
artifactId
如果是主工程
templateprojectName
egstudy
如果是子模块
templateprojectName-moduleName
egstudy-base
version
<主版本>.<次版本>.<增量版本>-<限定符>
主版本:主要表示大型架构变更
次版本:主要表示特性的增加
增量版本:主要服务于bug修复
限定符:如alpha、beta等等是用来表示里程碑
当然不是每个项目的版本都要用到这些4个部分,根据需要选择性的使用即可。在此基础上Maven还引入了SNAPSHOT
的概念,用来表示活动的开发状态,由于不涉及坐标规划,这里不进行详述。不过有点要提醒的是,由于SNAPSHOT的存在,自己显式地在version中使用时间戳字符串其实没有必要。
Classifier
Classifier可能是最容易被忽略的Maven特性,但它确实非常重要,我们也需要它来帮助规划坐标。设想这样一个情况,有一个jar项目,就说是
dog-cli-1.0.jar
吧,运行它用户就能在命令行上画一只小狗出来。现在用户的要求是希望你能提供一个zip包,里面不仅包含这个可运行的jar,还得包含源代码和文档,换句话说,这是比较正式的分发包。这个文件名应该是怎样的呢?
dog-cli-1.0.zip
?不够清楚,仅仅从扩展名很难分辨什么是Maven默认生成的构件,什么是额外配置生成分发包。如果能是dog-cli-1.0-dist.zip
就最好了。这里的dist就是classifier,默认Maven只生成一个构件,我们称之为主构件,那当我们希望Maven生成其他附属构件的时候,就能用上classifier。常见的classifier还有如dog-cli-1.0-sources.jar
表示源码包,dog-cli-1.0-javadoc.jar
表示JavaDoc包等等。制作classifier的方式多种多样,其中最重要的一种是使用Maven Assembly Plugin,感兴趣的读者可以进一步研究。
reference
http://www.infoq.com/cn/news/2010/12/xxb-maven-1
http://wiki.jikexueyuan.com/project/maven/snapshots.html
http://www.infoq.com/cn/minibooks/maven-in-action