Maven实战

项目创建过程:创建、编译、测试、打包、安装
概念:生命周期(build lifecycle)、Maven 仓库(repositories)、依赖管理(dependency management)、项目对象模型(Project Object Model)

1、创建一个简单的项目

mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook
(1)Maven Archtype插件创建了一个与artifactId匹配的目录——simple。
(2)每个项目在文件pom.xml里有它的项目对象模型 (POM)。这个文件描述了这个项目,配置了插件,声明了依赖。
(3)在一个Java项目中,Java类放在src/main/java下面,而classpath资源文件放在src/main/
resources下面。
(4)我们项目的测试用例放在src/test下。在这个目录下面,src/test/java存放像使用JUnit或者TestNG这样的Java测试类。目录src/test/resources下存放测试classpath资源文件。

2、构建一个简单的项目
使用Maven Archetype插件创建了一个项目,你会希望构建并打包这个应用。想要构建打包这个应用,在包含pom.xml的目录
下运行mvn install或mvn package
[INFO] Scanning for projects...
[INFO]                                                                        
[INFO] ------------------------------------------------------------------------
[INFO] Building helloworld 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
[INFO] Using ‘UTF-8‘ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /root/.m2/repository/org/apache/maven/helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ helloworld ---
[INFO] Using ‘UTF-8‘ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /root/.m2/repository/org/apache/maven/helloworld/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ helloworld ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ helloworld ---
[INFO] Surefire report directory: /root/.m2/repository/org/apache/maven/helloworld/target/surefire-reports

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.mycompany.helloworld.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ helloworld ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ helloworld ---
[INFO] Installing /root/.m2/repository/org/apache/maven/helloworld/target/helloworld-1.0-SNAPSHOT.jar to /root/.m2/repository/com/mycompany/helloworld/helloworld/1.0-SNAPSHOT/helloworld-1.0-SNAPSHOT.jar
[INFO] Installing /root/.m2/repository/org/apache/maven/helloworld/pom.xml to /root/.m2/repository/com/mycompany/helloworld/helloworld/1.0-SNAPSHOT/helloworld-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.931 s
[INFO] Finished at: 2015-06-13T18:10:17+08:00
[INFO] Final Memory: 9M/21M
[INFO] ------------------------------------------------------------------------
3、简单的项目对象模型 (Project Object Model)
坐标(coordinates):groupId,artifactId, packaging, version
Maven插件和目标 (Plugins and Goals):archetype:create;一个Maven插件是一个单个或者多个目标的集合。
Maven生命周期 (Lifecycle):Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy.
mvn install/package 生命周期:
mvn resources:resources \         对应目录src/main/resources
    compiler:compile \            对应目录src/main/java
    resources:testResources \    对应目录src/test/resources
    compiler:testCompile \        对应目录src/test/java
    surefire:test \        运行所有的测试并且创建那些捕捉详细测试结果的输出文件
    jar:jar   Jar插件的jar目标绑定到了package 阶段。这个目标把输出目录打包成JAR文件

Maven仓库(Repositories):  http://repo1.maven.org/maven2
/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
Maven依赖管理 (Dependency Management):在Maven中一个依赖不仅仅是一个JAR。它是一个POM文件,这个POM可能也声明了对其它构件的依赖,叫做传递性依赖
站点生成和报告 (Site Generation and Reporting):在项目目录下运行mvn site;
Site生命周期只关心处理在src/site目录下的site内容,还有生成报告。在这个命令运行过之后,你将会在target/site目录下看到一个项目web站点,即target/site/index.html

3、定制项目

pom.xml添加定制信息,如组织,法律和开发人员信息
......
<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>[email protected]</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>
......
pom.xml添加新的依赖
<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>

时间: 2025-01-16 02:57:51

Maven实战的相关文章

[Maven实战](9)传递性依赖

了解Spring的朋友都知道,创建一个Spring Framework项目都需要依赖什么样的Jar包.如果不使用Maven,那么在项目中就需要手动下载相关的依赖.由于Spring Framework又会依赖与其他开源类库,因此实际中往往会下载Spring Framework的jar包,还的下载所有它依赖的其他jar包.这么做往往就引入了很多不必要的依赖.另一种做法是只下载Spring Framework的jar包,不包含其他的相关依赖,到实际使用的时候,再根据报错信息,或者查询相关文档,加入需要

Maven实战05_背景案例学Maven模块化

