Maven详解

本文详细介绍了Maven的各个方面,包括项目对象模型(POM)、依赖管理系统、项目生命周期、Maven仓库(中央仓库、本地仓库、私服)、环境搭建步骤、Eclipse配置、常见命令、构建war包、SSH2工程创建、多模块项目管理和依赖管理。通过实例展示了Maven如何管理Java项目的依赖、构建流程和仓库配置,以及如何与SVN协同工作。

1.什么是Maven

      Maven是apache下的开源项目,项目管理工具,管理java项目。

1、项目对象模型 (Project Object Model)

      POM对象模型,每个maven工程中都有一个pom.xml文件,定义工程所依赖的jar包、本工程的坐标、打包运行方式。。

2、依赖管理系统(基础核心 )

       maven通过坐标对项目工程所依赖的jar包统一规范管理。

3、maven定义一套项目生命周期

清理、初始化、编译、测试、报告 、打包、部署、站点生成

4、一组标准集合

       强调:maven工程有自己标准的工程目录结构、定义坐标有标准。

5、maven 管理项目生命周期过程都是基于插件完成的

2.Maven仓库

1、中央仓库

   就是远程仓库,仓库中jar由专业团队(maven团队)统一维护。

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

2、本地仓库

     相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。

3、私服

       在公司内部架设一台私服,其它公司架设一台仓库,对外公开。

3.Maven环境搭建

(一)Maven下载

可以到maven的官网下载  

http://maven.apache.org/download.cgi

我们将下载的压缩包解压到D盘根目录,D盘根目录会有下面的文件夹apache-maven-3.3.9

(二)本地仓库配置

1. 拷贝本地仓库

将资料中的repository_ssh.zip解压到D盘

2. 配置本地仓库

打开maven的安装目录中conf/ settings.xml文件,在这里配置本地仓库:

<localRepository>D:\repository_ssh</localRepository>

这里的意思是配置本地仓库的目录为D:\repository_ssh

(三)eclipse配置Maven

1. 配置Maven的安装目录

进入eclipse ,选择菜单windows - Preferences , 在左侧的树状导航中

点击add按钮,弹出窗口后选择maven的安装目录

然后点击Apply 

2. 配置User Settings

选择左侧树形导航的User Settings  ,选择Maven目录下conf下的settingsxml

然后点击Update Settings 、Reindex 和Apply按钮.

(四)重建本地仓库索引

选择菜单 window --> show View 

 

 

选择 Rebuild  Index  重新创建索引

4、Maven入门

(一)创建工程

1. 选择菜单  File ->new -> Other

选择Maven下的Maven Project,   Next

2. 选中下图红框部分的复选框(跳过骨架),next

3. 定义工程坐标

maven对所有工程管理基于坐标进行管理。

坐标包括:

Group Id:项目的名称,项目名称以域名的倒序,比如:cn.itcast.mavendemo

Artifact Id:模块名称(子项目名称)

Version:模块的版本,snapshot(快照版,没有正式发行)、release(正式发行版本)

输入后,Finish 。完成后如下图

工程目录结构说明:

project

       /src/main/java      主体程序 java源文件(不要放配置文件)

       /src/main/resources  主体程序所需要的配置文件(不要放java文件)

       /src/test/java       单元测试程序 java源文件

       /src/test/resources   单元测试程序所用的配置文件

       /target            编译输出目录

pom.xml          Maven进行工作的主要配置文件。   

4. 编写代码

(1)在src/main/java 目录下创建包cn.itcast.mavendemo

(2)在包cn.itcast.mavendemo下创建HelloWorld 类

package cn.itcast.mavendemo;

 

public class HelloWorld {

 

   public static void main(String[] args) {

      System.out.println("Hello World!!");

   }

}

(二)设置编译版本

我们现在的Maven工程默认是JDK1.5 ,我们需要将编译版本改为JDK1.7

<build> 

      <plugins>

          <plugin> 

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

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

              <version>2.3.2</version> 

              <configuration> 

                  <source>1.7</source> 

                  <target>1.7</target> 

              </configuration> 

          </plugin> 

      </plugins> 

   </build> 

