maven笔记

mvn将项目分为5个阶段(lifecycle):准备、编译(complie)、测试、部署、运行
 
MVN生命周期
Maven的生命周期是为了对所有的构建过程进行了抽象了,便于统一。

clean(清理)

此生命周期旨在给工程做清理工作,它主要包含以下阶段:
pre-clean - 执行项目清理前所需要的工作。
clean - 清理上一次build项目生成的文件。
post-clean - 执行完成项目清理所需的工作.

default(默认)

validate - 验证项目是否正确且所有必要的信息都可用。
initialize - 初始化构建工作,如:设置参数,创建目录等。
generate-sources - 为包含在编译范围内的代码生成源代码.
process-sources - 处理源代码, 如过滤值.
generate-resources -
process-resources - 复制并处理资源文件,至目标目录,准备打包。
compile - 编译项目中的源代码.
process-classes - 为编译生成的文件做后期工作, 例如做Java类的字节码增强.
generate-test-sources - 为编译内容生成测试源代码.
process-test-sources - 处理测试源代码。
generate-test-resources -
process-test-resources - 复制并处理资源文件,至目标测试目录。
test-compile - 将需测试源代码编译到路径。一般来说,是编译/src/test/java目录下的java文件至目标输出的测试classpath目录中。
process-test-classes -
test - 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package -
package - 接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test -
integration-test - 按需求将发布包部署到运行环境。
post-integration-test -
verify -
install -将包安装到本地仓库,给其他本地引用提供依赖。
deploy -完成集成和发布工作,将最终包复制到远程仓库以便分享给其他开发人员。

site(站点)

pre-site - 执行一些生成项目站点前的准备工作。
site - 生成项目站点的文档。
post-site - 执行需完成站点生成的工作,如站点部署的准备工作。
site-deploy - 向制定的web服务器部署站点生成文件。
 
 
创建一个简单的项目:
mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook -Dversion=1.0
 
构建并打包这个应用
mvn install
 
命令mvn archetype:create,这里archetype是一个插件标识而create是目标标识,每一个插件都包括一个目标或者多个目标的组合。
如Compiler插件的compile目标,Sunfire插件中的test目标。
 
生命周期是包含在一个项目构建中的一系列有序的阶段。
一个生命周期是一些阶段的序列。
process-resources=>compile=>process-classes=>process-test-resources=>test-compile=>test=>prepare-package=>package
maven在执行一个阶段的时候,它首先会有序的执行前面所有的阶段,到命令行指定的那个阶段为止。
 
项目坐标
groupId:artifactId:packaging:version
packaging:表示项目的类型,默认是jar,这样的项目产生一个JAR文件,而类型为war的项目产生一个web应用
 
依赖管理
maven提供了不同的依赖范围,<scope>test</scope>表示只在执行与test相关的目标时,才会把依赖加入到classpath中
<scope>provided</scope>告诉maven一个依赖在编译的时候需要,但是它不应该被捆绑在构建的输出中。
 
站点生成和报告
mvn site将运行site生命周期阶段。
各种报告:Clover,JXR,PMD,JDepend
通过在pom.xml中配置哪些报告被包含在构建中,站点报告就可以被定制了。
 
定制项目信息(组织、开发人员、许可证等信息):这些元素要加在dependencies之前
<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/maven-v4_0_0.xsd">
...
  <name>simple-weather</name>
  <url>http://www.sonatype.com</url>
  <licenses>
    <license>
      <name>Apache 2</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>
  <organization>
    <name>Sonatype</name>
    <url>http://www.sonatype.com</url>
  </organization>
  <developers>
    <developer>
      <id>jason</id>
      <name>Jason Van Zyl</name>
      <email>jason@maven.org</email>
      <url>http://www.sonatype.com</url>
      <organization>Sonatype</organization>
      <organizationUrl>http://www.sonatype.com</organizationUrl>
      <roles>
        <role>developer</role>
      </roles>
      <timezone>-6</timezone>
    </developer>
  </developers>
...
</project>
 
加入项目依赖:
<dependencies>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.14</version>
    </dependency>
    <dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
    </dependency>
    <dependency>
      <groupId>jaxen</groupId>
      <artifactId>jaxen</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>velocity</groupId>
      <artifactId>velocity</artifactId>
      <version>1.5</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
 
Maven Exec插件,允许你运行Java类和其它脚本
mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main
 
Maven Dependency插件打印出依赖的列表
mvn dependency:resolve
它会打印出最终的你项目编译所基于的所有依赖的组合。
如果想知道项目的整个依赖树,可以运行dependency:tree目标
 
mvn install -x是打开Maven的调试标记运行。
 
执行生命周期的test阶段
mvn test
 
设置项目忽略单元测试失败,默认情况下,若出现单元测试失败,mvn将停止构建
<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <testFailureIgnore>true</testFailureIgnore>
        </configuration>
      </plugin>
    </plugins>
  </build>
也可以通过命令行参数设置
mvn test -Dmaven.test.failure.ignore=true
 
