zoukankan      html  css  js  c++  java
  • 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包:

     

  • 相关阅读:
    vsftpd 启动 vsftpd:500 OOPS: bad bool value in config file for: guest_enable
    Vsftpd服务传输文件(转)
    搭建FTP服务
    sed命令
    创建服务类脚本
    jvm 方法区
    B+与B-树
    适配器模式
    java 垃圾回收总结(可达性分析 引用分类
    HBase常见问题答疑解惑【持续更新中】
  • 原文地址:https://www.cnblogs.com/shan13936/p/13904368.html
Copyright © 2011-2022 走看看