随笔一记-Maven

一、Maven的基本概念

Maven(翻译为"专家", "内行")是跨平台的项目管理工具。主要服务于基于Java平台的项目构建, 依赖管理和项目信息管理

1.1、项目构建

项目构建过程包括【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤, 这六个步骤就是一个项目的完整构建过程, 理想的项目构建是高度自动化, 跨平台, 可重用的组件, 标准化的, 使用maven就可以帮我们完成上述所说的项目构建过程。

1.2、依赖管理

依赖指的是jar包之间的相互依赖, 比如我们搭建一个Struts2的开发框架时, 光光有struts2-core-2.3.16.3.jar这个jar包是不行的, struts2-core-2.3.16.3.jar还依赖其它的jar包, 依赖管理指的就是使用Maven来管理项目中使用到的jar包, Maven管理的方式就是“自动下载项目所需要的jar包, 统一管理jar包之间的依赖关系”。

1.3、使用Maven的好处

Maven中使用约定, 约定java源代码代码必须放在哪个目录下, 编译好的java代码又必须放到哪个目录下, 这些目录都有明确的约定。

Maven的每一个动作都拥有一个生命周期, 例如执行 mvn install 就可以自动执行编译, 测试, 打包等构建过程

只需要定义一个pom.xml,然后把源码放到默认的目录, Maven帮我们处理其他事情

使用Maven可以进行项目高度自动化构建, 依赖管理(这是使用Maven最大的好处), 仓库管理。

二、Maven下载

下载地址:https://maven.apache.org/download.cgi

下载完成后, 得到一个压缩包, 解压, 可以看到maven的组成目录

Maven目录分析

  • bin:含有mvn运行的脚本
  • boot:含有plexus-classworlds类加载器框架
  • conf:含有settings.xml配置文件
  • lib:含有Maven运行时所需要的java类库
  • LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍

三、Maven安装

2.1、首先要确保电脑上已经安装了JDK

(最好jdk 1.6+的版本),配置好JDK的环境变量,使用如下的两个命令检查检查JDK安装的情况

1 Echo %JAVA_HOME%
2 Java -version

2.2、对apache-maven-3.2.3-bin.zip进行解压缩

对apache-maven-3.2.3-bin.zip进行解压缩, (解压目录最好不要有中文)

2.3、设置系统环境变量:MAVEN_HOME

2.4、设置环境变量Path

将%MAVEN_HOME%\bin加入Path中,一定要注意要用分号;与其他值隔开

2.5、验证Maven安装是否成功

cmd窗口输入"mvn –v"命令 查看Maven的相关信息

2.6、设置MAVEN_OPTS环境变量(可选配置)

由于Maven命令实际上是执行了Java命令,所以可以通过JAVA命令参数的方式来设置MAVEN运行参数。MAVEN_OPTS环境变量正是用于此用途

MAVEN_OPTS = -Xms128m -Xmx512m,分别设置JVM的最小和最大内存

四、Maven的简单使用

4.1、Maven项目的目录约定

MavenProjectRoot(项目根目录)

|----src

|     |----main

|     |         |----java ——存放项目的.java文件

|     |         |----resources ——存放项目资源文件,如spring, hibernate配置文件

|     |----test

|     |         |----java ——存放所有测试.java文件,如JUnit测试类

|     |         |----resources ——存放项目资源文件,如spring, hibernate配置文件

|----target ——项目输出位置

|----pom.xml ----用于标识该项目是一个Maven项目

4.2、手动创建Maven项目,使用Maven编译

1、创建项目根文件夹,例如Maven01

2、在Maven01文件夹中创建“pom.xml”文件

pom.xml文件中的内容如下

 1 <?xml version="1.0" encoding="UTF-8"?>
 2  <project xmlns="http://maven.apache.org/POM/4.0.0"
 3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
 5  http://maven.apache.org/xsd/maven-4.0.0.xsd">
 6      <!--所有的Maven项目都必须配置这四个配置项-->
 7      <modelVersion>4.0.0</modelVersion>
 8      <!--groupId指的是项目名的项目组,默认就是包名-->
 9      <groupId>cn.gacl.maven.hello</groupId>
