maven能给你带来什么?
(这段话属转贴)学会使用
maven2
了,那么一切就变得简单起来了,一行命令
mvn deploy
,或者一个
ant task
,就让所有的事情都完成了。如果你想查看项目的进度,如果你想发布一个用户站点,那么
mvn site
可以很好的帮助你。然而
更为方便的是,你不要到处去寻找那些类库了,到处的复制,粘贴,有时候还得为一个
jar
包的不同版本冲突忙上半天。有了
maven
,就有了统一的开发库,所有的
jar
都统一管理。
不用再担心了。
maven2 带来的不仅是方便, 对于整个项目的监控也是不错的。有了统一的入口,加上完善的 report 组件,可以清晰地看到项目的所有进展。再加上 continuum 的持续整合,能减少很多成本 。
maven2 带来的不仅是方便, 对于整个项目的监控也是不错的。有了统一的入口,加上完善的 report 组件,可以清晰地看到项目的所有进展。再加上 continuum 的持续整合,能减少很多成本 。
安装
1.
Download and extract latest version maven zip
2.
Set JAVA_HOME
3.
Set M2_HOME and add %M2_HOME%/bin to “path”
4.
Run command “mvn --version” in dos
第一个maven
命令
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
该命令是执行
archetype:create。其中前缀(prefix)
“archetype”称之为maven plugin。而“create”称之为 maven goal。所以该命令就是执行archetype plugin中的create goal。
Maven goal
类似于ant
的task
,而plugin
就是多个goal
的集合(collection of goals)。在
maven web site repository
里存放着各种各样的plugin,例如“
jboss-maven-plugin”就是一个包含很多用来处理各种各样的操作的goal的集合。
当你执行的mvn
命令第一次用到某个plugin
时,就会自动download
它到local repository
。
上面的命令执行之后,生成的东东的结构为:
my-app
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- App.java
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
The POM
pom.xml
是maven
最核心的project's configuration file
,就像是Ant
的build.xml。上面的命令生成的project's POM为:
<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.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
第二个maven
命令
(
cd my-app first
)
mvn package
该命令要执行的操作就是把
project
打包成
jar。
我们发现该命令和第一个要执行的命令(
archetype:create)有所不同,第一个要执行的命令的格式是“plugin:goal”,而这第二个要执行的命令则只是一个单字。
Maven
对单字命令不称为goal
,而称为phase
。
Phase
是maven build lifecycle
的其中一个step
,build lifecycle
是由多个有执行顺序的phases (ordered sequence of phases)
组成的。
当你执行一个phase
命令时,maven
就会执行顺序排在该phase
之前的所有phases
,然后再执行该phase
。例如,如果我们执行“
compile” phase,那么maven实际要执行的phases依次为:
- validate
- generate-sources
- process-sources
- generate-resources
- process-resources
- compile
在执行了第二个命令之后,我们通过运行java来测试:
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
你就会看到输出结果为:
Hello World!
Maven Phases
在
default lifecycle里,包含下列最常用被执行的phases:
- validate : validate the project is correct and all necessary information is available
- compile : compile all java files in project
- test : 使用unit test framework来test the compiled source code。这些test class不会被packaged and deployed。
- package : 把compiled code打包成你需要的格式,如JAR.
- integration-test : 把已经打包的东东(如jar)deploy到运行环境内,用于集成测试
- verify : run any checks to verify the package is valid and meets quality criteria
- install : install the package into the local repository, 这样做的目的是作为其他projects的一个local dependency
- deploy : 该phase会copy final package到remote repository for sharing。This phase is done in an integration or release environment。
另外还有3个很常用的、但不属于default lifecycle的phase:
- clean : cleans up artifacts created by prior builds
- site : generates site documentation for this project
- eclipse:eclipse : 创建相关的eclipse ide文件
每个LifeCycle phase实质上都会绑定到某个plugin:goal上!!例如命令
mvn compile
实际上等价于
mvn compiler:compile
即执行compile phase命令=执行compiler plugin的compile goal
但有一个很关键的知识点:
pom.xml的<packaging>的值不同,会影响lifecycle phase与哪个plugin:goal的绑定。例如:
如果是
<packaging>jar</packaging>
那么
package phase绑定到jar:jar
则
mvn package = mvn jar:jar
如果是
<packaging>war</packaging>
那么
package phase绑定到war:war
则
mvn package = mvn war:war
注意:phases and goals
可以按顺序一起执行。如:
mvn clean dependency:copy-dependencies package
该命令将clean project,然后copy dependencies, 最后执行package phase。
Generating the Site
mvn site
执行该phase会根据project的pom.xml来生成一个site。你可以在target/site目录下看到该命令生成的东东