1. Maven简介
Maven不仅是构建工具,还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我自动下载构件。Maven给Java类世界引入经纬,让它们变得有秩序, 于是我们可以借助它来有序地管理依赖,轻松地解决那些繁杂的依赖问题。
Maven为全世界的Java开发者提供了一个免费的中央仓库,在其中几乎可以找到任何流行的开源类库。通过一些Maven的衍生工具(如Nexus),我们还能对其中进行 快速地搜索。只要定位了坐标,Maven就能帮助我们自动下载,省去了手工劳动。
使用Maven还能享受一个额外的好处,即Maven对于项目目录结构,测试用例命名方法等内容都有了既定的规则,只要遵循了这些成熟的规则,用户在项目间切换的时 候就免去了额外的学习成本,可以说是约定胜于配置。
2. Maven 安装
这个比较简单,不会的,大家可以自己去查找相关的资料,有一点需要大家注意:有时候你所在公司基于安全考虑,要求你使用通过安全认证的代理访问因特网。这种 情况下,就需要为Maven配置HTTP代理,才能让它正常访问外部仓库,以下载所需要的资源。
首先确认自己无法直接访问公共的Maven中央仓库,直接运行命令ping repo1.maven.org 可以检查网络。如果真的需要代理,先检查一下代理服务器是否畅通。比如现在 一个IP地址为218.14.227.197,端口为3128的代理服务,我们可以运行telnet 218.14.227.1973218来检测该地址端口是否通畅。如果得到出错的信息,需要先获取正确的代 理服务信息;如果telnet连接正确,则输入ctrl+],然后q,回车,退去即可。
检查完毕之后,编辑~/.m2/setting.xml文件(如果没有该文件,则复制$M2_HOME/conf/setting.xml),添加的代理配置如下:
<proxies>
<proxy>
<id>my-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>218.14.227.197</host>
<port>3128</port>
<username>***</username>
<password>***</password>
<nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>
</proxy>
</proxies>
3. Maven 使用入门
3.1 Maven构建的中央仓库查询地址
https://repository.sonatype.org/
3.2 Maven构建的jdk版本设置
在使用Maven构建的项目的过程中,我们需要使用-source 5或更高版本以启动注释,这是maven初学者常常遇到的一个问题。由于历史原因,Maven的核心插件之一 ——compiler插件默认只支持编译java1.3,因此需要配置该插件使用其支持java5或java6,主pom文件,见下面代码清单:
<project>
<build>
<plugins>
<groupId>org.apache.maven.plugin</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugins>
</build>
</project>
3.3打包类型设置
Maven打包和运行:mvn clean package,如果没有指定打包类型, 则使用默认的打包类型jar,打包名称是根据artifact-version.jar规则进行命名,如有需要,还可以用 finalName来自定义该文件的名称,例如pac项目中有这样的配置:
3.4 maven主要命令
Maven最主要的命令有:mvn clean compile、mvn clean test、mvn clean package、mvn clean install。执行test命令之前是会执行compile的,执行package之前是 会执行test的,执行install之前会执行package。可以在任何一个Maven项目中执行这些命令,而且我们已经清楚它们是用来做什么的。
3.5 项目包含main方法的处理
如果一个类中含有main方法,在默认打包生成的jar是不能够直接运行的,因为带有main方法的类信息不会添加到manifest中(打开jar文件中的META- INF/MANIFEST.MF文件,将无法看到Main-Class一行)。为了生成可执行的jar,需要借助maven-shade-plugin,配置该插件如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformerimplementation=”org.apache.maven.plugins.resource.ManifestResourceTransformer”>
<mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
3.5 使用Archetype生成项目骨架
如果是maven3,简单地运行:mvn archetype:generate
如果是maven2, 运行:
mvn org.apache.maven.plugins:maven-archetype-plugins:2.0-alpha-5:generate
接着maven会提示输入创建项目的groupId, artifactId, version以及包名package。如下输入并确认:
Define value for groupId:com.juvenxu.mvnbook
Define value for artifactId:hello-world
Define value for version: 1.0-SNAPSHOT
Define value forpackage:com.juvenxu.mvnbook::com.juvenxu.mvnbook.helloword
Confirm properties configuration:
groupId:com.juvenxu.mvnbook
artifactId:hello-word
version: 1.0-SNAPSHOT
package:com.junenxu.mvnbook.helloworld
Y::Y
当然用m2eclipse来创建maven项目会更方便,不过在父模块的时候,一定要把packing类型修改为pom,默认创建的是jar,即把<packing>jar</packing>修改为 <packing>pom</packing>