Maven总结

1.什么是Maven

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

maven定义一套项目生命周期:清理、初始化、编译、测试、报告 、打包、部署、站点生成

2.Maven环境搭建 

(一)Maven下载

可以到maven的官网下载   http://maven.apache.org/download.cgi

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

(二)本地仓库配置

1. 拷贝本地仓库

在D盘创建一个文件夹,名为repository

2. 配置本地仓库

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

<localRepository>D:\repository</localRepository>

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

远程仓库配置:

<mirror>
 <id>nexus-aliyun</id>
 <mirrorOf>*</mirrorOf>
 <name>Nexus aliyun</name>
 <url>http://maven.aliyun.com/nexus/content/groups/public</url>   
</mirror>

(三)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  重新创建索引

(四)Idea配置Maven

1、配置maven路径

2、设置maven仓库

三、Maven入门

(一)创建Java工程

1. 选择菜单  File ->New->Project

  

坐标包括:

Group Id:项目的名称,项目名称以域名的倒序,比如:com.gh.maventtest

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

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

点击Finish 。完成后如下图

工程目录结构说明:

project

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

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

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

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

2. 编写代码

1)在src/main/java 目录下创建包com.gh.maventest

2)在包com.gh.maventest下创建HelloWorld 类

package com.hp.maventest;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!!");
    }
}

(二)添加依赖 

打开pom.xml,输入以下信息

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.28</version>
    </dependency>
</dependencies>

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

(三)创建web项目

填写项目名等信息,项目构建完成之后看到如下内容

注意:使用该模板创建的项目只有web目录没有java资源目录。我们需要在main下创建java目录并把java目录变成classpath目录。另外还要创建一个配置目录,用来存放配置文件,一般名字是resources

添加之后加入tomcat即可运行这个web项目,运行后显示首页说明创建成功

(四)项目生命周期

Maven有三套相互独立的生命周期,分别是:clean、default、site。clean主要是清理项目、default是Maven最核心的的构建项目、site是生成项目站点

(1)clean周期:

pre-clean:准备清理

clean:真正的清理工作

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

2default周期:

validate:验证

initialize:初始化配置

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

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

generate-resources:生成资源目录

process-resources:处理资源文件

compile:编译源代码

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仓库

3site周期:

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集成ssm

需要引入的依赖如下,把这些复制到pom.xml中

<dependencies>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.2.2</version>
    </dependency>
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.28</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>compile</scope>
    </dependency>

</dependencies>

把已经整合好的ssm项目直接复制到这里,步骤如下:把web.xml中的webapp内容全部复制进来,

由于这里使用的是c3p0的连接池,因此需要修改连接池的配置,在applicationContext-dao.xml中修改,代码如下:

在运行时还会报错,找不到User ServiceImpl类,原因是没有加载User Mapper.xml的文件,需要把这个文件放到配置文件夹中,不能放在Java资源目录中,因为它不会去解析。需要注意的是要在配置目录中新建一个和namespace路径相同的文件夹,把这个配置文件放进去,否则还是找不到。这个文件夹要一步步的创建,不能一次性创建。

配置完成之后运行,能够正常的跑起来实现功能说明已经整合成功,就可以进行分模块整合了。

五、聚合与继承

所谓聚合,顾名思义,就是把多个模块或项目聚合到一起,我们可以建立一个专门负责聚合工作的Maven 工程。

我们在项目开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的元素,比如说每个模块都需要Junit,使用spring的时候,其核心jar也必须都被引入,在编译的时候,maven-compiler-plugin插件也要被引入。这时我们采用继承,就不用在每个子模块分别定义了。

聚合和继承通常是结合使用的,但是其作用是不同的。聚合是将多个模块的工程汇聚到一起,而继承则是指明某个模块工程要继承另一个模块功能

构建多模块Maven工程(重点)

6.1创建Maven父工程模板

先创建一个名为parentmaven项目,记得进入settings修改maven配置,在pom.xml中添加一行代码,表明这是一个父工程,那么它不能用来开发,不能有jar包或war包,是一个管理者,需要在里面新建模块。

然后在项目上右键创建一个模块,名为son1

 

创建之后,查看parent的pom文件,此时多了一个模块,parent下载管理son1,创建多个模块就构成了聚合.

son1的pom文件中有parent的配置,这里就继承了父类,有聚合不一定有继承,有继承也不一定有聚合,

工程创建完成后打开pom.xml ,添加内容

<!--设置jdk的版本是1.8-->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<!--导入依赖-->
<dependencies>
   <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.28</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.1</version>
    </dependency>

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.0</version>
    </dependency>
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>3.2.2</version>
    </dependency>

    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.2</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
   </dependency>
</dependencies>

然后在son1中创建一个工具类,点击install放到仓库中,在son2中依赖之后就可以使用这个工具类。如果多个子模块同时依赖某些相同的jar包,那么可以把这些依赖放在父类的配置中,子模块中都会自动依赖这些jar包。如果添加dependencyManagement这个标签,那么可以进行依赖管理,在需要依赖的子模块中添加依赖,实现版本的控制管理。也可以把版本号抽取出来,实现版本的统一

<!--抽取共有的版本号-->
<properties>
    <sprimg.version>4.3.14.RELEASE</sprimg.version>
</properties>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <!--使用共有的版本号-->
    <version>${sprimg.version}</version>
</dependency>

模板创建成功之后就可以参考步骤创建下面的模块。一共需要建立4个子模块:

  entity   存放实体包

  dao      存放数据访问接口及实现类

  service   存放业务逻辑层接口及实现类

  web     存放action类代码和前端代码  (注意:此模块的packaging选择war)

把写好的ssm工程按照模块划分到每一个项目中

第一步:创建一个maven的java项目,添加<packaging>pom</packaging>到配置文件

第二步:创建entity等模块,web需要创建web工程,引用模板

第三步:依赖

6.2模块之间的依赖

依赖关系:web-->service-->dao-->entity

选中parent创建install放到仓库中,然后依次设置依赖。

修改web.xml配置,让其加载所有配置文件:

classpath 和 classpath* 区别:
classpath:只会到你指定的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找

项目的分层图

6.3运行测试及打

选择parent工程,执行命令package 进行打包(war),添加tomcat,运行项目进行测试。

七、依赖管理

(一)依赖范围

依赖范围是用来控制依赖与3种classpath(编译classpath,测试classpath,运行classpath)的关系。maven有以下几种依赖范围:

1、compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖。

strus-core、spring-beans。打到war包或jar包。

2、provided 编译、和测试有效,A在编译和测试时需要B。

比如:servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)。不会打到war。

3、runtime:测试、运行有效。

比如:jdbc驱动包 ,在开发代码中针对java的jdbc接口开发,编译不用。

在运行和测试时需要通过jdbc驱动包(mysql驱动)连接数据库,需要的!!会打到war。

4、test:只是测试有效,只在单元测试类中用。

比如:junit。不会打到war。

如何设置依赖范围呢?

比如我们要将mysql驱动的依赖设置为runtime范围,配置如下:

    <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.6</version>
          <scope>runtime</scope>
      </dependency>

servlet依赖设置为provided

<dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
</dependency>

如果是compile就不需要设置了,因为compile是scope的默认值。关于test范围我们在后边讲解单元测试时再做演示。重新执行打包为war , 会发现servlet-api.jar已经不存在。

就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
原文地址:https://www.cnblogs.com/zys2019/p/11448341.html