Maven使用笔记

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),

一组标准插件(生命周期各阶段是绑定插件中的目标来完成项目构建工作)

一个项目生命周期(Project Lifecycle),

一个依赖管理系统(Dependency Management System).

一、Maven私服搭建(管理jar包依赖的JavaEE Web系统):

nexus下载地址:http://www.sonatype.org/nexus/

1. 安装私服。

a. 解压nexus-2.10.0-02-bundle.zip。

nexus-2.10.0-02:核心目录。

-- bin/jsw:存放了操作Nexus应用的命令。

-- conf :nexus.properties 配置文件可更改port、host、nexus-work、runtime。

sonatype-work:工作目录。

sonatype-work\nexus\storage:所有仓库存储目录。

b. 配置启动nexus应用

nexus-2.10.0-02/bin/jsw/ windows-x86-32:

- console-nexus.bat :控制台运行nexus

- start-nexus.bat:启动nexus服务

- stop-nexus.bat:停止nexus服务

- install-nexus.bat :安装nexus到window服务中

- uninstall-nexus.bat:从window服务中删除nexus

cmd启动nexus:sc start nexus-webapp

cmd停止nexus: sc stop nexus-webapp

2. nexus应用使用。

a. 启动进入Nexus主界面:

- http://localhost:8081/nexus/index.html

b. 登录Nexus:admin/admin123

c. 点击左边菜单Repositories查看所有仓库:

- Public Repositories:仓库组。

- 3rd party:第三方的仓库。

- Maven Central:Maven中央仓库。

- Releases:发行版存放仓库。

- Snapshots:快照版存放仓库。

- itcast Central: 自定义的仓库。

说明:四种类型的仓库:group(组)、proxy(代理)、hosted(本地)、virtual(虚拟)

d. 创建自己的仓库。

-- Add按钮后在configuration选项中进行配置.

maven中央库地址: http://repo1.maven.org/maven2/

maven中央库搜索地址:http://search.maven.org/

二、Maven下载与安装:

a. maven 官网地址:http://maven.apache.org/

b. 安装maven:

-- 设置M2_HOME 变量  E:\apache-maven-3.2.1

-- 设置系统环境变量path.  E:\apache-maven-3.2.1\bin

-- 在E:\apache-maven-3.2.1/conf/settings.xml文件中更改本地仓库路径:

<localRepository>E:/apache-maven-3.2.1/repo</localRepository>

c. 配置私服(镜像)。

在conf/settings.xml文件中给定仓库下载的镜像:

-- id : 镜像唯一标识符,用来区分不同的mirror

-- mirrorOf : 镜像哪些仓库 *:代表所有的仓库 central: 代表仓库id为central的仓库.

-- name : 镜像名称

-- url : 镜像的URL

<mirror>

<id>public</id>

<mirrorOf>*</mirrorOf>

<name>public Mirror</name>

<url>http://localhost:8081/nexus/content/groups/public</url>

</mirror>

三、MyEclipse配置关联自己的Maven:

Window --> Preferences --> MyEclipse --> Maven4MyEclipse --> User setting 配置关联自已的Maven.

四、 Maven的核心概念

1. Maven 插件和目标  (Plugins and Goals)

-- Maven构建项目由一组标准插件组成。

-- 一个maven插件是由一个或者多个目标组成的。

-- 一个目标是一个明确的任务,它可以作为单独的目标运行,

或者作为一个大的构建的一部分和其它目标一起运行。

一个目标是Maven中的一个“工作单元”。

目标的例子包括Compiler插件中的compile目标,它用来编译项目中的所有源文件,

或者Surefire插件中的test目标,用来运行单元测试。

2. Maven 生命周期 (Lifecycle) mvn

-- Clean Lifecycle 在构建项目之前进行一些清理工作。

pre-clean

clean

post-clean

-- Default Lifecycle 构建的核心部分,初始化、编译、测试、打包、验证、部署和站点生成等。

validate    验证项目是否正确,以及所有为了完整构建必要的信息是否可用

