先说明一点,本系列文章可能只提到了maven 20% 的知识,但是基本上这20%的知识就能覆盖真实使用环境中80%的操作了。如需更深一步的学习maven,还是直接去官网看文档的好。
在Java语言中,框架通常是海量的,如果盲目的去学习某个框架,最终的结果就是两败俱伤,学习的人白白浪费了时间和精力,而新的框架又在不断产生,可能今天学习的框架,明天又出了一个更好的。但是有些软件却是非常值得“深究”的,因为他/她总会在某个特定的时刻,让人爱的无法自拔。。。。
要学习maven,首先要爱上它,我爱上它的原因是实在无法忍受种种框架依赖的种种jar包。在使用maven以前,例如搭建一个非常熟悉的SSH框架,就首先要去Struts、Spring、Hibernate下载各个sdk,然后参照各自的help文档,来“集合”需要的jar,其中有许多jar只会在特定的条件下才会用到,通常情况下都用不到。而且,有些jar属于第三方的jar,这意味着必须得自己找那些jar,例如commons-xxxx系列。所有jar集齐后,在排除冲突,最后将搭好的框架放在eclipse里测试运行,再看看有哪些问题。这样“千辛万苦”搭好的环境,可能随着其中一个组件版本的变化,例如spring版本的升级,又需要重新在来一次。而且最后搭好的框架光jar可能就几百M。每次向svn上传时,就会特别悲伤。。。。
要使用maven,入门的最好办法就是在myeclipse中直接新建一个maven项目,同时勾选create a simple project选项,这样能快速创建一个简单的默认类型的符合maven默认结构的maven项目。然后就需要为项目配置各种依赖了,使用maven pom editor打开pom.xml文件,在下方切换到Dependency视图,就可以图形化的添加依赖了。
不过图形化视图只是辅助手段,多多少少的还需要手工编辑pom.xml文件,这时候如果熟悉pom.xml文件结构的话,就会方便的多。
pom文件是以标签的形式展现的,根节点是一个project标签。其他标签都是写在其内部的。通常会使用到如下几种标签:
<modelVersion> 指定了当前模型的版本,和maven有关。使用默认值即可。
<groupId>
<artifactId>
<version>
这三个要一起说,因为这三个通常一起规定了某一个构建(一个jar、war包等就是一个构建)。groupid通常是公司域名的倒写(也可以认为是同一组的jar);artifactid是构建本身的名字,名字中最好不要带—. 等字符(因为这些字符在maven构建命名规范中属于关键字);version规定了当前构建的版本,版本号通常以.隔开(废话)。
<packaging> 指定了当前构建的类型,常用的有jar,war,pom等。
<build> 指定如何构建当前的构建。里边通常包含的标签有:
<resources>:指定了当前构建的source目录
<plugins> :指定了进行构建时使用的插件。
build标签的具体使用会在以后的章节中描述。
<dependencies>:指定当前构建都需要哪些依赖,<dependencies>会包含若干个<dependency>子标签
<dependency>:此标签是被包含在<dependencies>标签中的,每一个dependency标签都对应一个依赖。
<properties> :其中包含了若干个自定义属性,通常的做法中,会将各个依赖的版本放置到此标签中。
一个pom文件用的最多的几个标签就是上述几个,应该比较容易理解。文章结尾在贴出一个简单的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>com.test</groupId>
<artifactId>TestMavenPom</artifactId>
<version>1.0.0</version>
<properties>
<commons-lang3>3.3.2</commons-lang3>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3}</version>
</dependency>
</dependencies>
</project>