1:简单的账户注册服务 注册互联网账户是日常生活中再熟悉不过的一件事,作为一个用户,注册账户的时候需要进行以下操作,提供以下信息. 提供一个未被使用的帐号ID 提供一个未被使用的email地址. 提供一个任意的显示名称 设置安全密码,并重复输入以确认 输入验证码 前往邮箱查收激活链接并单击激活帐号 登录确认激活状态 帐号的ID和密码唯一的标识某个账户,显示名称用来在页面上显示,方便浏览.注册时需要用户输入两次密码,以确保没有输错.系统则负责检查ID和email的唯一性,验证两次输入的密码是否一致

Maven实战之初识MavenMaven的简单介绍

Maven实战之初识MavenMaven的简单介绍 作用:Maven主要用于项目的构建,管理项目的依赖以及项目的信息(自动化构建.编译.单元测试.生成文档.打包.部署) 优势:相对于Ant.Make等,Maven抽象构建过程,提供构建任务的实现,自动化构建,有效地提高了开发效率,使开发人员可以集中精力在主要的开发任务上.而且Maven是跨平台工具,意味着在主流操作系统中,Maven都提供了对应的技术支持 使用注意:需要在JDK1.4及以上版本使用 Maven的安装下载地址:Maven下载地址,选

Maven实战:Maven生命周期

前言 之前有写过一篇文章Maven实战,介绍了Maven的一些基本概念,以及对于一个初学者而言的Maven基础知识,当时在我看来掌握了这些基本是够用的. 随着工作的深入,越来越感觉对于Maven的理解不够,很多时候使用Maven出了问题都无法很快地解决,因此打算深入地从搭建Maven工程开始学习一下Maven,这篇文章就将自己的学习历程记录下来和网友朋友们分享. 从搭建最简单的Maven项目开始 LZ使用的是MyEclipse,那么就是用MyEclipse搭建一个简单的Maven项目.第一步,n

Maven实战(四)——基于Maven的持续集成实践

Martin的<持续集成> 相信非常多读者和我一样.最早接触到持续集成的概念是来自Martin的著名文章<持续集成>.该文最早公布于2000年9月,之后在2006年进行了一次修订.它清晰地解释了持续集成的概念.并总结了10条实践,它们分别为: 仅仅维护一个源代码仓库 自己主动化构建 让构建自行測试 每人每天向主干提交代码 每次提交都应在持续集成机器上构建主干 保持高速的构建 在模拟生产环境中測试 让每一个人都能轻易获得最新的可运行文件 每一个人都能看到进度 自己主动化部署 原始文章

maven实战系列

Maven实战(一)安装和配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven实战(六)依赖   MyEclipse6.5 在线安装maven插件的地址: http://repository.sonatype.org/content/sites/forge-sites/m2e/0.10.0/S/20100209-0800/

Maven实战(一)搭建Nexus伺服器

在搭建伺服器之前我们先要说明一下为什么要搭建伺服器以及伺服器的作用是什么.在进行分布式开发中maven工具的使用能够极大的提高我们管理项目颗粒的效率,既然是管理颗粒那总得有地方存放才行,而伺服器扮演的就是这么一个角色,它相当于一个中型仓库,上联Maven的中央仓库,下联我们的本地仓库,当我们在本地编程的时候,如果需要引用jar包,maven首先会在本地仓库进行查找,如果在本地仓库找不到则会去伺服器上进行寻找,如果在伺服器上仍然找不到则会通过互联网从maven中央仓库进行下载.它的结构图如下: 大

《Maven实战》笔记-1-Maven使用入门

<Maven实战>徐晓斌 2011 机械工业出版社 一.介绍 1.名词 artifact:插件 极限编程XP 2.构建脚本: maven--pom.xml(Project Object Model) ant--build.xml 其基本结构是目标(target).依赖(depends),以及实现目标的任务. 3.maven vs ant Ant是过程式的,开发者显示指定每一个目标,以及完成该目标所需要执行的任务. Maven是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现. 4.相

[Maven实战](8)依赖配置与依赖范围

 1. 依赖配置 依赖基本配置: <project> <dependencies> <dependency> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <exclusions> <exclusion> <groupId>...</groupId>

Maven实战(六)依赖

我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: <project> ... <dependencies> <dependency> <groupId>group-a</groupId> <artifactId>artifact-a</artifactId> <version>1.0</version> <exc