generate-sources     生成所有需要包含在编译过程中的源代码

process-sources    处理源代码,比如过滤一些值

generate-resources   生成所有需要包含在打包过程中的资源文件

process-resources    复制并处理资源文件至目标目录,准备打包

compile            编译项目的源代码

process-classes    后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)

generate-test-sources 生成所有包含在测试编译过程中的测试源码

process-test-sources 处理测试源码,比如过滤一些值

generate-test-resources 生成测试需要的资源文件

process-test-resources 复制并处理测试资源文件至测试目标目录

test-compile        编译测试源码至测试目标目录

test                使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布

prepare-package        在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现)

package                将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR

pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境

integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境

post-integration-test 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。

verify                执行所有检查,验证包是有效的,符合质量规范

install                安装包至本地仓库,以备本地的其它项目作为依赖使用

deploy                复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)

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

pre-site

site

post-site

site-deploy

说明:生命周期各阶段Phase由一个或多个插件的Goal目标集合而成。

用mvn命令直接执行生命周期中的指定阶段(phase)

mvn phase(阶段名称)

3. Maven 坐标 (Coordinates)

坐标解释(groupId、artifactId、version):

groupId:    创建这个项目的组织名称(一般为组织的域名反写)

artifactId: 表示一个单独项目的唯一标识符(项目名或jar包)

version:    项目的版本号

注意:groupId、artifactId、version它们标识了一个唯一的项目。

4. Maven 资源库(Repositories)

什么是Maven资源库? 资源存储的地方,即所有项目的jar库,插件库。

Maven库中有三种类型

-- local : 本地库

<localRepository>C:/MyLocalRepository</localRepository>

-- remote  : 远程仓库(代理仓库也就是自已的私服)