10      <!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"-->
11      <artifactId>hello-first</artifactId>
12      <!--version指的是版本,这里使用的是Maven的快照版本-->
13     <version>SNAPSHOT-0.0.1</version>
14 </project>

3.编写Java类文件

Maven项目规定,所有的*.java文件必须放在src目录下的main目录下的java目录中,在Maven01项目根目录中创建一个src目录,然后在src目录中创建main目录,在main目录中再创建java文件夹

在java文件夹下创建一个Hello.java文件

在Hello.java文件中编写如下代码:

1 public class Hello{
2     public static void main(String[] args){
3          System.out.println("Hello Maven");
4      }
5  }

4.使用Maven编译Hello.java

首先进入到项目根目录,然后使用命令”mvn compile”进行编译

使用Maven编译完成之后,在项目根目录下会生成一个target文件夹

打开target文件夹,可以看到里面有一个classes文件夹, classes文件夹存放的就是编译成功后生成的.class文件

5.使用"mvn clean"命令清除编译结果,也就是把编译生成的target文件夹删掉

4.3、Maven坐标主要组成

·       groupId:组织标识(包名)

·       artifactId:项目名称

·       version:项目的当前版本

·       packaging:项目的打包方式,最为常见的jar和war两种

4.4、依赖范围

依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

1.compile:默认编译依赖范围。对于编译,测试,运行三种classpath都有效

2.test:测试依赖范围。只对于测试classpath有效

3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api

4.runtime:运行时提供。例如:jdbc驱动

4.5、Maven仓库布局

根据Maven坐标定义每个构建在仓库中唯一存储路径,

大致为:groupId/artifactId/version/artifactId-version.packaging

4.6、仓库的分类

4.6.1、本地仓库

每个用户只有一个本地仓库,默认是在~/.m2/repository/,~代表的是用户目录

4.6.2、远程仓库

1、中央仓库:Maven默认的远程仓库,URL地址:http://search.maven.org/

2、私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

五、生命周期

5.1、何为生命周期?

Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤

5.2、Maven三大生命周期

Maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",这三套生命周期分别是:

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle 生成项目报告,站点,发布站点。

再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

clean生命周期每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:

pre-clean 执行一些需要在clean之前完成的工作

clean 移除所有上一次构建生成的文件

post-clean 执行一些需要在clean之后立刻完成的工作

"mvn
clean" 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,"mvn clean"等同于
mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么
pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。

Site生命周期pre-site 执行一些需要在生成站点文档之前完成的工作

site 生成项目的站点文档

post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy 将生成的站点文档部署到特定的服务器上

这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

Default生命周期Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:

validate

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 接受编译好的代码,打包成可发布的格式,如 JAR 。

pre-integration-test

integration-test

post-integration-test

verify

install 将包安装至本地仓库,以让其它项目依赖。

deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

六、Maven插件

1.Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。

2.每个插件都能实现多个功能,每个功能就是一个插件目标。

3.Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务,例如compile就是插件maven-compiler-plugin的一个插件目标

6.1、聚合配置代码

<modules>
      <module>模块一</module>
      <module>模块二</module>
      <module>模块三</module>
</modules>

6.2、继承配置代码

<parent>
         <groupId>me.gacl.maven</groupId>
         <artifactId>ParentProject</artifactId>
         <version>0.0.1-SNAPSHOT</version>
         <relativePath>../ParentProject/pom.xml</relativePath>
</parent>

6.3、继承代码中定义属性

访问属性的方式为${junit.version}

时间: 2024-07-28 14:49:55

随笔一记-Maven的相关文章

Maven学习随笔一——Maven安装报错处理(mvn -v, 提示不是内部命令的问题)

今天心血来潮学习maven,可是光安装就花了个把小时,好坑有木有! 安装过程可百度,各种经贴,不详. 控制台输入  mvn -v ,如果报错,很可能是你的java/maven的环境变量配置出了点问题: java_home.class_path.m2_home 后面不能带分号!!!!! 好坑有木有!!! java对环境变量的要求没那么严,这maven连个分号都容不得! [email protected]!

