Java 项目管理工具Maven

来源:互联网 发布:传奇 交易 数据库 编辑:程序博客网 时间:2024/05/03 07:17


Maven的安装 

Maven是项目管理工具,具有平台无关的特性



登录maven.apache.org/download.cgi 下载Maven。

若想与eclipse结合进行开发 需要下载eclipse的插件m2eclipse 

  Eclipse3.7以上的版本都可以通过Eclipse Marketplace安装.
  打开Marketplace,搜索Maven,找到Maven Integration for Eclipse进行安装

最新的插件地址:http://download.eclipse.org/technology/m2e/releases

文件目录结构 :
bin:保存Maven的可执行命令,其中mvn和mvn.bat就是执行Maven工具的命令。
boot:该目录只包含一个plexus-classworlds-x.x.x.jar,是类加载器框架,与默认的Java类加载器相比,它提供了更丰富的语法以方便配置,Maven使用该框架自己的类库,通常无须理会该文件。
conf:配置文件的目录,包含settings.xml,用于设置Maven的全局行为,通常建议将该文件放在~/.m2/目录下(~表示用户目录),这样可以只设置当前用户的Maven行为。
lib:该目录包含了所有的Maven运行时所需要的类库,Maven是分模块开发的,此外,还包含Maven所依赖的第三方类库。






运行时环境变量需要:
JAVA_HOME:jdk安装路径

M2_HOME:Maven的安装路径(将下载的压缩包解压到D盘或者别的磁盘,此路径为D:\Maven)如不想在每次执行bin下的执行命令需要输入路径时需配置此变量。若路径短,则可省去,并非必要。


经过上面的步骤,(conf目录下的setting.xml没有默认的设置,所以我们还得先去设置一下配置,设置指南如下),之后我们可以启动命令行窗口 输入mvn help:system命令

Maven 设置指南

首先设置的时候有两种方式

全局:以conf目录下的setting.xml为准

当前用户.  以用户目录下的 User/用户名/m2/目录下的setting.xml文件进行设置

两方式并存的情况,当然是用户模式优先

下面讲解各参数 :

localRepository:设置本地资源库的路径,如果用户不设置该参数,Maven本地资源库默认保存在用户目录下的m2/repository路径下.

interactiveMode:设置Maven是否处于交互模式。如果设为是,每当Maven需要用户输入时,Maven都会提示用户输入。但如果将该参数设为false,Maven将不会提示用户输入,智能使用默认值。

offline:如果设置为false,每当Maven找不到插件、依赖库时,Maven总会尝试从网络下载。

proxies:该参数用于为Maven设置代理服务器。该参数可包含多个proxy,Maven可通过代理去访问网络。


配置完成就可以输入mvn help:system了(这里注意如果没有配置M2Home环境变量就要输入mvn的全路径了)

如果看到maven输出System Properties 和Environment Variables两类信息即表明Maven安装 成功


如上图所示:


Maven插件是一个非常重要的概念,从某种程序上讲Maven是一个空的容器,所有的功能来源于它无所不能的插件。当开发者使用mvn install命令时,Maven会自动从远程资源库下载大部分核心Maven插件。


使用Maven创建项目

http://maven.apache.org/plugins/index.html
可以去上面这个网址去查看Maven支持的各种插件

创建项目需要archetype插件,点击该链接可以看到使用说明


create:已经过时的api了

generate:生成一个Maven项目使用一个指定的原型

create-from-project:用一个已存在的项目创建Maven项目

crawl:从仓库中搜索原型

下面我们用Maven命令来创建一个项目

命令格式如下:

mvn <plugin-prefix>:<goal> -D<属性名>=<属性值>

然后我们用下面这个命令来创建一个MavenTest项目

mvn archetype:generate -DinteractiveMode=false -DgroupId=com.example -DartifactId=MavenTest -Dpackage=com.example.Test

该项目生成在用户目录下



pom.xml类似于Ant的build.xml文件。包含了基本的配置信息

<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.example</groupId>  <artifactId>MavenTest</artifactId>  <packaging>jar</packaging>  <version>1.0-SNAPSHOT</version>  <name>MavenTest</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>

pom文件称为项目对象模型(project object model)描述文件,Maven使用被称为对象模型的方式来管理项目。


使用Mvn命令编译一个项目

在pom.xml所在路径输入,mvn compile.

mvn会去下载compile相关插件


等待编译完成后,使用Maven的exec插件来执行Java类.

命令如下 mvn exec:java -Dexec.mainClass="com.example.Test.App"


可以看到成功运行并输出hello world

Maven的核心概念

maven的核心概念是约定优于配置

约定主要有如下几条:

  • 源代码位于应该${basedir}/src/main/java路径。
  • 资源文件应该位于${basedir}/src/main/resoures路径下。
  • 测试代码位于${basedir}/src/test下。
  • 编译生成的class文件位于${basedir}/target/classes下
  • 项目生成一个jar文件,并将jar包放在${basedir}/target
Maven的生命周期

Maven包含三个基本生命周期。

clean生命周期

default生命周期

site生命周期


cleam生命周期又有三个核心阶段

pre-clean 预清理阶段

clean 执行清理

post-clean 最后清理

我们可以执行mvn post-clean命令来清理生成的编译文件

清理前


清理后


默认的生命周期包含如下核心阶段

compile:编译项目

test:单元项目

package:项目打包

install:安装到本地仓库

deploy:部署到远程仓库

