如何用Maven来管理Java项目的Library
关键字: Java, Eclipse, Maven
背景:
我们现在的Java项目中,每个项目都有很多依赖的Jar档,基本上都放在了自己项目下的lib目录中,
这样就会导致同样的Jar档在各个不同的项目中重复出现,然后我们再将这些重复的资源放到VSS,SVN等
版本控管工具中,日子久了就会发现,一个是各个项目间的Jar档版本很难统一控管,另外会给版本控管工具
带来很大的空间上的浪费.
摘要:
本文从Maven的库包管理功能上做了一些描述,笔者初步尝试了一下用Maven来管理项目的依赖包.
Maven这个工具的作用之一就是将这些我们需要的Library库统一控管起来,每个项目只需要编写一个
pom.xml的配置文件即可.
内容:
1.下载并安装Maven
下载站点: http://maven.apache.org
安装: 将下载的压缩档直接解压到任意路径,然后在系统环境变量中的Path变量中添加Maven的bin目
录(如我本机的路径是D:\Program Files\maven-2.0.6\bin)
打开CMD窗口,运行mvn –version显示正确版本,说明安装成功.
2.利用Maven创建标准布局的webapp项目
在控制台执行下面命令(groupId后面是包名,artifactId后面是项目名称):
mvn archetype:create -DgroupId=com.benq.mavenproj -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
在my-webapp根目录下,你会看到名为pom.xml的文件,这个就是maven的项目描述文件
编辑pom配置项目所需依赖,例如下面:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.0</version> <scope>compile</scope> </dependency> |
groupId是该类库所属的组织,作为文件目录,包名结构映射成目录结构,artifactId就是具体的类库名称了,是groupId的一个子目录,version是版本号,每个版本都有一个单独的目录,里面放置的就是具体的jar包。
关于依赖的写法,可以去这里查询:http://mvnrepository.com/
3.生成eclipse项目
在控制台下进入项目目录,如果是从maven webapp项目生成eclipse wtp,执行:
mvn -Dwtpversion=1.5 eclipse:eclipse(目前最新支持到WTP1.5)
普通eclipse项目执行:mvn eclipse:eclipse
然后在eclipse中import项目即可
4.在eclipse中设置maven路径变量
刚导入的项目上会有错误标记,不用担心,因为还没有设置maven的类库变量
打开项目的属性框,在Java Build Path里我们可以看到项目依赖类库的路径都已经给自动设置好了
下面设置maven的路径变量M2_REPO
Window -> Preferences -> Java -> Build Path -> Classpath Variables,New
Name命名为M2_REPO,路径为你的本地的maven类库地址,这里为C:/Documents and Settings/windy xu/.m2/repository,设置成功后重新编译,发现项目的错误标记已经消除了,至此,eclipse项目已经导入成功了
5.为项目添加新的依赖
编辑pom文件,添加新的dependency,保存後
在控制台分别执行:
mvn eclipse:clean
mvn -Dwtpversion=1.5 eclipse:eclipse
在eclipse中刷新项目即可看到新的依赖项已经添加到eclipse项目中
6.非maven标准的项目布局
前面已经介绍了如何新建一个maven项目并导入到eclipse中,但对于已有的wtp项目,其项目布局是不符合maven方式的(eclipse下wtp项目web目录在项目根目录下WebContent,maven布局是在src/main/webapp),这就不能直接通过eclipse:eclipse来生成eclipse的依赖
但可以通过改写项目pom文件来指定源码目录和测试源码目录:
xml 代码
<build> <finalName>my-webapp</finalName> <sourceDirectory>src</sourceDirectory> <testSourceDirectory>test</testSourceDirectory> </build> |
总结:
利用Maven来管理依赖包确实很方便,但是老项目可能目录结构千差万别,使用时可能需要多研究研究.
另外我们有时候会包含一些我们自己写的Jar档,我个人建议这些Jar档就不要放到Maven中管理了(虽然Maven也可以建立”私服”),因为可能会带来”私服”的维护成本上升.