Maven学习总结

       最近我学习了一下Maven工具,下面是我对Maven的理解,有理解不对的地方也请批评指正。
1.Maven是什么?
              首先Maven是一个项目管理工具,基于项目对象模型(POM),它主张遵循"约定优于配置"这个思想。 Maven 通过给项目提供明智的默认行为来融合这个思想。 在没有自定义的情况下,源代码假定在  {basedir}/src/main/java,资源文件假定是在{basedir}/src/main/resources 。测试代码假定是在  {basedir}/src/test 。虽然,一开始觉得Maven这么做有些霸道,但是只要我们遵循这些约定,Maven 可以使我们的项目运行更快,并且能够很方便的帮你管理项目报告,生成站点,管理JAR文件。
            Maven 的核心其实不做什么实际的事情,它就是一个管理者,负责解析一些 XML 文档,管理生命周期与插件。因此,Maven 被设计成将主要的职责委派给一组 Maven插件,这些插件影响 Maven生命周期,执行对目标的访问。也就是说,Maven大部分的智能是由插件实现的,而插件从 Maven 仓库获得,这些Maven插件是一个单个或多个目标的集合。
例如:Maven Archetype 插件的一个命令mvn archetype:create  其中archetype:create是一个Maven目标,archetype是一个插件标识,create是目标标识。
2.本地仓库(localRepository)
        第一次运行时maven将从远程仓库下载构件和插件到你本机上,存储在你的本地Maven仓库里。一旦 Maven 已经从远程仓库下载了一个构件,它将永远不需要再下载一次,因为 maven会首先在本地仓库查找插件,然后才是其它地方。
       在Maven的安装目录下,conf/ 目录包含了一个全局的 settings.xml文件,该文件用来自定义你机器上 Maven 的一些行为。该文件包含了用户相关的认证,仓库和其它信息的配置,用来自定义 Maven 的行为。Maven默认的本地的仓库目录是~/.m2/repository/,当你从远程 Maven 仓库下载依赖的时候,Maven 在你本地仓库存储了这个依赖的一个副本。当然你也可以更改本地仓库的位置,只要修改settings.xml文件中的localRepository属性就可以,如下代码所示: 修改后你的本地仓库地址就是D:/maven-2.1.0/repo
D:/maven-2.1.0/repo   
3.Pom文件
        Maven中最基础的是Pom.xml文件,该文件中定义了项目的坐标,以及项目所需依赖关系和插件行为。一个Maven坐标可以用来唯一标识一个项目,一个依赖,或者Maven POM 里的一个插件,坐标由groupId, artifactId, version 和 packaging组成,结构如下所示:
       groupId:artifactId:packaging:version(mavenbook:my-app:jar:1.0-SNAPSHOT.)
        当我们新建一个工程后,pom文件会自动产生项目坐标信息,例如通过命令行建立一个web工程(其中‘\’为续行符):
mvn archetype:create \-DgroupId=my.test.maven
\-DartifactId=demo.web
\-DpackageName=my.test
\-DarchetypeArtifactId=maven-archetype-webapp
       这个web工程的坐标信息如下:
my.test.maven
demo.web
war
1.0-SNAPSHOT
pom文件中通过dependency属性定义依赖,plugin属性定义插件。
     依赖:
      log4j
      log4j
      1.2.14
      
      插件:
   
        org.mortbay.jetty
        maven-jetty-plugin
        6.1.9
    
4.经常使用的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. 清除产生的项目:mvn clean
9. 生成eclipse项目:mvn eclipse:eclipse
10. 编译测试的内容:mvn test-compile
11. 只打jar包: mvn jar:jar
12. 当开发一个带有很多失败单元测试的系统
mvn test -Dmaven.test.failure.ignore=true
13. 想要整个的跳过测试
mvn install -Dmaven.test.skip=true
maven打包跳过测试:
mvn package -Dmaven.test.skip=true

5、 Assembly插件 maven assembly plugin

使用 Maven Exec 插件运行了 Simple Weather 应用程序。虽然 Maven Exec 能运行程序并且产生输出,你不能就把 Maven 当成是你程序运行的容器。 如果你把这个命令行程序分发给其他人,你大概就需要分发一个 JAR 或者一个 ZIP 存档文件或者 TAR 压缩过的 GZIP 文件。下面的小节介绍了使用 Maven Assembly 插件的预定义装配描述符生成一个可分发的 JAR 文件的过程,该文件包含了项目的二进制文件和所有的依赖。
Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件。 你可以使用 Maven Assembly 插件以你希望的任何形式来装配输出,只需定义一个自定义的装配描述符。 后面的章节我们会说明如何创建一个自定义装配描述符,为 Simple Weather 应用程序生成一个更复杂的存档文件。 本章我们将会使用预定义的 jar-with-dependencies 格式。 要配置 Maven Assembly 插件, 我们需要在 pom.xml 中的 build 配置中添加如下的 plugin 配置。
Pom.xml配置如下:
<build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
mvn assembly:assembly 
在 target/simple-weather-1.0-jar-with-dependencies.jar 装配好之后, 我们可以在命令行重新运行 Main 类。在你项目的基础目录下运行以下命令:
java -cp simple-weather-1.0-jar-with-dependencies.jar org.sonatype.mavenbook.weather.Main 10002
这样我的依赖包里的class文件也一起打进了这个包里了!
6、
使用maven命令:mvn dependency:sources 下载依赖包的源代码。
【常用命令】
mvn archetype:generate //创建 Maven 项目
mvn compile //编译源代码
mvn test-compile //编译测试代码
mvn test //运行应用程序中的单元测试
mvn site //生成项目相关信息的网站
mvn clean //清除目标目录中的生成结果
mvn package //依据项目生成 jar 文件
mvn install //在本地 Repository 中安装 jar
mvn eclipse:eclipse //生成 Eclipse 项目文件
需要在eclipse中,配置环境变量M2_REPO,Window->Preferences->Java->Build Path->Classpath Variables
【生成项目】
JAVA项目 mvn archetype:create -DgroupId=net.welken -DartifactId=common
web 项目 mvn archetype:create -DgroupId=net.welken -DartifactId=web-app -DarchetypeArtifactId=maven-archetype-webapp
MAVEN2使用mvn install命令出现java.lang.OutOfMemoryError错误解决办法
命令行先执行:set MAVEN_OPTS=-Xms256m -Xmx256m,然后照常执行:mvn install.问题解决!
用maven编译源代码,且跳过测试,最后将编译好的工程放到本地仓库里面。此时引用此文件的工程只需要刷新一下,就可以得到最新的依赖来执行自己的文件了。
mvn clean install -Dmaven.test.skip -Pautoconf