maven 没用

 

maven

一、Maven基本介绍

1. 什么是maven

 

Maven是项目进行模型抽象, 充分运用的面向对象的思想, maven可以通过一小段描述信息来管理项目的构建, 报告和文档的软件项目管理工具。maven除了以程序构建能力为特色之外, 还提供高级项目管理工具。由于maven的缺省规则有较高的可重用性, 所以常常用两三行maven构建脚本就可以构建简单的项目。

2. maven的作用

l 1) maven对项目的第三方构建(jar包)进行统一管理。向工程中加入jar包不要手工从其他地方拷贝, 通过maven定义jar包的坐标,自动从maven仓库中下载到工程中。

l 2) maven提供一套对项目生命周期管理的标准, 开发人员、和测试人员统一使用maven进行项目构建。项目生命周期管理: 编译、测试、打包、部署、运行。

l 3) maven对工程分模块构建,提高开发效率

 

3. maven的概念模型特点

项目对象模型(project object model) :

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

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

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

Maven定义一套项目生命周期: 

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

一组标准集合

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

l Maven管理项目生命周期过程都是基于插件完成的

例如: 开发中使用的tomcat插件

jar  java rar   java工程的压缩包

war  web rar   web工程的压缩包

4. maven的仓库

l 4.1 maven的仓库分类

仓库名称

作用

本地仓库

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

中央仓库

就是远程仓库, 仓库中jar由专业团队(maven团队)唯一维护。中央仓库的地址: https://mvnrepository.com/

远程仓库

在公司内部假设一台私服, 其他公司假设一台仓库, 对外公开

 

l 4.2 仓库中存放的内容

  1. maven 自身运行所需要的插件
  2. 第三方框架(spring/mybatis/springmvc) 和 工具类的jar包
  3. 我们自己开发的maven下那个么安装后的jar包

5. maven的坐标

Maven的一个核心的作用就是管理项目的依赖, 引入我们所需的各种jar包等。 为了能自动化的解析任何一个java构件,maven必须将这些jar包或者其他资源进行唯一标识, 这是管理项目的依赖的基础, 也就是我们要说的坐标。 包括我们自己开发的项目,也是要通过坐标进行唯一标识的, 这样才能在其他项目中进行依赖引用。坐标的定义元素如下:

l groupId : 定义当前maven项目名称

l artifactId: 定义项目模块

l version : 定义当前项目的当前版本

例如: 要引入junit的测试jar, 只需要在pom.xml 配置文件中配置引入junit的坐标即可

<dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.12</version>

      <scope>test</scope>

</dependency>

二、Maven的安装(软件)

1. 下载maven

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

 

6. 安装maven

将maven压缩包解压, 复制到没有中文没有空格的目录下,即安装完毕

 

7. Maven的目录介绍

 

 

8. 配置环境变量

MAVEN_HOME=E:apache-maven-3.2.1

Path=%MAVEN_HOME%in;... ...

 

 

9. 配置本地仓库

  1. 找到Maven解压目录confsettings.xml 
  2. 在setting.xml 文件中找到 localRepository 标签 
  3. 将 <localRepository>/path/to/local/repo</localRepository>从注释中取出 
  4. 将标签体内容修改为自定义的Maven仓库目录

l 将 /资料/本仓库/xxx.zip解压

复制 E盘根目录下

 

 

l 配置本地仓库

   在maven的安装目录中 apache-maven-3.2.1/conf/settings.xml 配置本地仓库:

 

 

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>E:\Maven_Repository</localRepository>

l  配置阿里云远程仓库(扩展)

 

 

<mirror>

<id>alimaven</id>

<name>aliyun maven</name>

<url>http://maven.aliyun.com/nexus/content/groups/public/</url>

<mirrorOf>central</mirrorOf>        

 </mirror>

10. 测试maven安装成功

打开cmd本地控制台, 输入mvn -version

 

三、IDEA整合本地maven

 

 

 

 

四、IDEA创建maven工程(重点)

1. 创建空的工程

 

 

 

 

11. 创建跳过骨架的java项目(重点)

l 2.1: 创建项目

 

 

 

 

 

创建后的标准java项目骨架:

 

 

l 4.2 创建java代码

 

package cn.itcast.dao;

 

public class ProductDao {

 

    public void add() {

        System.out.println("--------------------1 ProductDao.add()... ...");

    }

 

    public void del() {

        System.out.println("--------------------2 ProductDao.del()... ...");

    }

 

    public void edit() {

        System.out.println("--------------------3 ProductDao.edit().... ...");

    }

 

    public void query() {

        System.out.println("--------------------4 ProductDao.query()... ...");

    }

}

l 4.3 生成测试代码

正式上线前, 每个方法都必须经过测试, 目前我们能够想到的就是main方法.