site 生命周期包含下面四个阶段

pre-site:生成站点之前做验证。

site:生成站点

post-site:生成站点之后做验证

sit-deploy:发布站点到远程服务器

另提一句,下了这么文件位置在哪?在用户目录下的.m2文件夹下面。是默认隐藏的。不过大小还可以,执行了那么多命令不过才40Mb左右大小

执行了部署站点之后,会在target文件夹下多一个site目录点开之后就是部署的站点了


Maven的坐标

groupId:开发者的域名

artifactId:指定项目名

packaging:指定项目打包的类型

version:指定项目的版本

Maven的资源库

本地资源库:就是刚才说的.m2目录下

远程资源库:远程资源库通常由公司或团队进行集中维护

中央资源库:这个是由Maven官方维护。就是我们下载插件的地方

当我们开始使用一个插件的时候会按上面的这个顺序进行搜索。

使用Maven创建一个Web项目

在命令行中输入:
mvn archetype:generate -DinteractiveMode=false -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.smart -DartifactId=smart-demo -Dversion=1.0
-DarchetypeArtifactId=maven-archetype-webapp这行声明了这是一个web项目




然后会生成如上一个项目


为上面的项目增加strust2支持

在dependecies标签下增加dependecy。maven会自动管理依赖传递,也就是说开发者只管引用想用的那个包即可,不用管理所依赖的子包。

<dependency> <groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.16.3</version></dependency> 

最后写一个pom.xml的元素。引用自http://nomandia.iteye.com/blog/380010

parent: 

给出父项目的位置,如果存在上一级父项目的话。 

如果没有特别指出的话,值就是父项目对于当前项目而言。 

位置是一个 as a group ID, artifact ID 和version元素的组合。 

 

modelVersion: 

描述这个POM文件遵从哪个版本的项目描述符。 

 

groupId: 

针对一个项目的普遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分(比如:org.apache.maven) 

 

artifactId

在给定groupID 的group里面为artifact 指定的标识符是唯一的 artifact 代表的是被制作或者被一个project应用的组件。

对于Maven项目的artifact 的例子包括:一些JARs, 原代码以及二进制的发布以及WARs.。

 

packaging:

这个项目生产出来的artifact 类型,举个例子 jar war  pom Plugins 能够创建他们自己的包,包括包的类型,所以这个列表不可能包含所有可能的类型。

 

name:

当前项目的全称。

 

version:

当前项目产生的artifact的当前版本。

 

description

当前项目的一个细节描述,当需要描述这个项目的时候被Maven所用,比如在web 站点中。 

这个元素能够被指定为CDATA 类型,允许在描述器中 HTML的tags, 并不鼓励用空白文本来表示。 

如果你需要去修改生成的web 站点的索引页,你能够用你自己的索引来代替自动生成的文本。

 

url

当前项目的主页的URL。

 

prerequisites:

描述当前项目的编译环境的先决条件。

 

issueManagement:

当前项目的发布管理信息。

 

ciManagement :

当前项目的连续集成信息。

 

inceptionYear

当前项目开始的年份, 用4位数字描述。 涉及到介绍情况时用作提供版权信息。

 

mailingLists

包含的信息包括邮件列表。

 

developers:

描述当前的项目的开发人员的信息。

 

contributors:

描述对当前项目有贡献的人员的信息,不特指开发人员。

 

licenses

这个元素描述了当前项目的所有的许可文件。每一个许可文件用一个许可元素来描述,然后描述额外的元素。 

通常只列出适用于这个项目的许可文件以及适用于 依赖的非licenses.如果多个licenses都列出来了,那么假设这个用户选择其中的所需的,而不是接受所有的许可文件。 

 

scm:

指定当前项目中的版本控制工具,比如CVS, Subversion, 等等。 

 

organization

这个元素描述这个项目所属组织的各种属性的描述。这些属性应用于文档创建的时候 (版权通知和链接)。

 

build:

创建项目时必须的信息。

 

profiles:

本地项目编译档案文件时的列表,被激活时会修改build的过程。

 

modules:

模块 (有时被叫做子项目)作为当前项目的一部分。每一个被列出来的子模块都指向包含这个模块的目录文件的相对路径。

 

repositories

发现依赖和扩展的远程资源库。

 

pluginRepositories:

发现plugins 的远程资源库的列表,主要是为了编译和报告。

 

dependencies:

这个元素描述了所有与当前项目相关的依赖。

这些依赖被用作创建一个编译时的路径。 

他们被自动的从资源库中下在下来依据当前项目的定义。如需更多信息,参看 the dependency mechanism reports     Deprecated.禁止适用。

现在的版本中被 Maven所忽略掉。 

reporting:

这个元素包括报告的plugins 的指定,用作Maven生成站点的自动生成报告。这些报告将会运行当用户执行mvn site. 所有的报告将会包括在浏览器的导航栏中。 

 

dependencyManagement:

缺省的依赖信息将会从这个元素中继承。这些依赖在这一部分中被不立刻被解决的。 

当一个源于这个POM的元素描述了一个依赖根据匹配的 groupId 和 artifactId,这个部分的版本和其他值用作那些还没有指定的依赖。 

 

distributionManagement:

对于一个项目分配的信息允许对于远程web服务器和资源库的site和artifacts配置。 

 

properties

属性可以作为POM的自始自终的替换物,如果可行的话可以用作resources 的过滤器,格式是<name>value</name>。










0 0
原创粉丝点击