Maven学习笔记(一)

    首先,需要了解Maven的基本概念,参考 《Maven权威指南》做一些了解。

    Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

    1.下载和安装Maven,从Maven的网站下载Maven,下载到本地后配置环境变量,并修改Maven目录下conf文件夹下的setting.xml,修改xml文件下的"localReponsitory"标签,修改依赖文件的下载目录(如果是Linux环境下,还要注意修改该目录的权限),之后运行mvn -version,如果显示版本信息,则说明安装成功。Windows环境下,运行mvn -v能看到当前Maven版本信息,就说明你已经安装成功了。
 
    2.在不使用Eclipse情况下,如何使用Maven来构建一个简单的项目呢,可以尝试在命令行下运行下面的命令:
mvn archetype:create -DgroupId=com.mytest.test -DartifactId=simple -DpackageName=com.test

然后可以在所在目录下找到一个simple的文件夹,它就是Maven使用Maven Archetype插件来创建的一个简单的项目,这个生成的目录遵循Maven标准目录布局。

    3.打包项目:
mvn package


  4.Maven生命周期
resources:resources
//Resource插件的resource目标绑定到了resources阶段。这个目标复制src/main/resources下的所有资源和其他任何配置的资源目录,到输出目录


compiler:compile
//Compiler插件的compile目标绑定到了compile阶段。这个目标变异src/main/java下所有源代码和其他任何配置的资源目录,到输出目录


rescources:testResources
//Ressources插件的testResources目标绑定到了了test-resources 阶段。这个目标复制src/test/resources下的所有资源和其它任何的配置的测试资源目录,到测试输出目录

compiler:testCompile
//Compiler插件的testCompile目标绑定到了test-compile 阶段。这个目标编译src/test/java下的测试用例和其它任何的配置的测试资源目录,到测试输出目录

surefire:test
//Surefire插件的test目标绑定到了test 阶段。这个目标运行所有的测试并且创建那些捕捉详细测试结果的输出文件。默认情况下,如果有测试失败,这个目标会终止

jar:jar
//Jar插件的jar目标绑定到了package 阶段。这个目标把输出目录打包成JAR文件


    5.maven坐标

    Maven坐标定义了一组标识,它们可以用来唯一标识一个项目,一个依赖,或者MavenPOM里的一个插件。groupId, artifactId, version和packaging,这些组合的标识符拼成了一个项目的坐标,像这样的格式: groupId:artifactId:packaging:version。如下POM
  <groupId>Web-app</groupId><!-- 团体标识 -->
  <artifactId>Web-app</artifactId><!-- 在groupId下标表示一个单独项目的唯一标识 -->
  <version>0.0.1-SNAPSHOT</version><!-- 一个项目的特定版本 -->
  <packaging>war</packaging><!-- 项目的类型 -->

它的坐标可以表示为 Web-app:Web-app:war:0.0.1-SNAPSHOT

    6.Maven仓库(Repositories)

    当触发resources:resource目标的时候,它首先会做的事情是去下载最新版本的Resources插件。在Maven中,构件和插件是在它们被需要的时候从远程的仓库取来的。

    Maven仓库是通过结构来定义的,一个Maven仓库是项目构件的一个集合,这些构件存储在一个目录结构下面,它们的格式能很容易的被Maven所理解。

    在Unix系统上,你的本地仓库默认在~/.m2/repository。可以修改Maven目录conf下的settings.xml文件。

    如果你运行mvn install命令,Maven会把我们项目的构件安装到本地仓库。如果你开发了两个项目——项目A和项目B——项目B依赖于项目A产生的构件。当构建项目B的时候,Maven会从本地仓库取得项目A的构件。Maven仓库既是一个从远程仓库下载的构件的缓存,也允许你的项目相互依赖。

    7.Maven依赖管理 (Dependency Management)

    Maven最强大的特征之一,是它支持了传递性依赖(transitive dependencies)

    假如你的项目依赖于一个库,而这个库又依赖于五个或者十个其它的库(就像Spring或者Hibernate那样)。你不必找出所有这些依赖然后把它们写在你的pom.xml里,你只需要加上你直接依赖的那些库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中。Maven也会处理这些依赖中的冲突,同时能让你自定义默认行为,或者排除一些特定的传递性依赖。

   Maven也提供了不同的依赖范围(dependency scope)

    当为项目创建JAR文件的时候,它的依赖不会被捆绑在生成的构件中,他们只是用来编译。当用Maven来创建WAR或者EAR,你可以配置Maven让它在生成的构件中捆绑依赖,你也可以配置Maven,使用provided( <scope>provided</scope>)范围,让它排除WAR文件中特定的依赖。
<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>

    开发web应用的时候provided范围变得十分有用,你需要通过Servlet API来编译你的代码,但是你不希望Servlet API的JAR文件包含在你web应用的WEB-INF/lib目录中。

    7.站点生成和报告 (Site Generation and Reporting)

    另外一个Maven的重要特征是,它能生成文档和报告。在项目的目录下,运行以下命令:
mvn site

这将会运行site生命周期阶段,Site生命周期只关心处理在src/site目录下的site内容,还有生成报告。在这个命令运行过之后,你将会在target/site目录下看到一个项目web站点。

猜你喜欢

转载自ryanspace.iteye.com/blog/1864997
今日推荐