Maven概述
1. Maven默认配置
1.1 默认目录结构
java代码位置src/main/java
资源文件位置src/main/resources
更多默认结构参见
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
1.2 默认工作目录
WindowsXP中,位置为C:/Documents and Settings/<username>/.m2
Unix中,位置为$HOME/.m2
如果想更改默认的工作目录,可以在$HOME目录下新建.mavenrc文件,加入以下内容
MAVEN_OPTS=-Duser.home=/<path>/lee
比如多个用户使用同一个用户名登陆到/home/development目录下的时候,可以给maven建立自己的目录。
具体步骤可以如下:
a) 在目录/home/development/lee下建立.mavenrc文件,加入user.home
b) 调用mvn命令前重设HOME目录为自己的目录,如/home/development/lee
其中repository目录包含下载的jar文件。
可以在.m2目录下建立setting.xml文件,设置用户配置信息。
如设置代理
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>[PROXY_HOST] </host>
<port>[PROXY_PORT] </port>
</proxy>
</proxies>
</settings>
参见http://maven.apache.org/settings.html
1.3 查看默认配置
在有效的maven配置目录下运行命令
mvn help:effective-pom
将会列出默认的maven配置
1.4 常用参数意义
groupId: 组织名称
artifactId: 项目名称
pachaging: 包类型,如jar,war等
version: 版本
2. Maven初步
2.1 运行 Maven 自带的例子
c:/>安装好maven后,既可运行自带的例子
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app
在当前目录下生成my-app文件夹,可以查看详细信息。
2.2 用Maven默认配置编译工程
1) 建立eclipse工程,假设工程名称为MavenTest,按照Maven默认目录结构建立目录及测试文件。
src/main/java/org/flypig/StandardTest.java
2) 在工程目录下创建pom.xml文件,可由Maven自带的例子获得,注释掉junit dependency,可以根据需要修改groupId,artifactId,version,name元素,比如
<groupId>org.flypig</groupId>
<artifactId>MvnTest</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>MyMavenTest</name>
3) 进入工程目录,运行如下命令
mvn compile
第一次运行时,Maven会下载很多文件,下载完成后就可以了。
最后提示
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2:01.585s
[INFO] Finished at: Thu Dec 09 12:01:12 CST 2010
[INFO] Final Memory: 3M/15M
[INFO] ------------------------------------------------------------------------
表示成功。
4) 在工程目录下会生成target目录,包含生成的jar文件。
5) 在工程目录下运行命令
mvn exec:java -Dexec.mainClass=org.flypig.StandardTest
即可看到执行结果。
6) 使用 mvn clean 清除target
3. 生命周期和目标
Maven默认生命周期祥见
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
Maven的一个生命周期由若干阶段(Phase)组成,每个阶段又由若干个目标(Goal)组成。Maven通过配置plugin来把生命周期,阶段和目标结合在一起。
比如
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<configuration>
<outputDirectory>${target.lib.dir}</outputDirectory>
</configuration>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
定义了在默认的生命周期中,在prepare-package阶段,执行目标copy-dependencies。
这个配置代表把用到的依赖jar包统统拷贝到自定义的目录${target.lib.dir}里
4. pom文件详解
4.1 添加属性
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<src.dir>./src</src.dir>
</properties>
添加了默认的build编码和src.dir属性。
4.2 更改默认配置
1) 更改默认源代码目录
<sourceDirectory>${src.dir}</sourceDirectory>
2) 更改目标目录
<directory>${target.dir}</directory>
3) 更改资源文件目录
<resources>
<resource>
<directory>${resource.dir}</directory>
</resource>
</resources>
4) 更改生成的文件名称(jar,war,etc)
<finalName>YourFileName</finalName>
4.3 插件配置
Maven有很多默认插件,什么都不配置的话,将执行默认行为。
如果需要修改参数,在插件的configuration元素下增加参数。
以下列举了常用的插件配置。
1) 更改编译目标jdk版本
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.4</source>
<target>1.4</target>
</configuration>
</plugin>
2) 增加manifest.mf文件,并且把当前目录作为classpath目录
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifestEntries>
<Class-Path>. </Class-Path>
</manifestEntries>
<manifest>
<mainClass>org.lee.Main</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
<classpathPrefix>lib</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
如果addClasspath为true,表示将pom.xml文件中的所有依赖都写入manifest文件中。
manifestEntries下的每一个元素名称对应manifest.mf文件中一行。这里会生成
Class-Path: .
以下是生成的manifest.mf文件片断
Main-Class: org.lee.Main
Class-Path: . lib/aopalliance-2.0.jar
3) 拷贝依赖jar到指定目录,并从生成的jar包中排除匹配模式文件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<configuration>
<outputDirectory>${target.lib.dir}</outputDirectory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.html</exclude>
</excludes>
</configuration>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
4) 使用ant插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<configuration>
<tasks>
<delete file="${log4j.tofile}"/>
<copy file="${log4j.fromfile}" tofile="${log4j.tofile}"/>
</tasks>
</configuration>
<executions>
<execution>
<phase>process-resources</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
4.4 依赖配置
1) 增加依赖
Maven通过groupId, artifactId 和 version 来定位仓库中的文件。
只要在dependencies元素下加入
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
即可,type和scope可以省略
运行时Maven会自动从远程下载对应文件。
2) 使用本地jar文件
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.3</version>
<scope>system</scope>
<systemPath>${system.lib.dir}/commons-lang.jar</systemPath>
</dependency>
这种情况下必须指定scope为system,systemPath为本地路径。
附:
常用Maven命令
1) 生成eclipse工程
mvn eclipse:eclipse