将上边的配置信息粘贴到pom.xml中。

点击工程右键  Maven ->  Update Project ...

弹出窗口后OK .操作后 ,编译版本改为 1.7

(三)添加依赖

右键点击工程  Maven -- >  Add Dependency

添加后打开pom.xml,发现多了以下信息

  <dependencies>

    <dependency>

        <groupId>org.hibernate</groupId>

        <artifactId>hibernate-core</artifactId>

        <version>5.0.7.Final</version>

    </dependency>

  </dependencies>

我们再看工程目录下的Maven Dependecies 下又多了很多jar包

奇怪了!我只是加了一个hibernate的核心包,为什么会多出这么多jar包呢?

这是因为hibernate的核心包本身又会依赖其它的jar包,所以导入hibernate包自动会添加hibernate所依赖的包。

(四)项目生命周期(了解)

Maven有三套相互独立的生命周期,分别是:clean、default、site。clean主要是清理项目、default是Maven最核心的的构建项目、site是生成项目站点。每一个大的生命周期又分为很多个阶段。后面的阶段依赖于前面的阶段,这点有点像Ant的构建依赖。生命周期本身相互独立,用户可以仅仅调用生命周期的某一个阶段,也就是说用户调用了default周期的任何阶段,并不会触发clean周期以及site周期的任何事情。三大生命周期蕴含着小小的阶段,我们按顺序看一下:

(1)clean周期:

pre-clean:准备清理

clean:真正的清理工作

post-clean:执行清理后的一些后续工作

(2)default周期:

validate:验证

initialize:初始化配置

generate-sources:生成源代码编译目录

process-sources:处理项目主资源文件,复制资源文件到outputclasspath

generate-resources:生成资源目录

process-resources:处理资源文件

complie:编译源代码

process-classes:处理编译后文件

generate-test-sources:生成测试目录

process-test-sources:处理项目测试资源文件,复制测试资源文件到outputclasspath

generate-test-resources:生成测试资源文件

process-test-resources:处理测试资源文件

test-compile:编译测试代码

process-test-classes:处理测试代码

test:单元测试运行测试代码

prepare-package:打包前的准备

package:将编译好的代码打包成为jar或者war或者ear等等

pre-integration-test:准备整体测试

integration-test:整体测试

post-integration-test:为整体测试收尾

verify:验证

install:安装到本地Maven库

deploy:将最终包部署到远程Maven仓库

(3)site周期:

pre-site:准备生成站点

site:生成站点及文档

post-site:站点收尾

site-deploy:将生成的站点发布到服务器上

(五)常见命令

maven通过命令对工程进行清理、编译、测试、打包、部署。

点击工程右键 ,Run As (或Debug As ) -- >  Maven  Build ... 

常用命令如下:

compile:编译

clean:清理,将target下的class文件清理

test: 执行单元测试类,执行src/test/java下的类

package :将java工程打成jar、war。

install:安装命令,将将程的jar发布到本地仓库

发布到仓库,目录按照本工程定义的坐标生成目录

扩展:

其实我们所执行的这些命令是对maven原生命令的封装,我们可以在命令提示符下直接通过这些命令来对代码进行编译打包等操作,格式如下:

mvn 命令名称        运行不调试

mvnDebug 命令名称   调试运行

我们要在命令提示符下执行maven命令必须配置下面两个环境变量

MAVEN_HOME    D:\apache-maven-3.3.9

PATH             %MAVEN_HOME%\bin

测试Maven环境 ,在控制台输入mvn -v ,有下列信息输出表示Maven配置正常。

 

5、创建SSH2工程(重点)

需求,用SSH2集成框架搭建工程mavenweb ,功能为单表的列表查询。

表名称 dep  (部门表)

字段名称

字段类型

字段含义

uuid

bigint

主键:部门编号

name

varchar

部门名称

tele

varchar

部门电话

(一)创建war工程

1. 选择菜单  File ->new -> Other

选择Maven下的Maven Project, next

2. 选中下图红框部分的复选框(跳过骨架),next

3. 定义工程坐标

注意打包方式选择war工程。

4. 手动添加web.xml 

(1)在src /main/webapp 目录下手动创建WEB-INF目录