因为一个类只有一个main方法, 一个类可能有上千个方法, 那得需要多少个方法, 所以 迫切需要更高效方法, junit测试登场了.

 

 

 

 

 

 

 

 

为什么junit报红? 因为缺少junit包, 导入缺少的junit包即可

l 4.4 导入依赖

 

 

<?xml version="1.0" encoding="UTF-8"?>

<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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

 

    <groupId>cn.itcast.maven</groupId>

    <artifactId>javase01</artifactId>

    <version>1.0-SNAPSHOT</version>

    <packaging>jar</packaging>

 

    <dependencies>

        <!--导入junit包-->

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.12</version>

        </dependency>

    </dependencies>

</project>

报红解决:

 

l 4.5 一个一个测试

完成测试代码:

package cn.itcast.dao;

 

public class ProductDaoTest {

    @org.junit.Test

    public void add() throws Exception {

        ProductDao productDao = new ProductDao();

        productDao.add();

    }

 

    @org.junit.Test

    public void del() throws Exception {

        ProductDao productDao = new ProductDao();

        productDao.del();

    }

 

    @org.junit.Test

    public void edit() throws Exception {

        ProductDao productDao = new ProductDao();

        productDao.edit();

    }

 

    @org.junit.Test

    public void query() throws Exception {

        ProductDao productDao = new ProductDao();

        productDao.query();

    }

}

 

l 4.6 

一个一个测试,太累了, 给大家介绍一个简单的.

 

 

12. 创建有骨架java工程(了解)

l 3.1 创建工程

 

 

 

 

 

l 3.2 java工程目录结构

 

l 3.3 编写hello world

 

 

package cn.itcast;

 

public class HelloWorld {

    public static void main(String[] args) {

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

    }

}

总结: 因为创建有骨架的java工程会产生很多多余的配置, 所以实际开发中一般不用.

13. 创建有骨架的web工程(了解)

l 4.1 创建工程

 

 

 

 

 

 

l 4.2 标准web工程目录结构

 

经过对比发现如下问题:

l 问题一:缺少java目录

 

 

 

更改java目录属性:

 

 

l 问题二: 缺少resources目录

 

 

 

 

l 问题三: 缺少test.java

 

 

 

 

 

 

 

总结: 使用骨架创建的web项目 在开发时不常用!

理由1: 在pom.xml增加不必要的配置

理由2: 完整的web工程缺的东西太多!

14. 创建跳过骨架的web工程(重点)

l 5.1 创建工程

 

 

 

复制webapp目录到项目2中

修改pom.xml 增加打包方式为war包

 

l 5.2 配置tomcat插件

因为 web项目最终跑在web服务器中, 所以需要配置 web服务器(tomcat只是其中一个)

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

 

    <groupId>cn.itcast.maven</groupId>

    <artifactId>web02</artifactId>

    <version>1.0-SNAPSHOT</version>

    <!--

        java工程: jar 含义是 java rar

        web工程: war 含义是 web rar

    -->

    <packaging>war</packaging>

    <!--配置插件-->

    <build>

        <plugins>

            <!-- 配置Tomcat插件 -->

            <plugin>

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

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

                <version>2.2</version>

                <configuration>

                    <!--配置端口号-->

                    <port>80</port>

                    <!--配置项目路径-->

                    <path>/web02</path>

                </configuration>

            </plugin>

        </plugins>

    </build>

</project>

 

 

 

测试:

 

五、Maven的常用指令

1. clean命令

 

2. compile命令

 

15. test 命令

测试命令: 执行 src/test/java 下junit的测试用例

 

在src/test/java下创建测试类DemoTest

 

 

控制台测试结果如下:

 

16. package命令

mvn package, 打包项目

 

打包后的项目会在target目录下找到:

 

 

17. install命令

mvn install, 打包后将其安装在本地仓库

 

安装完毕后,可以在本地仓库中找到 对应的项目:

 

六、依赖管理

1. maven插件

maven是一个核心引擎, 提供了基本的项目处理能力和建设过程的管理, 以及一系列的插件是用来执行实际建设任务。maven插件可以完成一些特点的功能。例如, 集成jdk插件可以方便的修改项目的编译环境; 集成tomcat插件后, 无需安装tomcat服务器就可以运行tomcat进行项目的发布与测试, 在pom.xml中通过plugin标签引入maven的功能插件

l 1. jdk编译版本的插件

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

 

    <groupId>cn.itcast</groupId>

    <artifactId>maven_javaweb02</artifactId>

    <version>1.0-SNAPSHOT</version>

 

    <build>

        <plugins>

            <!-- java编译插件 -->

            <plugin>

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

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

                <version>3.2</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                    <encoding>UTF-8</encoding>

                </configuration>

            </plugin>

        </plugins>

    </build>

 

