项目管理工具Maven(一)

  1. Maven的概念
    1. 什么是Maven
  • 翻译为"专家","内行"
  • Maven是跨平台项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
  • 什么是理想的项目构建?
    • 高度自动化,跨平台,可重用的组件,标准化的
  • 什么是依赖?为什么要进行依赖管理?
    • 自动下载,统一依赖管理
    • A1.0 依托于 B 2.0 依托于 C3.0
  • 有哪些项目信息
    • 项目名称描述等,开发人员信息,开发者信息等
    1. 什么是依赖管理

对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包。

对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。


    1. 什么是项目构建

项目构建:是一个从编写源代码到编译、测试、运行、打包、部署的过程。

传统项目和maven项目构建的两种方式

传统项目:

打开Idea编写源代码和配置文件,对源代码进行编译,可以使用Junit进行单元测试,把项目打成war包,部署到Tomcat服务器中运行。

maven项目:

maven将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。

清理 --> 编译 --> 测试 --> 报告 --> 打包 --> 部署

好处:

可以通过命令完成项目构建。(测试:使用mvn tomcat:run的命令来发布运行项目)

maven对每个构建阶段进行规范,有利于大型团队协作开发。

    1. Maven的应用场景

maven的应用场景,开发人员只要按着maven标准的目录结构进行开发即可,然后提交代码。在测试服务器上拉取Java源码,然后可以使用maven的自动化项目构建完成项目的清理、编译、测试、打包和安装部署等。

    1. 为什么使用Maven
  • IDE?Eclipse?IDEA?
    • 手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成
    • 每个人的IDE配置都不同,很容易就出错出现本地代码换个地方编译
  • Ant?
    • 没有一个约定的目录结构
    • 必须明确让ant做什么,什么时候做,然后编译,打包
    • 没有生命周期,必须定义目标及其实现的任务序列
    • 没有集成依赖管理
  • Maven?
    • 拥有约定,知道你的代码在哪里,放到哪里去
    • 拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
    • 只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情
    • 拥有依赖管理,仓库管理
    1. Maven模型
  1. 初识Maven
    1. Maven 安装
      1. 安装准备
      1. Maven 安装目录分析

bin:含有mvn运行的脚本

boot:含有plexus-classworlds类加载器框架

conf:含有settings.xml配置文件

lib:含有Maven运行时所需要的java类库

LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍

      1. Maven的环境变量
  • 设置MAVEN_HOME环境变量
  • 升级时只需要下载最新版本,解压缩重新设置MAVEN_HOME环境变量即可
  • 设置MAVEN_OPTS环境变量
  • -Xms128m -Xmx512m
  • 配置用户范围的settings.xml
  • %MAVEN_HOME%/conf/settings.xml 全局的
  • ~/.m2/settings.xml 单个用户的

设置MAVEN_HOME环境变量,把maven的解压后的路径添加为变量值

设置Path环境变量,把 %MAVEN_HOME%\bin 添加到Path的变量值末尾,与前面的内容用 ; 隔开,如图:

配置MAVEN_OPTS运行环境变量大小,(解决大型项目内存溢出的问题)

(找到命令改参数治标不治本)

-Xms128m -Xmx512m

验证配置是否完成

    1. Maven的第一个项目
      1. 按照约定创建 M aven项目目录
  • src/main/java ------ 存放项目的.java文件
  • src/main/resources ------ 存放项目资源文件,如spring, mybatis配置文件
  • src/test/java ------ 存放所有测试.java文件,如JUnit测试类
  • src/test/resources ------ 测试资源文件
  • target ------ 项目输出位置
  • pom.xml
      1. 在项目Hello根目录建立pom.xml

<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.tx.maven</groupId>

<artifactId>Hello</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>Hello</name>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.9</version>

<scope>test</scope>

</dependency>

</dependencies>

</project>

      1. 创建Hell o.java 文件

在src/main/java/cn/tx/maven目录下新建文件Hello.java

package cn.tx.maven;

public class Hello {

public String sayHello(String name){

return "Hello "+name+"!";

}

}

      1. 创建 HelloTest.java 文件

在/src/test/java/cn/tx/maven目录下新建测试文件HelloTest.java

package cn.tx.maven;

import org.junit.Test;

import static junit.framework.Assert.*;

public class HelloTest {

@Test

public void testHello(){

Hello hello = new Hello();

String results = hello.sayHello("maven");

assertEquals("Hello maven!",results);

}

}

      1. 进行maven的项目操作
  1. 打开cmd命令行,进入Hello项目根目录执行 mvn compile命令,查看根目录变化

  2. cmd 中继续录入mvn clean命令,然后再次查看根目录变化

  3. cmd 中录入 mvn clean compile命令, 查看根目录变化

  4. cmd 中录入 mvn clean test命令,查看根目录变化

  5. cmd 中录入 mvn clean package命令,查看根目录变化

  6. cmd 中录入 mvn clean install 查看仓库会把项目安装到仓库里

    1. M aven 的第二个项目
      1. 按照约定创建Maven项目目录

HelloFriend

--src

-----main

----------java

----------resources

-----test

---------java

---------resources

--pom.xml

      1. 在项目HelloFriend根目录建立pom.xml

在项目HelloFriend根目录建立pom.xml

<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.tx.maven</groupId>

<artifactId>HelloFriend</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>HelloFriend</name>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.9</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>cn.tx.maven</groupId>

<artifactId>Hello</artifactId>

<version>0.0.1-SNAPSHOT</version>

<scope>compile</scope>

</dependency>

</dependencies>

</project>

      1. 创建 HelloFriend.java 文件

