【Maven权威指南】Maven实战篇:一个简单的Maven项目

一、用Maven Archetype插件创建简单项目。

1>在终端(* UNIX或Mac)或命令提示符(Windows)中,浏览到要创建 Java 项目的文件夹。键入以下命令:

mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

这告诉 Maven 来从 maven-archetype-quickstart 模板创建 Java 项目。如果忽视 archetypeArtifactId 选项,一个巨大的 Maven 模板列表将列出。

例如,这里的工作目录是:C:\worksp,执行命令过程时间可能比较久,看个人的网络状况。
C:\worksp>mvn archetype:generate -DgroupId=com.yiibai -DartifactId=NumberGenerat
or -DarchetypeArtifactId=maven -archetype-quickstart -DinteractiveMode=false
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --
-
[INFO] Generating project in Batch mode
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
 maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: basedir, Value: C:\worksp
[INFO] Parameter: package, Value: com.yiibai
[INFO] Parameter: groupId, Value: com.yiibai
[INFO] Parameter: artifactId, Value: NumberGenerator
[INFO] Parameter: packageName, Value: com.yiibai
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\worksp\NumberGenerato
r
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.166 s
[INFO] Finished at: 2015-10-27T11:03:48+08:00
[INFO] Final Memory: 17M/114M
[INFO] ------------------------------------------------------------------------

在上述情况下,一个新的Java项目命名 “NumberGenerator”, 而整个项目的目录结构会自动创建。

2>Maven的目录结构

使用 mvn archetype:generate + maven-archetype-quickstart 模板, 以下项目的目录结构被创建。

NumberGenerator
   |-src
   |---main
   |-----java
   |-------com
   |---------yiibai   
   |-----------App.java
   |---test|-----java
   |-------com
   |---------yiibai
   |-----------AppTest.java
   |-pom.xml

这个生成的目录遵循Maven标准目录布局。

a>artifactId匹配的目录----NumberGenerator。这是项目的基本目录,即项目名。

b>每个项目在文件pom.xml里有它的项目对象模型(POM)。这个文件描述了这个项目,配置了插件,声明了依赖。

c>项目源码和资源文件被放在src/main目录下,Java类放在src/main/java下面,而classpath资源文件放在src/main/resources下面。

d>测试文件放在src/test。其中src/test/java存放Java测试类,目录src/test/resources下存放测试的classpath资源文件。

二、构建Maven项目

遵循Maven插件创建了一个项目,希望构建并打包这个应用,在包含pom.xml的目录下运行mvn install

这样就创建、编译、测试、打包,并且安装了最简单的Maven项目。在命令行运行它来验证这个程序是否工作。

在pom.xml目录下运行

java -cp target/simple-1.0-SNAPSHOT.jar org.sonatype.mavenbook.App

三、简单的项目对象模型

当Maven运行时向项目对象模型(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>com.companyname.bank</groupId>
  <artifactId>consumerBanking</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>consumerBanking</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>
1>这个pom.xml文件时面对Maven项目中最基础的POM,最开始的几个元素-groupId,artifactId,packaging,version-是Maven的坐标,它们唯一标识了一个项目。name和url是POM提供的描述性元素,它们提供可阅读的名字,项目关联的web站点。最后,dependencies元素定义了一个单独的测试范围依赖,依赖于称为JUnit的单元测试框架。

2>当Maven运行时,采用许多的全局默认值。想看真正运行时的“有效的”POM,在simple项目的基础目录下跑下面的命令。

mvn help:effective-pom

四、核心概念

( 1 )Maven插件和目标

( 2 )Maven生命周期

1>一个阶段是在被Maven称为“构建生命周期”中的一个步骤。生命周期是包含在一个项目构建中的一系列有序的阶段。Maven可以支持许多不同的生命周期,但是最常用的生命周期是默认的Maven生命周期,这个生命周期中一开始的一个阶段是验证项目的基本完整性,最后一个阶段是把一个项目发布成产品。

2>生命周期的阶段被特地留的含糊,单独的定义为验证、测试、或者发布,而他们对不同的项目意味着不同的事情。

3>插件目标可以附着在生命周期阶段上。随着生命周期的阶段移动,他会执行附着在特定阶段上的目标。每个阶段可能绑定了零个或多个目标。

( 3 )Maven坐标

1>Maven坐标通常用冒号作为分隔符,格式为:groupId:artifactId:packaging:version

groupId 团体,公司,小组,组织,项目,或者其它团体。

artifactId 在groupId下的表示一个单独项目的唯一标识符

version 一个项目的特定版本。正在开发的项目可以用一个特殊的标识,这种标识给版本加上一个“SNAPSHOT”的标记。

2>项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部分。之前的三个标识使项目独一无二。

packaging 项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。

( 4 )Maven仓库

1>初始的Maven下载包相当的小,其中的一个原因是事实上这个初始的Maven不包括很多插件。它只包含几近赤裸的最少值,而在需要的时候再从远程仓库去取。Maven自带了一个用来下载Maven核心插件和依赖的远程仓库地址(http://repo1.maven.org/maven2)。

2>Maven仓库的标准是按照下面的目录格式来存储构件,相对于仓库的根目录:

/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>

3>Maven从远程仓库下载构件和插件到本机上,存储在你的本地Maven仓库里。一旦Maven已经从远程仓库下载了一个构件,它将永远不需要再下载一次,因为maven会首先在本地仓库查找插件,然后才是其它地方。

注:install阶段执行一个目标,把你项目的构件安装到你的本地仓库。

Maven仓库既是一个从远程仓库下载的构件的缓存,也允许你的项目相互依赖。

( 5 )Maven依赖管理

1>一个复杂的项目将会包含很多依赖,也有可能包含依赖于其它构件的依赖。这是Maven最强大的特征之一,它支持传递性依赖。

即:假如你的项目依赖于一个库,而这个库又依赖于五个或十个其它的库,你不必找出所有的依赖写入pom.xml,你只需加入你直接依赖的那些库,Maven会隐式的把这些库间接依赖的库加入到你的项目。而且会处理这些依赖中的冲突,同时能让你自定义默认行为,或者排除一些特定的传递性依赖。

2>当项目的构件安装到本地仓库时,在jar文件同一目录下,Maven发布了一个稍微修改过的pom.xml的版本。记录了项目有哪些依赖,以便实现传递性依赖。

3>在POM文件中可能声明了对其它构件的依赖。这些依赖的依赖叫做传递性依赖。

Maven仓库不仅仅存储二进制文件,也存储了这些构件的元数据,才使传递性依赖成为可能。

( 6 )站点生成和报告

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

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

注:在学习过程中,发现版本更新差异,所以可以结合http://www.yiibai.com/maven/create-a-java-project-with-maven.html学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值