ng
org.springframework
3.2.0.RELEASE
org.springframework
3.2.0.RELEASE
org.slf4j
1.6.4
org.slf4j
1.6.4
org.slf4j
1.6.4
log4j
1.2.16
log4jdbc
1.2
junit
4.10
test
四、Maven仓库
Maven通过项目定义的坐标来管理这些依赖,而这些依赖的物理文件是通过Maven的仓库来统一管理的。
对于一个依赖坐标,它会按照如下方式反映到Maven的仓库中。
1、将groupId转化为路径:将groupId中的包名分隔符(.)转换成路径分隔符(/)。对于上面的例子就是 org.apache.struts -> org/apache/struts/
2、将artifactId转化为路径:在groupId转化的路径基础上连接artifactId。生成路径为: org/apache/struts/struts2-core/
3、将verion转化为路径:在artifactId转化的路径基础上连接version。生成路径为: org/apache/struts/struts2-core/2.3.8/
4、根据artifactId和version生成依赖包文件名:上例就是 struts2-core-2.3.8
5、根据依赖的打包方式确定文件的扩展名。对于上例它的扩展名就是.jar
这样根据路径和文件名就找到了这个物理文件在仓库中的位置:org/apache/struts/struts2-core/2.3.8/struts2-core-2.3.8.jar
Maven的仓库分为本地仓库和远程仓库。
本地仓库:是Maven在我们本机设置的仓库目录,默认目录为当前用户目录下的.m2/repository.
远程仓库包括中央仓库、私服、其他公共仓库。
中央仓库是Maven提供的远程仓库,地址是:http://repo.maven.apache.org/maven2
私服是我们为了节省带宽和时间,提升效率,在局域网架设的私有Maven仓库。
Maven在根据依赖坐标查找依赖时,首先会从本地仓库查找该依赖包,当本地仓库中没有这个依赖包时,Maven会从中央仓库查找依赖,并下载到本地仓库。最后,在我们项目的classpath中引用本地仓库的依赖包路径。
例如,当项目只依赖strtus2-core这个依赖包时,会生成这样的classpath文件:
[html]
< xml version="1.0" encoding="UTF-8" >
其中,本地仓库目录会使用M2_REPO变量表示,因此IDE环境未配置该变量时,需在IDE中添加这个变量的classpath。
五、聚合与继承
一个项目通常存在多个模块,每个模块都是作为一个独立的工程存在。通过Maven配置文件可以把多个模块聚合在一起进行编译发布,并且它的聚合非常简单只需要使用元素添加模块就可以完成聚合。我们参考struts2的pom.xml文件来看一下聚合的配置方式:
[html]
4.0.0
org.apache.struts
2.3.8
org.apache.struts
Webapps
blank
mailreader
portlet
showcase
rest-showcase
....
另外,在这个项目的个各模块间通常是存在引用关系,并且每个模块会引用一些相同的依赖,Maven也提供了继承的机制来管理这些共同的依赖。你可以编写一个pom.xml文件作为父级pom配置,各个模块在自己的pom.xml中继承父级pom文件,就像上面的示例那样,使用
元素标识继承的父级pom文件。
父级pom文件的编写:
1、父级pom文件的packaging必须是pom,它需要作为pom文件发布以便子pom继承
2、在父级pom可以使用配置依赖管理。在下的依赖声明不会引入实际依赖,但是可以让子模块继承依赖配置。例如,在子模块中我们只标识依赖的groupId和artifactId,它就可以根据父类的依赖管理获取这个依赖的version及exclussions等配置。
3、在父级pom中可以使用
配置插件管理。作用和类似,只不过一个管理依赖一个管理插件。
子模块pom文件的编写:
2、可以使用标识父级pom的物理路径,子模块会直接从指定的路径加载父级pom文件,未指定该元素时,子模块将根据父级pom的坐标从Maven仓库查找
3、子模块pom可以继承父级pom中除artifactId之外的大部分配置,因此子模块的groupId、version以及依赖的version都可以省略。
六、Maven脚本使用
现在大部分IDE都有插件支持Maven,使用插件可以方便的构建Maven项目,如果IDE不支持Maven插件或未安装Maven插件也可以使用一个简单的批处理脚本来完成Maven项目的构建。
例如,保存下面内容,存储为bat格式的批处理文件
cd %~dp0
call mvn eclipse:clean eclipse:eclipse
pause
运行该