(2)将资源文件夹下的web.xml拷贝至WEB-INF目录

5. 添加插件

将下列配置拷贝至pom.xml 

 <build> 

      <plugins>

          <plugin> 

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

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

              <version>2.3.2</version> 

              <configuration> 

                  <source>1.7</source> 

                  <target>1.7</target> 

              </configuration> 

          </plugin> 

          <plugin>

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

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

                <configuration>

                    <!-- 指定端口 -->

                    <port>8080</port>

                    <!-- 请求路径 -->

                    <path>/</path>

                </configuration>

          </plugin>

      </plugins> 

    </build>

 

点击工程右键  Maven ->  Update Project ...

  1. 在pom.xml中添加servlet-api

因为我们创建的是war工程 ,需要response 和request 等对象,而这些对象是在servlet-api中的,所以我们需要添加servlet-api ,才能保证工程正常编译。

注意:必须指定scope为provided , 这是设置依赖范围,我们后边的章节会详细讲解。如果设置则启动会报错。

  <dependencies>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>servlet-api</artifactId>

        <version>2.5</version>

        <scope>provided</scope>

    </dependency>

  </dependencies>

添加后更新工程

7. 创建index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>测试页面</title>

</head>

<body>

开启神秘的Maven世界~

</body>

</html>

部署运行测试   执行命令

tomcat7:run

用浏览器测试,地址: http://localhost:8080/index.jsp

(二)添加SSH依赖

SSH2框架需要添加的依赖如下:

<dependencies>

  <dependency>

    <groupId>javax.servlet</groupId>

    <artifactId>servlet-api</artifactId>

    <version>2.5</version>

    <scope>provided</scope>

  </dependency>

  <dependency>

    <groupId>org.hibernate</groupId>

    <artifactId>hibernate-core</artifactId>

    <version>5.0.7.Final</version>

  </dependency>

  <dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-core</artifactId>

    <version>4.2.4.RELEASE</version>

  </dependency>

  <dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-beans</artifactId>

    <version>4.2.4.RELEASE</version>

  </dependency>

  <dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context</artifactId>

    <version>4.2.4.RELEASE</version>

  </dependency>

  <dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-orm</artifactId>

    <version>4.2.4.RELEASE</version>

  </dependency>

  <dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-test</artifactId>

    <version>4.2.4.RELEASE