跳过单元测试,将不进行单元测试
mvn instal -Dmaven.test.skip=true
或者在pom.xml里配置
<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
    </plugins>
  </build>
 
Maven Assembly插件用来创建应用程序特有分发包的插件。
<build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
可以通过mvn assembly:assembly来构建这个装配
 
新建一个简单的web项目:
mvn archetype:create -DgroupId=org.sonatype.maven
book.ch05 -DartifactId=simple-web -DpackageName=org.sonatype.mavenbook -Darchety
peArtifactId=maven-archetype-webapp
 
使用maven的jetty插件运行web应用
mvn jetty:run
<build>
    <finalName>simple-webapp</finalName><!--可以定义最后生成的文件名-->
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
 
多模块项目:
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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sonatype.mavenbook.ch06</groupId>
  <artifactId>simple-parent</artifactId>
  <packaging>pom</packaging>
  <version>1.0</version>
  <name>Chapter 6 Simple Parent Project</name>

  <modules>
    <module>simple-weather</module>
    <module>simple-webapp</module>
  </modules>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </plugin>
      </plugins>
   </pluginManagement>
  </build>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
子模块的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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.sonatype.mavenbook.ch06</groupId>
    <artifactId>simple-parent</artifactId>
    <version>1.0</version>
  </parent>
  <artifactId>simple-webapp</artifactId><!--子模块的groupId与version无须再定义,而是从父项目中继承了-->
  <packaging>war</packaging>
  <name>simple-webapp Maven Webapp</name>
</project>
 
Maven Help插件
mvn help:describe -Dplugin=help -Dfull
mvn help:describe -Dplugin=archetype -Dmojo=generate//可以显示某个目标的帮助
 
***********************************************************************************************************************
maven是一个项目管理工具
 
环境变量设置:
  MAVEN_HOME : D:\apache-maven-3.0.2 
   MAVEN : %MAVEN_HOME%\bin 
  (可选) MAVEN_OPTS : -Xms256m -Xmx512m //原因:maven构建时,java虚拟机默认内存可能不够
不要使用m2eclipse内嵌的maven,在设置中可以修改
 
pom.xml : Project Object Model or POM
<?xml version="1.0" encoding="UTF-8"?>   
<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/maven-v4_0_0.xsd">   
<modelVersion>4.0.0</modelVersion>      //当前POM模型的版本,对于Maven2及Maven  3来说,它只能是4.0.0
<groupId>com.juvenxu.mvnbook</groupId>   
<artifactId>hello-world</artifactId>   
<version>1.0-SNAPSHOT</version>
//上面这三个是项目坐标,例如公司为mycom,项目为myapp,则groupId为com.mycom.myapp,artifactId为myapp-util,myapp-web等    
<name>Maven Hello World Project</name>//这个是对用户友好的项目名称
</project>     
 
mvn创建项目:
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
mvn archetype:generate//根据已有的原型来构建新的项目
创建struts2项目
mvn archetype:generate -B //按批处理模式执行,避免人工干预
-DgroupId=tutorial 
-DartifactId=tutorial 
-DarchetypeGroupId=org.apache.struts 
-DarchetypeArtifactId=struts2-archetype-blank 
-DarchetypeVersion=2.2.1
 
Maven Dependency Plugin插件可以用来分析项目的依赖,使用命令:mvn dependency:analyze
 
mvn的目录结构:
项目的主代码位于src/main/java,这是mvn的约定,约定大于配置
项目的测试代码位于src/test/java
 
mvn clean //清空包
mvn install //下载包
mvn clean install //一般组合使用,将当前项目安装到本地仓库中,以供其他项目使用
mvn clean compile//执行编译
mvn clean test//执行测试

mvn eclipse:eclipse //生成eclipse项目 如果项目中增加或者删除包了 需要执行该命令
mvn jetty:run //在jetty(类似于tomcat) web容器中运行项目
mvn javadoc:javadoc //生成API文档
 
使用maven-shade-plugin插件来指定jar包的main-class
 <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>   
           <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
         <mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>   
          </transformer>   
        </transformers>   
      </configuration>   
      </execution>   
   </executions>   
</plugin>
 
手动添加中央仓库中没有的包:(以添加oracle驱动为例),这是添加到本地仓库
mvn install:install-file -DgeneratePom=true -DgroupId=com.oracle -DartifactId=ojdbc14  -Dversion=10.2.0.4.0  -Dpackaging=jar -Dfile=D:\ojdbc-14.jar
向私服中添加包:
mvn deploy:deploy-file -DgroupId=net.sf.jxls -Dar

tifactId=jxls-core -Dversion=1.0-RC-4-SNAPSHOT -Dpackaging=jar -Dfile=d:\jxls-co

re-1.0-RC-4-SNAPSHOT.jar -DrepositoryId=nexus-snapshots -Durl=http://128.128.0.3

0:8081/nexus/content/repositories/snapshots/

 

另外注意要设置.m2下的文件setting.xml

