我们现在开发Java应用,很多时候都会使用开源框架,例如Spring,Hibernate,log4j等等,这样我们的项目就需要把这些开源的jar导入我们的项目中。以往,我有2种做法引入这些包:
1. 把jar直接放入项目中,JavaSE项目自己建立一个libs目录,用来放置jar包,Web项目放入WEB-INF/lib下面
2. 在自己的电脑新建一个文件夹,专门用来存放各类jar包,项目需要使用的时候通过创建user library引入项目中
这两种方法各有优点,也各有非常严重的缺陷:
第一种方法
优点:
我需要的包都在我的项目中,这个项目可以传给别人,也可以从一台pc传到另一台pc,几乎不需要其他工作,就能在新环境中跑起来。
缺点:
这样一来,项目就变得庞大了,很可能我只是写个ssh sample给别人看,写的代码就几十k,而引入所有jar后,就变成几十m了,有时需要把这样的项目放上cvs/svn上,传输也太庞大了。更何况,很多时候,项目中需要的jar,新环境中早已存在。
第二种方法
优点:
解决了第一种方法中项目太庞大的缺点,只要和团队成员约定library的命名规则,则可以在多个环境中传输。
缺点:
这种做法的缺点也是非常恐怖的,有时候,新环境中,根本没有相关jar包,程序就不能运行了;另外,这种做法是和自己相熟的团队中约定规则可行,万一另外有开发人员,他们有他们的命名规则,则乱了。
Maven的依赖管理功能,则能够很好地解决这样的问题。
在Eclipse中(已安装Maven插件),我们可以通过创建Maven project或者对创建的project右键点击->Maven->Enable Dependency Management,来使用Maven。这个时候,在project根目录下会有一个xml文件——pom.xml,里面类似:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.noside</groupId> <artifactId>maventest</artifactId> <version>0.0.1-SNAPSHOT</version> </project>
元素说明:
modelVersion:pom文件的版本号,一旦有模块更改就会更新
groupId:项目组织的唯一标识
artifactId:项目唯一标识
version:项目版本号
除此之外还有其他元素,详细情况可参考http://maven.apache.org/ref/3.0.3/maven-model/maven.html
接下来,我会为项目增加spring的library。打开pom.xml,编辑后保存
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.noside</groupId> <artifactId>maventest</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>2.5.6</version> </dependency> </dependencies> </project>
这样项目根目录会出现"Maven Dependencies"的目录,这样需要的包就被导入了。
特别注意的是,Maven通过groupId/artifactId/version来唯一标识依赖包,这里,我们不需要知道需要的包的路径在什么地方,Maven会根据我们的配置,在远程服务器寻找对应的包,放到本地,下次再用到这个包,就不需要再从远程下载了。
以上就是Maven作为依赖管理的一个简单应用。