在src/main/java/cn/tx/maven目录下新建文件HelloFriend.java

package cn.tx.maven;

import cn.tx.maven.Hello;

public class HelloFriend {

public String sayHelloToFriend(String name){

Hello hello = new Hello();

String str = hello.sayHello(name)+" I am "+this.getMyName();

System.out.println(str);

return str;

}

public String getMyName(){

return "John";

}

}

      1. 创建 HelloFriendTest.java 文件

在/src/test/java/cn/tx/maven目录下新建测试文件HelloFriendTest.java

package cn.tx.maven;

import static junit.framework.Assert.assertEquals;

import org.junit.Test;

import cn.tx.maven.Hello;

public class HelloFriendTest {

@Test

public void tesHelloFriend(){

HelloFriend helloFriend = new HelloFriend();

String results = helloFriend.sayHelloToFriend("zhangsan");

assertEquals("Hello zhangsan! I am John",results);

}

}

      1. 测试打包He lloFriend 项目

在HelloFriend目录下执行命令mvn package

系统报错提示:Could not find artifact cn.tx.maven:Hello:jar:0.0.1-SNAPSHOT,表示无法找到HelloFriend所依赖的Hello 0.0.1-SNAPSHOT.jar

故此我们需要重新构建第一个项目Hello并安装到数据仓库,在命令行Hello根目录下执行mvn clean install

对Hello项目进行清理并安装后,对HelloFriend项目再次进行打包

可以看到本次打包成功,说明HelloFriend项目已经可以加载Hello项目所打包的jar包

    1. Maven仓库配置
      1. Maven仓库概念
  • 何为Maven仓库?
    • 用来统一存储所有Maven共享构建的位置就是仓库
  • Maven仓库布局
    • 根据Maven坐标定义每个构建在仓库中唯一存储路径
    • groupId/artifactId/version/artifactId-version.packaging
  • 仓库的分类
    • 本地仓库
      • ~/.m2/repository/ 可修改
      • 每个用户只有一个本地仓库
    • 远程仓库
      • 中央仓库:Maven默认的远程仓库

http://repo1.maven.org/maven2

      • 私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
      1. Maven本地仓库配置
        1. 全局本地仓库(所有操作系统用户均影响)

%MAVEN_HOME%\conf\settings.xml文件,修改该文件会影响所有使用该Maven的用户的本地仓库,例如:

        1. 用户本地仓库(仅影响使用该配置文件的用户或程序)

该文件可以在任意目录,例如:

        1. 修改配置文件设置Maven本地仓库(以全局设置为例)

编辑D:\TOOLS\maven\apache-maven-3.5.4\conf\settings.xml文件

找到如下位置:

修改为:

保存退出即可

以上配置表示所有使用该Maven的程序或用户,如未单独配置,则默认加载以上目录的本地库文件;

Ps:课程提供本地库文件为shoprapository.zip,如果遇到打包不成功,jar包无法下载等情况,优先进行本地库配置,避免因网络导致的maven依赖包问题.

    1. IDEA 整合Maven项目
      1. IDEA 的Maven全局配置

启动IDEA后找到Settings

以上设置完成表示在本idea上,所有项目如未对Maven的配置进行单独配置,则默认均使用该Maven版本和本地库设置;

      1. IDEA 创建Maven的Java项目

至此Maven的Java项目创建完成

测试Maven的jar包引入

以上,在IDEA上使用Maven进行Java项目的创建及测试已完成!

      1. I DEA 创建Maven的Java web项目

配置完毕后会进行web项目的初始化,初始化过程取决于本地库是否已生成及网络情况,推荐使用课程提供的Maven本地库

如果创建项目速度非常慢,并且在Generating project in Batch mode卡住,则进行全局设置如下:

-DarchetypeCatalog=local

以上web项目则创建成功,接下来需要进行一些配置来确定web项目可以正常运行

添加war包的方法:

配置web服务器

添加本地tomcat配置

测试项目运行

至此,在IDEA上使用Maven配置的Java web工程已经完成配置

      1. I DEA 导入既有 M aven项目

以导入刚才的Maven项目的例子做示范:

导入引入依赖Hello项目的HelloFriend项目,可以看到Hello项目已经被打成jar包引用到HelloFriend的Maven依赖中

Maven项目视图主要用于查看该maven项目的各项属性,同时也可以进行一些常见的maven的操作,比如打包,清理,测试等等;

相关推荐
乘风破浪的咸鱼君2 小时前
java线程共享模型之管程(synchronized原理、wait-notify、park方法)
java
咖猫2 小时前
Google guava 最佳实践 学习指南之08 `BiMap`(双向映射)
java·开发语言·guava
娶个名字趴2 小时前
Redis(2)常用命令
java·数据库·redis·缓存
滿2 小时前
处理错误的两种方式:try...catch 与 then...catch
java·开发语言
Ttang233 小时前
Tomcat原理(4)——尝试手动Servlet的实现
java·开发语言·servlet·java-ee·tomcat·intellij-idea
lzz的编码时刻3 小时前
Java 8 Optional 详细使用教程-优雅解决NPE
java
计算机毕设指导63 小时前
基于Springboot林业产品推荐系统【附源码】
java·开发语言·spring boot·后端·mysql·spring·intellij-idea
CQU_JIAKE3 小时前
12.8&12.9[java exp4][debug]跨域问题原因详解
java·开发语言
南宫生4 小时前
力扣-图论-15【算法学习day.65】
java·学习·算法·leetcode·图论
洛嘚4 小时前
@FeignClient用于Nacos微服务间的接口调用
java·服务器