<think>嗯,用户让我介绍一下XML语法和Maven详解。首先,我需要确认用户的需求。他们可能刚开始学习Java或者项目构建工具,所以需要基础的知识。XML和Maven通常在Java项目中一起使用,用户可能是在学习如何配置Maven项目时遇到了XML文件,比如pom.xml。因此,用户需要了解XML的基本结构,以便能够理解和编辑Maven的配置文件。 接下来,我得考虑如何组织信息。用户可能希望分开两部分,先XML再Maven,但也要说明它们之间的联系。XML部分需要涵盖基本语法,比如标签、元素、属性、嵌套规则等,可能还要提到常见的错误和验证。Maven部分则需要解释它的作用、核心概念如POM、生命周期、依赖管理、插件和仓库。同时,要举例说明pom.xml的结构,这样用户能更直观地理解。 另外,用户可能不知道Maven为什么要用XML,所以需要指出XML的结构化特性适合做配置,而Maven利用这一点来管理项目。还要注意用户的潜在需求,比如他们可能想通过例子学习如何配置依赖或插件,或者解决常见的构建问题,所以提供简单的示例会有帮助。 需要避免使用过于专业的术语,保持解释简单明了。例如,在解释Maven生命周期时,用阶段(phase)和目标(goal)的区别,可能需要用类比或步骤来说明。同时,提醒用户常见的注意事项,比如依赖冲突,或者如何添加仓库,这些是实际使用中容易遇到的问题。 最后,总结部分要强调两者的结合,确保用户明白XML在Maven配置中的作用,以及掌握这些知识对项目管理的帮助。可能还需要考虑用户下一步的学习方向,比如推荐学习Maven命令或高级配置,但根据问题范围,暂时不需要扩展,保持回答的针对性。</think>好的!以下是对 **XML 语法**和 **Maven** 的详细介绍,内容分为两部分,便于理解。 --- ### 一、XML 语法详解 **XML(eXtensible Markup Language)** 是一种标记语言,用于存储和传输结构化数据。它的核心特点是可扩展性(标签可自定义)和自描述性。 #### 1. 基本语法规则 - **声明**:XML 文件通常以声明开头,定义版本和编码: ```xml <?xml version="1.0" encoding="UTF-8"?> ``` - **根元素**:必须有且仅有一个根元素,所有其他元素嵌套在根元素内。 ```xml <root> <!-- 其他内容 --> </root> ``` - **标签**: - 标签区分大小写,必须闭合(成对或自闭合)。 - 成对标签:`<tag>内容</tag>` - 自闭合标签:`<tag />` - **属性**:属性值必须用引号包裹: ```xml <person id="001" role="admin">Tom</person> ``` - **注释**:`<!-- 注释内容 -->` - **特殊字符**:需转义,如 `<` → `<`、`>` → `>`。 #### 2. XML 示例 ```xml <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book category="IT"> <title>Java Programming</title> <author>John Doe</author> <price>49.99</price> </book> <book category="Fiction"> <title>XML for Beginners</title> <author>Jane Smith</author> <price>29.99</price> </book> </bookstore> ``` #### 3. XML 用途 - 配置文件(如 Maven 的 `pom.xml`、Spring 的配置)。 - 数据交换格式(如 SOAP、RSS)。 - 结构化数据存储。 --- ### 二、Maven 详解 **Maven** 是 Apache 的开源构建工具,主要用于 Java 项目管理。其核心功能包括: - **依赖管理**(自动下载库文件) - **构建生命周期**(编译、测试、打包等) - **项目标准化**(目录结构、配置约定) #### 1. Maven 核心概念 - **POM(Project Object Model)**: - 项目配置的核心文件是 `pom.xml`,定义了项目信息、依赖、插件等。 - 示例 `pom.xml` 结构: ```xml <?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>my-project</artifactId> <version>1.0.0</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project> ``` - **坐标(Coordinates)**: - 通过 `groupId`(组织标识)、`artifactId`(项目标识)、`version` 唯一标识一个依赖。 - **仓库(Repository)**: - **本地仓库**:本地机器上的依赖缓存(默认在 `~/.m2/repository`)。 - **中央仓库**:Maven 官方维护的公共仓库([search.maven.org](https://search.maven.org/))。 - **私有仓库**:公司内部搭建的仓库(如 Nexus、Artifactory)。 - **生命周期(Lifecycle)**: - 默认生命周期包含多个阶段(phase),如: - `compile`(编译) - `test`(运行测试) - `package`(打包为 JAR/WAR) - `install`(安装到本地仓库) - `deploy`(部署到远程仓库) - **插件(Plugins)**: - 通过插件执行任务,例如 `maven-compiler-plugin` 用于编译代码。 #### 2. Maven 常用命令 ```bash mvn clean # 清理 target 目录 mvn compile # 编译代码 mvn test # 运行测试 mvn package # 打包项目 mvn install # 安装到本地仓库 mvn deploy # 部署到远程仓库 ``` #### 3. Maven 目录结构 Maven 使用约定优于配置,标准目录结构如下: ``` my-project/ ├── src/ │ ├── main/ │ │ ├── java/ # Java 源代码 │ │ └── resources/ # 配置文件 │ └── test/ │ ├── java/ # 测试代码 │ └── resources/ └── pom.xml ``` --- ### 三、XML 与 Maven 的关系 - Maven 使用 XML 格式的 `pom.xml` 文件描述项目配置。 - XML 的结构化特性非常适合定义复杂的依赖关系和构建流程。 --- ### 四、注意事项 1. **XML 格式必须严格正确**(如标签闭合、属性引号)。 2. **Maven 依赖冲突**:可通过 `<exclusions>` 排除冲突依赖。 3. **镜像仓库配置**:修改 `settings.xml` 加速依赖下载。 希望以上内容能帮助你理解 XML 和 Maven!如果需要进一步示例或细节,请随时告诉我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值