一、什么是Maven?
Maven本质上是一个工程管理和理解工具。
提供了一种方式,帮助管理:
Builds
Documentation
Reporting
Dependencies
SCMs
Releases
Distribution
二、Maven对我们的开发进度有什么益处?
采用标准的规定和惯例加速开发周期
同时达到更高的成功率
三、如何设置Maven?
Maven默认设置可以满足大多数情况,如果你想改变,cache位置、Http代理,需要改变配置。
Maven的配置三个级别:
(1)Project:大多数静态设置在pom.xml文件中。
(2)Installation:在安装时,加入的配置。
(3)User:对特殊用户的配置。
很显示,Project定义的信息,不管谁建造他,都将被应用到工程。别的两项定义针对当前环境。
注:Installation和User定义的信息,通常不能加入共享工程信息。例如,<organization>和<distributionManagement>。
对于上面注中提到的情况,需要写一个父pom.xml用于让其它工程继承。
1.配置本地资源库
可以修改${user.home}\..m2\settings.xml。该文件不是必需,如没有,系统将使用默认文件(${M2_HOME}\conf\settings.xml)。
打开settings.xml,找到localRepository,默认值为${user.home}\.m2\repository。将默认值改为本地路径。如,d:\repository。
注:该路径必须是本地路径。
2.配置代理
代理也可以在配置文件中指定。
代理作用:供访问Maven 2.0的Http请求使用。
代理设置如果需要验证,需要提供用户名和密码。
setting.xml配置文件:
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.somewhere.com</host>
<port>8080</port>
<username>liuyf</username>
<password>123456</password>
<noProxyHosts>www.google.com|*.somewhere.com</noProxyHosts>
</proxy>
</proxies>
注:noProxyHosts支持通配符。不代理的主机列表。
3.配置并行工程
Maven 2.1.0默认一次下载5个工程(不同组)。
启动Maven时,可以通过-Dmaven.artifact.threads来设定。
mvn –Dmaven.artifact.threads=1 clean install
如果设定固定值,可以通过设置MAVEN_OPTS环境变量,来指定。例如,Unix下,根据需要改为Windows。
export Maven_OPTS=-Dmaven.artifact.threads=10
4.安全和发布设置
发布工程到指定的资源库,是在工程的pom.xml文件中通过<distributionManagement>来设定的。但是你不可以将用户名,密码,和一些安全设置放到这个配置文件中。因此,你应该加入一个server定义,工程通过id来配置对应的server。
<servers>
<server>
<id>lyf</id>
<username>liuyf8688</username>
<password>123456</password>
<privateKey>默认值~/.ssh/id_dsa</privateKey>
<passPhrase>my_key_phrase</passPhrase>
</server>
</servers>
5.使用资源库镜像
资源库可以被声明在一个工程中,那意味着如果你拥有本地的资源库,共享的工程非常容易从资源库外面得到适当的设置。
使用镜像的原因:
(1)在internet网上同步镜像,地理位置近,访问速度快。
(2)可能想用本地的易控的资源库来替换一个特定的资源库。
(3)可能想用maven-proxy提供到镜像的本地缓存,需要替换他的URL。
<mirrors>
<mirror>
<id>liuyf8688</id>
<name>liuyf8688</name>
<url>http://www.liuyf8688.com</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirros>
6.profiles
资源库配置也可以放到profile。可以拥有多个profile文件,根据环境设置一个生效。
四、如何开始我的第一个Maven工程?
使用Maven的原型(archetype)机制。一个archetype定义了针对某一些任务定义了模板。
执行以下命令,创建工程:
mvn archetype:create –DarchetypeGroupId=org.apache.maven.archetypes
–DgroupId=com.liuyf8688 –DartifactId=liuyf-app
命令成功执行后,将建立liuyf-app工程文件夹。进入文件夹,包括src和pom.xml。
1.pom.xml分析
包含工程的工程对象模型。POM是Maven的基本工作单元。
pom.xml片断:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.liuyf8688</groupId>
<artifactId>liuyf-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>liuyf-app</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>3.8.1</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
分析:
(1)project:pom.xml文件的根元素。
(2)modelVersion:这个文件使用的Object Model的版本。
(3)groupId:创建这个工程的组和组织的唯一标识。
(4)artifactId:被这个工程创建的产品的唯一名称。工程的产品典型的是一
个jar文件。源文件打包文件也用这个名称作为他的名称的一部分。
(5)packaging:指示这个产品的使用的打包类型。如,jar、war、ear。
(6)version:指示这个产品的版本。
(7)name:工程显示的名称,默认artifactId相同。maven来产生。
(8)url:指示了工程的站点,默认http://maven.apache.org。maven来产生。
(9)description:提供了工程的基本描述。
五、如何编译工程源文件?
进入刚才创建的工程根目录。执行如下命令:
mvn compile
六、如何编译测试程序及运行单元测试程序?
编译并运行测试程序,执行如下命令:
mvn test
编译测试程序,执行如下命令:
mvn test-compile
七、如何创建Jar并安装到本地资源库?
先编译程序,再打包程序,执行如下命令:
mvn package
安装程序到本地库,执行如下命令:
mvn install
产生IntelliJ IDEA工程描述,执行如下命令:
mvn idea:idea
产生Eclipse工程描述,执行如下命令:
mvn eclipse:eclipse
打包程序,执行如下命令:
mvn jar:jar,注:如果程序没有编译,打包成的Jar,仅仅包含工程的maven信息。
八、如何使用插件?
Maven 1.0用户注意:加入预执行目标到maven.xml和加入一些实体到project.properties文件中,在这里是有一些不同的。
举例:使用配置JDK编译器,允许JDK 1.5编译源程序。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
Maven 2.0中的插件,看起来像是一个依赖。
九、如何加入我的资源文件到JAR文件?
在main部分,创建标准目录resources/META-INF/资源文件。
十、如何过滤资源文件?
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
通过上面指定过滤的资源文件。
(1)资源文件引用pom.xml中的内容
资源文件(app.properties)内容如下:
#app.properties
app.name=${pom.name}
app.version=${pom.version}
资源文件中的${pom.name}和${pom.version}分别引用了pom.xml文件中内容。执
行如下命令后:
mvn process-resources
资源文件(app.properties)内容变为如下:
#app.properties
app.name=liuyf-app
app.version=1.0-SNAPSHOT
(2)资源文件引用外部文件
pom.xml文件添加如下内容到<build>标签。
<filters>
<filter>src/main/filters/filter.properties</filter>
</filters>
资源文件(app.properties)内容如下:
#app.properties
app.name=${pom.name}
app.version=${pom.version}
app.info=${my.filter.value}
外部文件(filter.properties)内容
#filter.properties
my.filter.value=filter content
执行下面命令后:
mvn process-resources
资源文件(app.properties)内容变为如下:
#app.properties
app.name=liuyf-app
app.version=1.0-SNAPSHOT
app.info=filter content
(3)引用在pom.xml文件中指定<properties>属性中指定的值。
pom.xml文件加入:
<properties>
<my.filter.value>123456</my.filter.value>
</properties>
(4)引用命令行
资源文件内容如下:
#app.properties
app.name=${pom.name}
app.version=${pom.version}
app.info=${command.line.prop}
执行如下命令:
mvn process-resources “-Dcommand.line.prop=789456123”
资源文件内容如下:
#app.properties
app.name=liuyf-app
app.version=1.0-SNAPSHOT
app.info=789456123
十一、如何使用外部依赖?
引用外部依赖需要至少定义四个东西:
groupId
artifactId
version
scope
pom.xml中关于依赖的代码片断:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
其中scope元素表示工程