现在的位置: 首页 > 综合 > 正文

5分钟学maven

2013年10月10日 ⁄ 综合 ⁄ 共 3793字 ⁄ 字号 评论关闭

maven能给你带来什么? 

这段话属转贴)学会使用maven2了,那么一切就变得简单起来了,一行命令mvn deploy,或者一个ant task,就让所有的事情都完成了。如果你想查看项目的进度,如果你想发布一个用户站点,那么mvn site可以很好的帮助你。然而更为方便的是,你不要到处去寻找那些类库了,到处的复制,粘贴,有时候还得为一个jar包的不同版本冲突忙上半天。有了maven,就有了统一的开发库,所有的jar都统一管理。不用再担心了。
    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类似于anttask,而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.xmlmaven最核心的project's configuration file,就像是Antbuild.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
 
Phasemaven build lifecycle的其中一个stepbuild lifecycle是由多个有执行顺序的phases (ordered sequence of phases) 组成的
 
当你执行一个phase命令时,maven就会执行顺序排在该phase之前的所有phases,然后再执行该phase例如,如果我们执行“compile” phase,那么maven实际要执行的phases依次为:
  1. validate
  2. generate-sources
  3. process-sources
  4. generate-resources
  5. process-resources
  6. 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 : 把已经打包的东东(如jardeploy到运行环境内,用于集成测试
  • 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 packageremote 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目录下看到该命令生成的东东

 

抱歉!评论已关闭.