Maven学习随笔二——Maven初始配置

到现在为止,我对maven的理解是,跟svn差不多,帮我们管理项目的工具,到底是不是这样,拭目以待!! 弱弱解释,svn是什么? 简单的说,您可以把SVN当成您的备份服务器,更好的是,他可以帮您记住每次上传到这个服务器的档案内容.并且自动的赋予每次的变更一个版本. 说这么多废话,我接触到的svn作用如下: 1. 本地新建空文件夹,通过右击svn绑在鼠标右键菜单的checkout来从服务器把代码拿下来: 2. eclipse上也可以做同样的操作,调出svn窗口配置好即可拿代码: 3. eclips

随笔一记

1.通过 e.currentTarget.id 即可获取该元素id. 2.通过e.currentTarget.dataset.id 即可获取你自己设置的data-id里面值. 3.规定段落中的文本不进行换行:div{white-space:nowrap} 4.css中margin:auto与margin: 0 auto分别表示:第一个表示上下左右都为auto,横竖都居中,第二个表示上下为0,左右为auto,只是横居中 5.box-shadow 属性向框添加一个或多个阴影. 6.es6中箭头函数:

mysql 数据库服务中的应用程序

mysql 是一个数据库服务,而实现数据库服务是由mysql中的很多子应用程序来完成的(http://dev.mysql.com/doc/refman/5.7/en/programs-overview.html) 随笔一记:(概要,mysql中包含的应用程序的作用) 一:most of all. 1.mysqld :mysqld是 mysql最主要的程序,(原文为SQL daemon : sql 守护神,可见其重要性),sqld在mysql安装的过程中做了绝大部份的事情,连接mysql服务器的客

MVC 使用PageList进行分页

1.新建MVC项目 2.在Web项目下添加PagedList nuget 命令 :install-package pagedlist.mvc 在安装完成之后,会在Content下添加PagedList.css文件,这个是在分页中会用到的样式 3.有些人用的数据来源是其他地方来的,就用Ilist 的类型进行分页吧 顺便做一下json文件的转换 安装newtonsoft.json Nuget 命令 :install-package newtonsoft.json 4.在Models中添加model类

hello,博客园!!!!!!!

最为一个前端开发者,对浏览各个技术网站是日常便饭.因为工作中遇到的问题都是网上baidu或google出来的.cnblogs在很多年前就看到各技术类的博客文章,在当今技术网站中也算是有点名堂,虽不是最好的,但是是最久的,中规中矩吧.名望和威望还是有的,但页面和当今用户对界面的高要求的年代里,确实没啥优势.希望cl能够core和ui一起抓,上线更赏心悦目的网站. 为什么才注册cl,为什么要注册cl? 前者已经说了因为用户界面不美观,代码无太多高亮备注,视觉上不能第一眼吸引我,甚至有点排斥. 后者知

随手一记,maven打包

1 <plugin> 2 <groupId>org.apache.maven.plugins</groupId> 3 <artifactId>maven-dependency-plugin</artifactId> 4 <version>2.7</version> 5 <executions> 6 <execution> 7 <phase>package</phase> 8

maven 随笔

<build> <plugins> <!--打包源代码--> <plugin> <artifactId>maven-source-plugin</artifactId> <version>${maven.plugins.source.versin}</version> <configuration> <attach>true</attach> </configurati

maven随笔

常用命令: 使用Maven构建项目“mvn package” 来构建项目 使用Maven清理项目“mvn clean” 来清理项目 使用Maven运行单元测试“mvn test” 来执行单元测试 将项目安装到Maven本地资源库“mvn install” 打包和部署项目到本地资源库 生成基于Maven的项目文档站点“mvn site” 来为您的项目生成信息文档站点 使用“mvn site-deploy”部署站点(WebDAV例子)“mvn site-deploy” 通过WebDAV部署自动生成的