</project>

 

 

 

 

l 2. tomcat7服务端的插件

配置tomcat插件

<!-- 配置Tomcat插件 -->

<plugin>

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

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

<version>2.2</version>

<configuration>

    <path>/aaa</path>

    <port>8888</port>

</configuration>

</plugin>

运行tomcat插件

 

tomcat 插件注意问题

Maven的中央仓库中只有tomcat7.X版本

如果想使用tomcat8.X版本,

1. 需要从第三方仓库查找

2. 或者使用idea集成外部的tomcat插件

l 3 扩展插件: IDEA的lombok插件

步骤一: 安装lombok插件,重启idea

 

步骤二 : pom.xml到如lombok的jar包

 

步骤三: 编写POJO类 ,使用lombok提供的注解,代替 set get toString方法

package com.itheim.pojo;

 

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

 

/**

 * 目的: 使用lombok 插件提供的注解,给该类提供   set方法  get方法  toString方法

 * 编写测试

 *

 * 实现步骤:

 * 1.安装lombok插件,重启idea

 * 2.pom.xml到如lombok的jar包  (如果本地仓库有该jar ,自动提示补全,如果没有?)

 * 3.在Person类上添加一个@Data注解   ( set方法  get方法  toString方法)

 * 4.编写测试类,使用以上提供的方法,打印查看

 */

 

@Data   //set方法  get方法  toString方法  没有全餐构造

@AllArgsConstructor

@NoArgsConstructor

public class Person {

    private String name;

    private int age;

    private String sex;

}

步骤四: 测试lombok的使用

package com.itheim.pojo;

 

import org.junit.Test;

 

public class PersonTest {

 

    @Test

    public void  testPerson(){

        Person p = new Person();

        p.setName("柳岩");

        p.setAge(18);

        p.setSex("女");

 

        System.out.println(p.getName());

        System.out.println(p);

    }

}

2. 导入依赖

l 1. 导入junit依赖

导入junit坐标

<dependencies>

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>4.12</version>

    </dependency>

</dependencies>

 

进行单元测试

import org.junit.Test;

 

public class DemoTest {

    @Test

    public void demo1() {

        System.out.println("敢于亮剑,绝不后退!");

    }

}

 

3.依赖范围

 

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

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

l Provided: 编译、和测试有效, A在编译和测试时需要B

例如: 如果某些包在运行的时候, 所对应的容器内已经有这个jar包, 此时就不需要在将包打入, 只需要让其在编译和测试中有效即可

l runtime: 测试、运行有效

例如: jdbc驱动包, 在开发代码中针对java接口开发, 编译不用 , 在运行和测试时, 需要通过jdbc驱动包(mysql) 连接数据库, 需要时会打入war

l test: 只是测试有效, 只在单元测试类中用

例如: junit 只需要测试用即可, 不会打到war包

按照依赖强度, 由强到弱来排序:

compile > provided > runtime >test

七、聚合工程

项目开发通常是分组分模块开发, 每个模块开发完成后, 要运行整个工程需要将每个模块聚合在一起运行, 此时需要多个工程合并在一个大的工程中,我们将这样的工程称为聚合工程

 

在父工程, 主要是可以对多个子工程进行管理: 比如 锁定jar包的版本,定义一些公共的插件(jdk的编译插件)等

在子工程中 可以根据自己的业务需要, 使用对应的jar包, 如果在父工程中定义了对应jar包的版本后, 子工程此时不需要指定jar包版本, 同时如果父工程已经定义了相关的插件, 子工程也无需定义

 

接下来, 尝试定义一个聚合工程, 演示响应的内容:

 

l 1) 创建父工程项目

 

 

 

 

 

 

注意: 父工程 仅仅是对jar包和插件的管理操作, 没有任何业务代码, 顾不需要src

l 2) 创建子工程

 

 

 

 

 

l 3) 依次来构建另外两个子工程即可

最终效果:

 

l 4) 三个子工程建立依赖关系

 

 

l 5) 此时在父工程中添加一个jdk的编译插件

首先我们先看没有添加版本插件之前, 整个maven工程的默认编译版本

 

在bigdata18_parent的pom文件添加一个jdk的编译插件

 

此时在观察所有maven项目的版本:

 

发现都变成了1.8. 说明在父工程添加插件, 子工程都会继承

其实:同样在父工程里面添加jar包, 子工程也会进行继承的

l 6) 版本锁定: 在父工程 对jar包的版本进行锁定

 

 

<dependencyManagement>锁定版本, 此时在父工程中并不会真正的将这个jar包导入

我们现在在任意子工程中进行导入junit的jar包:

 

原文地址:https://www.cnblogs.com/shan13936/p/13904368.html