-- central : 中央存储库(http://repo1.maven.org/maven2/)

Maven的依赖jar包搜索序列:

第一种:本地库 ---> 中央库

第二种:本地库 ---> 远程库 ---> 中央库

5. Maven 依赖管理 (Dependency Management)

a、Transitive Dependency (传递依赖)

你的项目依赖于A,A又依赖于B。你的项目是否要声明你依赖于B?

Maven的回答是它帮你自动管理这种依赖的传递,

你不需要声明你依赖于B,由Maven来做。

b、Dependency Scope (依赖范围)

举例来说,你开发时需要做测试,你需要依赖于junit的jar,但是部署应用时并不需要它,

因为单元测试不会在生产环境上跑,也就是说最终打包的jar或者war不包含junit的jar。

又如你开发web程序,你的servlet/jsp进行编译需要依赖于servlet-jsp的标准api(J2EE的jar),

但是部署时也是不需要它的,因为你的应用服务器肯定有这些东西。

因此,Maven考虑了6中可能的scope供选择:

- compile: 默认的scope。编译、测试、打包全都需要。compile参与依赖传递,就是说,

你的项目A依赖于B(依赖scope是compile),项目C依赖于你的项目A,那么C也就依赖于B。

- provided: 表示JDK或者容器会在Runtime时提供这些(jar),

如上面说到的servlet api。provided的东西在编译和测试时会用到,不参与传递依赖。

- runtime: 表示编译时不需要,但测试和运行时需要,最终打包时会包含进去。

- test: 只用于测试阶段(测试的编译和测试的运行),典型的就是junit的jar。

- system: 和provided类似,但要求jar是你的系统里已有的,

不会在repository里找,如rt.jar,tools.jar这些。

- import: 简单的说,你的项目的pom可以继承另一个项目的pom,

从而继承了父项目的依赖关系,但是因为之后single inheritance的限制,

所以创造了import,使得你可以“导入”或者说“继承”任何一到多个项目的依赖关系。

c. Dependency Classier (依赖jdk版本)

在jdk1.4下编译的还是jdk1.5

d. 解决依赖冲突(排除指定的依赖)

<exclusions>

<exclusion>

<artifactId>servlet-api</artifactId>

<groupId>javax.servlet</groupId>

</exclusion>

</exclusions>

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

-- mvn site 命令

运行site生命周期阶段

五、Maven标准插件说明(-D指定属性):

注意:标准插件的位置(第一次使用时它会去Maven中央库下载):

Maven本地仓库\org\apache\maven\plugins\

mvn 插件:goal -D属性名=属性值 ……

1. 编译源代码: mvn compiler:compile.

2. 清除项目:mvn clean:clean (只留下源文件).

3. 测试命令:

-- mvn surefire:test : 运行测试代码

4. 安装:mvn install:install

5. 只打jar包: mvn jar:jar (java项目)

6. 只打war包: mvn war:war (web项目)

7. 部署最终的包至远程仓库: mvn deploy:deploy

8. 生成站点目录:mvn site:site

说明:Maven标准插件使用地址: http://maven.apache.org/plugins/index.html

六、Maven创建项目:

1.创建web项目的两种方式:

第一种方式:选择原型目录创建项目:

mvn 插件名:目标 -D参数

mvn archetype:generate -DarchetypeCatalog=internal (10种原型目录来创建项目)

说明:

-- archetypeCatalog属性:internal(内部10), remote(远程1千多种)

-- 7:代表java项目、10: 代表web项目

第二种方式:通过myeclipse创建web项目(掌握).

2.Maven创建出来的Web项目结构:

src/main/java       java源文件

src/main/resources  java资源文件

src/main/webapp     webapp根目录

src/test/java       test源文件

src/test/resources  test资源文件

七、myeclipse创建Web项目(maven-archetype-webapp):

1. mvn compile 编译java项目.

2. mvn test 运行测试用例.

3. mvn package 编译java项目并打成war包.

4. mvn clean  清理java项目.

a. 配置web项目依赖的jar包

<dependency>

<groupId>org.apache.tomcat</groupId>

<artifactId>tomcat-jsp-api</artifactId>

<version>7.0.65</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>jstl</groupId>

<artifactId>jstl</artifactId>

<version>1.2</version>

<scope>runtime</scope>

</dependency>

b. 配置web项目运行web容器插件

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

<configuration>

<port>8080</port>

</configuration>

</plugin>

c. 设置jdk版本:

1. 配置编译插件

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.1</version>

<configuration>

<source>1.8</source>

<target>1.8</target>

<encoding>utf-8</encoding>

</configuration>

</plugin>

2. 更新Maven项目

八、POM(Project Object Model)项目对象模型(pom.xml)配置:

a、基础元素配置:

<!-- 指定POM对象模型的版本号 -->

<modelVersion>4.0.0</modelVersion>

<!-- 指定组织ID(公司域名反写) -->

<groupId>cn.itcast</groupId>

<!-- 指定项目名 -->

<artifactId>Struts2-MyBatis3</artifactId>

<!-- 指定项目的版本  RELEASE(发行版)、SNAPSHOT(快照版) -->

<version>1.0.0-RELEASE</version>

<!-- 指定项目打包的产物(jar、ear、war、pom) -->

<packaging>war</packaging>

b、全局属性配置:

<properties>

<currentVersion>${project.version}</currentVersion>

<struts2.version>2.3.16.3</struts2.version>

<mybatis.version>3.2.7</mybatis.version>

<mysql.version>5.1.27</mysql.version>

<tomcat.version>7.0.47</tomcat.version>

</properties>

c、依赖关系配置:

<dependencies>

<dependency>

<groupId>jstl</groupId>

<artifactId>jstl</artifactId>

<version>1.2</version>

<scope>runtime</scope>

<type>jar</type>

<classifier>jdk15</classifier>

</dependency>

</dependencies>

d、构建元素配置:

<!-- 构建项目元素 -->

<build>

<finalName>hrm</finalName>

<!-- 定义默认的目标 -->

<defaultGoal>package</defaultGoal>

<!-- 源码目录 -->

<sourceDirectory>${basedir}/src/main/java</sourceDirectory>

<!-- 测试代码目录 -->

<testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>

<!-- 资源文件 -->

<resources>

<resource>

<!-- 源目录 -->

<directory>${basedir}/src/main/resources</directory>

</resource>

</resources>

<plugins>

<plugin>

</plugin>

...

</plugins>

</build>

e、常用插件配置:

1. 编译插件:

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.1</version>

<configuration>

<source>1.7</source>

<target>1.7</target>

<encoding>utf-8</encoding>

</configuration>

</plugin>

2. 生成API文档插件

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-javadoc-plugin</artifactId>

<version>2.9.1</version>

<!-- 指定插件需要的配置信息 -->

<configuration>

<!-- 源文件编码 -->

<encoding>UTF-8</encoding>

<!-- 生成时的编码 -->

<charset>UTF-8</charset>

<!-- 文档的编码 -->

<docencoding>UTF-8</docencoding>

<!-- 文档标题 -->

<doctitle>传智播客</doctitle>

<!-- 窗口标题 -->

<windowtitle>OA办公管理系统</windowtitle>

</configuration>

<executions>

<execution>

<!-- 指定目标 -->

<goals><goal>javadoc</goal></goals>

<!-- 生命周期哪个阶段时,执行上面javadoc目标 -->

<phase>compile</phase>

</execution>

</executions>

</plugin>

3. tomcat插件:

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

<!-- 指定插件需要的配置信息 -->

<configuration>

<!-- 设置端口 -->

<port>8080</port>

<!-- 设置支持热部署 -->

<contextReloadable>true</contextReloadable>

</configuration>

</plugin>

4. jetty插件:

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>jetty-maven-plugin</artifactId>

<version>7.6.16.v20140903</version>

<configuration>

<!-- 设置web项目配置信息 -->

<webApp>

<contextPath>/${project.artifactId}</contextPath>

</webApp>

<!-- 设置支持热部署 -->

<scanIntervalSeconds>1</scanIntervalSeconds>

<connectors>

<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">

<port>9090</port>

</connector>

</connectors>

</configuration>

</plugin>

注意:需换成jre路径(不要引用jdk路径)

f、站点元素配置:

<!-- 指定项目名称,一般用于文档生成 -->

<name>ssh</name>

<!-- 指定公司网站地址 -->

<url>http://maven.apache.org</url>

<!-- 指定项目描述 -->

<description>传智播客java架构项目</description>

<!-- 指定项目的开始时间 -->

<inceptionYear>2015</inceptionYear>

来自为知笔记(Wiz)

时间: 2024-12-21 00:53:12

Maven使用笔记的相关文章

Maven学习笔记之——仓库(中)

Maven学习笔记之--仓库(中) 1.    远程仓库的配置 当出现默认的中央仓库无法满足我们的需求或者连接不上的时候.我们可以通过POM文件来指定远程仓库. <repositories> <repository> <id>jboss-maven2-release-repository</id> <name>JBoss Repository</name> <url>http://repository.jboss.org/

Maven学习笔记

Maven学习笔记 Maven是项目管理工具 1. 安装Maven 在apache官网(http://maven.apache.org/download.cgi) 下载apache-maven-3.3.3-bin.zip和apache-maven-3.3.3-src.zip:解压,把bin的位置设在环境变量里, 新建环境变量名:MAVEN_HOME 值:C:\Users\pengtao.yue\apache-maven-3.3.3\bin 在path中加入:%MAVEN_HOME% 在DOS中输

Maven学习笔记之——仓库(上)

Maven学习笔记之--仓库(上) 1.    何为maven仓库 Maven可以在某一指定位置统一存放所有maven项目共享的构件.此指定位置就是maven仓库.实际的项目将不再自己存放其所依赖的构件.他们只需要声明这些依赖的坐标.在需要的时候就会自动根据坐标找到仓库中的构件.并使用他们. 仓库的意义:减少磁盘占用空间.去除大量重复的构件.尤其是项目越来越多.越来越大的时候.更便于统一管理所有控件. 2.    仓库的布局 任何一个构件都有其唯一的坐标.根据这个坐标可以定义其在仓库中的唯一存储

Maven学习笔记之——坐标和依赖(上)

Maven学习笔记之--坐标和依赖(上) 1.    Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到具体的构件.Maven的坐标元素包括groupId.artifactId.versiion.packaging.classifier.Maven内置了一个中央仓库地址.需要时Maven会根据坐标到其中下载.具体关于中央仓库的介绍在后面. 2.    Maven坐标详解 比如下面一组坐标: <groupId>org.andy.items</groupId> &l

Maven配置笔记

android-m2e插件与maven 自定义用户配置路径 不管插件还是maven,默认的用户配置路径是统一的:${user.home}/.m2/settings.xml 但是插件可以通过eclipse设置用户配置的路径(配置方法参考<ADT+Android-m2e环境搭建>):而maven不能永久指定,只能在每次使用mvn命令时加上"-s 新路径"参数. 依赖 如果使用android-m2d,在eclipse中写好依赖配置(<dependency>),保存之后

Maven学习笔记之——坐标和依赖(中)

Maven学习笔记之--坐标和依赖(中) 1.    传递性依赖 1.1    何为传递性依赖 项目中经常有引入一个jar包还要引入其他与其相关的jar包.自己搜的话要注意很多.比如版本问题等.而Maven会解析解析各个直接依赖的POM.将哪些必要的间接依赖以传递依赖的形式引入到项目中. 依赖范围不仅可以控制依赖与三种classpath关系.还对传递依赖产生影响. 假设A依赖B,B依赖C,我们说A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖.第一直接依赖的范围和第二直接依赖

Maven学习笔记之——坐标和依赖(下)

Maven学习笔记之--坐标和依赖(下) 1.    最佳实践 归纳Maven依赖使用的常用技巧.方便用来避免和处理很多常见问题. 1.1.     排除依赖 传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理.但是有些时候这种特性也会带来问题.例如,当前项目有一个第三方依赖,而这个第三方依赖由于某些原因依赖了另外一个类库的SNAPSHOT版本,那么这个SNAPSHOT就会成为当前项目的传递性依赖,而SNAPSHOT的不稳定性会直接影响到当前的项目.这时候需要排除掉该SNAPSH

Maven学习笔记(1)之安装Maven

此笔记是学习Maven时自己摸索+各种百度而来,并非全部原创,望与各位一同学习,勿拍~勿拍~ 安装步骤: 1.下载Maven的最新版本,地址:http://maven.apache.org/download.cgi 2.将下载完成的压缩包放至D盘根目录(图方便,一会儿安装完再删就好) 3.在命令行上操作,进入到你想要安装的目录路径后敲:jar xvf 的命令来进行解压安装(请勿手动解压以省略此步) 4.配置环境变量 新建系统变量  MAVEN_HOME  变量值:D:\Java\apache-m

Eclipse从零配置Maven环境 笔记

Eclipse配置maven环境笔记 转载请注明:http://blog.csdn.net/kisssun0608/ 1.      下载maven http://maven.apache.org/download.cgi,选择的是最新的apache-maven-3.3.3-bin.zip ; 2.      解压后放在指定目录,如D:\\dep_tools\ ; 3.      配置maven的环境变量 4.      开始 -> 计算机 ->右击,属性–> 高级系统设置–> 

Maven学习笔记-使用Eclipse插件创建Java Webapp项目

使用Java的猿们,最多接触的大概就是web项目了吧?在学习Maven的过程中,首先当然就是创建一个webapp项目. 自己在尝试的过程中,碰到了很多的问题.我把详细的过程都记录下来,用以今后参考. 步骤: 如果未搭建好Maven开发环境,请参考前一篇:Maven学习笔记--环境搭建 打开Eclipse, 菜单栏选择File -> new -> other,在弹出的对话框中找到Maven Project. 在弹出的新建Maven项目的对话框中,不要勾选第一项"Create a sim