<server>
<id>nexus-snapshots</id> 这里的id要和-DrepositoryId的值相等
<username>admin</username>
<password>admin123</password>
</server>

 

 

 通常情况下,使用maven增加依赖时,它只下载项目依赖包的二进制文件,要想在同时下载源代码包值需要增加一个参数:mvn eclipse:eclipse -DdownloadSources=true;

此外,也可以使用maven命令:mvn dependency:sources 下载依赖包的源代码。

 

Maven常用命令: 
1. 创建Maven的普通java项目: 
   mvn archetype:create 
   -DgroupId=packageName 
   -DartifactId=projectName  
2. 创建Maven的Web项目:   
    mvn archetype:create 
    -DgroupId=packageName    
    -DartifactId=webappName 
    -DarchetypeArtifactId=maven-archetype-webapp    
3. 编译源代码: mvn compile 
4. 编译测试代码:mvn test-compile    
5. 运行测试:mvn test   
6. 产生site:mvn site   
7. 打包:mvn package   
8. 在本地Repository中安装jar:mvn install 
9. 清除产生的项目:mvn clean   
10. 生成eclipse项目:mvn eclipse:eclipse  
11. 生成idea项目:mvn idea:idea  
12. 组合使用goal命令,如只打包不测试:mvn -Dtest package   
13. 编译测试的内容:mvn test-compile  
14. 只打jar包: mvn jar:jar  
15. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile 
      ( -skipping 的灵活运用,当然也可以用于其他组合命令)  
16. 清除eclipse的一些系统设置:mvn eclipse:clean 

ps:

一般使用情况是这样,首先通过cvs或svn下载代码到本机,然后执行mvn eclipse:eclipse生成ecllipse项目文件,然后导入到eclipse就行了;修改代码后执行mvn compile或mvn test检验,也可以下载eclipse的maven插件。

mvn -version/-v               显示版本信息 
mvn archetype:generate        创建mvn项目 
mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app   创建mvn项目

mvn package              生成target目录,编译、测试代码,生成测试报告,生成jar/war文件 
mvn jetty:run            运行项目于jetty上, 
mvn compile              编译 
mvn test                 编译并测试 
mvn clean                清空生成的文件 
mvn site                 生成项目相关信息的网站 
mvn -Dwtpversion=1.0 eclipse:eclipse        生成Wtp插件的Web项目 
mvn -Dwtpversion=1.0 eclipse:clean          清除Eclipse项目的配置信息(Web项目) 
mvn eclipse:eclipse                         将项目转化为Eclipse项目

在应用程序用使用多个存储库 
<repositories>    
    <repository>      
        <id>Ibiblio</id>      
        <name>Ibiblio</name>      
        <url>http://www.ibiblio.org/maven/</url>    
    </repository>    
    <repository>      
        <id>PlanetMirror</id>      
        <name>Planet Mirror</name>      
        <url>http://public.planetmirror.com/pub/maven/</url>    
    </repository>  
</repositories>


mvn deploy:deploy-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DrepositoryId=maven-repository-inner -Durl=ftp://xxxxxxx/opt/maven/repository/


发布第三方Jar到本地库中:

mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar


-DdownloadSources=true

-DdownloadJavadocs=true

mvn -e              显示详细错误 信息. 
mvn validate        验证工程是否正确,所有需要的资源是否可用。 
mvn test-compile    编译项目测试代码。 。 
mvn integration-test     在集成测试可以运行的环境中处理和发布包。 
mvn verify               运行任何检查,验证包是否有效且达到质量标准。     
mvn generate-sources     产生应用需要的任何额外的源代码,如xdoclet。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lifxue/archive/2009/10/14/4662902.aspx

常用命令: 
mvn -v 显示版本 
mvn help:describe -Dplugin=help 使用 help 插件的  describe 目标来输出 Maven Help 插件的信息。 
mvn help:describe -Dplugin=help -Dfull 使用Help 插件输出完整的带有参数的目标列 
mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull 获取单个目标的信息,设置  mojo 参数和  plugin 参数。此命令列出了Compiler 插件的compile 目标的所有信息 
mvn help:describe -Dplugin=exec -Dfull 列出所有 Maven Exec 插件可用的目标 
mvn help:effective-pom 看这个“有效的 (effective)”POM,它暴露了 Maven的默认设置

mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook 创建Maven的普通java项目,在命令行使用Maven Archetype 插件 
mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序 
mvn dependency:resolve 打印出已解决依赖的列表 
mvn dependency:tree 打印整个依赖树

mvn install -X 想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行 
mvn install -Dmaven.test.skip=true 给任何目标添加maven.test.skip 属性就能跳过测试 
mvn install assembly:assembly 构建装配Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件

mvn jetty:run     调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用 
mvn compile       编译你的项目 
mvn clean install 删除再编译

mvn hibernate3:hbm2ddl 使用 Hibernate3 插件构造数据库

posted @ 2012-12-07 16:19  xxxyyylll  阅读(595)  评论(0)    收藏  举报