Maven总结

1. Maven简介

Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

Maven的作用:

  1. 可以使用maven创建项目
  2. 管理项目生命周期
  3. 引入依赖(jar包)
  4. 分模块构建项目

Maven仓库:

  1. 本地仓库:相当于缓存;Maven所需要的任何构件都是直接从本地仓库获取的,如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件
  2. 中央仓库:由Maven社区提供的仓库,其中包含了大量常用的库。如:阿里云的maven中央仓库:https://maven.aliyun.com/mvn/guide
  3. 远程仓库:开发人员自己定制的仓库,包含了所需要的代码库或者其他工程中用到的jar文件;

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

  1. groupId:项目组织唯一的标识符,实际对应Java包的结构
  2. artifactId:项目的名称
  3. version:项目的当前版本

2. Maven安装

2.1 Windows版本安装
  1. 官网下载Maven:http://maven.apache.org/download.cgi

    1. Linux系统下载Link下的Binary tar.gz archive,如:apache-maven-3.6.3-bin.tar.gz
    2. Windows系统下载Link下的Binary zip archive,如:apache-maven-3.6.3-bin.zip
  2. 将压缩包解压

  3. 添加环境变量

    1. MAVEN_HOME配置到bin的上一级,如:MAVEN_HOME=E:\Develop\Maven\apache-maven-3.6.3
    2. path配置到bin目录:%MAVEN_HOME%\bin
  4. 在MAVEN_HOME\conf\settings.xml文件中的settings标签里配置本地仓库:

    <localRepository>E:\Develop\Maven\repository</localRepository>
    
  5. 在MAVEN_HOME\conf\settings.xml文件中的mirrors标签里配置阿里云maven中央仓库:

    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    
  6. 在MAVEN_HOME\conf\settings.xml文件中的profiles标签里配置默认jdk版本和spring代理仓库:

    <profile>
        <id>jdk-1.8</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            <encoding>UTF-8</encoding>
        </properties>
        <repositories>
            <!--在repositories标签中可加入其它代理仓库使用地址。以使用spring代理仓为例:-->
            <repository>
                <id>spring</id>
                <url>https://maven.aliyun.com/repository/spring</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
    </profile>
    
  7. 测试Maven是否安装成功:在cmd中输入mvn -version

    C:\Users\15508>mvn -version
    Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
    Maven home: E:\Develop\Maven\apache-maven-3.6.3\bin\..
    Java version: 1.8.0_261, vendor: Oracle Corporation, runtime: E:\Develop\Java\jdk1.8.0_261\jre
    Default locale: zh_CN, platform encoding: GBK
    OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
    
    C:\Users\15508>
    

Maven目录简介:

  1. bin:Maven命令
  2. boot:第三方类加载框架
  3. conf:配置文件
  4. lib:Maven自身jar包
2.2 Linux版本安装
  1. 官网下载Maven:http://maven.apache.org/download.cgi

  2. 安装Maven:

    tar xf apache-maven-3.6.3-bin.tar.gz 
    mv apache-maven-3.6.3 /usr/local/
    ln -s /usr/local/apache-maven-3.6.3/ /usr/local/maven
    
  3. 添加环境变量:

    在/etc/profile中追加
    export PATH=/usr/local/maven/bin/:$PATH
    然后重新加载/etc/profile:source /etc/profile
    
  4. 设置阿里云maven中央仓库:

    vim /usr/local/maven/conf/settings.xml
    158行下面添加
    <mirror>
    	<id>nexus-aliyun</id>
    	<mirrorOf>*</mirrorOf>
    	<name>Nexus aliyun</name>
    	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    

3. IDEA集成Maven*

  1. 在初始创建项目的界面点击Configure–>Settings
  2. 点击:Build, Execution, Deployment–>Build Tools–>Maven
  3. Maven home directory为Maven的安装路径:E:\Develop\Maven\apache-maven-3.6.3
  4. User settings file为settings.xml文件路径:E:\Develop\Maven\apache-maven-3.6.3\conf\settings.xml
  5. Local repository为本地仓库路径:E:\Develop\Maven\repository
  6. 点击:Build, Execution, Deployment–>Build Tools–>Maven–>Runner
  7. VM Options设置为(创建项目时找本地仓库中的插件来创建项目):-DarchetypeCatalog=internal
  8. 创建新的Project,第一次使用maven创建时,一定要联网

3. 使用IDEA创建Maven项目

3.1 使用Maven骨架创建JavaSE模块
  1. 新建Maven模块–>勾选Create from archetype–>点击org.apache.maven.archetypes:maven-archetype-quickstart–>Next

  2. 设置Name、Location、groupId、artifactId、version

  3. pom.xml文件说明:

    <!--
    properties:项目的一些属性
    project.build.sourceEncoding:项目构建时的字符集
    maven.compiler.source:编译源码的jdk版本
    maven.compiler.target:编译目标的jdk版本
    -->
    
    <!--
    dependencies:项目引入的所有依赖
    dependency:每一个依赖的信息
    scope:依赖的使用范围,test表示只能在test里使用
    -->
    
  4. 项目结构:

    .
    ├── pom.xml				Maven的配置文件(配置、依赖、...)
    └── src
        ├── main
        │   ├── java		存放java源码
        │   └── resources	存放配置文件
        └── test
            └── java		存放单元测试用例
    
3.2 不使用Maven骨架创建JavaSE模块
  1. 新建Maven模块–>Next
  2. 设置Name、Location、groupId、artifactId、version
  • 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>com.liu2m</groupId>
        <artifactId>maven01</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!--该项目的打包方式-->
        <packaging>jar</packaging>
    </project>
    
3.3 使用Maven骨架创建JavaWeb模块
  1. 新建Maven模块–>勾选Create from archetype–>点击org.apache.maven.archetypes:maven-archetype-webapp–>Next

  2. 设置Name、Location、groupId、artifactId、version

  3. 在pom.xml文件的dependencies标签里引入Servlet的依赖:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    
  4. 配置Tomcat,部署该模块

  5. 项目结构:

    .
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   ├── resources
        │   └── webapp
        │       ├── index.jsp
        │       └── WEB-INF
        │           └── web.xml
        └── test
            └── java
    
3.4 不使用Maven骨架创建JavaWeb模块
  1. 新建Maven模块–>Next

  2. 设置Name、Location、groupId、artifactId、version

  3. 在pom.xml文件中配置打包方式为war

    <packaging>war</packaging>
    
  4. 在pom.xml文件的dependencies标签里引入Servlet的依赖:

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
    
  5. 在Project Structure项目的Web下的Deployment Descriptors中添加WEB-INF\web.xml:路径前缀为Web Resource Directories中的路径

4. Maven常用命令

  1. mvn clean:删除编译产生的target文件夹
  2. mvn compile:编译src/main/java目录的下的代码
  3. mvn test:先将main、test中的内容进行编译,然后执行src/test/java/下所有junit的测试用例
  4. mvn package:打包项目
  5. mvn install:将项目打包后安装到本地仓库
  • 安装第三方jar包到本地仓库:

    cmd切换到jar包所在目录,然后执行:
    mvn install:install-file -DgroupId=项目组织标识符 -DartifactId=项目名称 -Dversion=项目当前版本 -Dfile=jar文件名 -Dpackaging=jar
    

5. 引入依赖

在pom.xml文件的dependencies标签里使用dependency标签引入依赖

scope编译测试运行
compile
provided
runtime
test
system

scope默认为compile

解决Maven中依赖版本冲突:相同的jar包,但版本不一致

  1. 路径近者优先:直接依赖比传递依赖路径近,最终进入项目的jar包会是路径近的直接依赖包

    1. 直接依赖:项目中直接导入的jar包
    2. 传递依赖:项目中没有直接导入的jar包,可以通过中直接依赖包传递到项目中
  2. 路径相同时,pom文件中声明顺序优先

  3. 无法通过依赖管理原则排除的,使用直接排除法

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
        <!--exclusions排除依赖传递的jar包-->
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

6. 工程分层*

开发时可以分模块开发,运行整个工程时需要将各个模块聚合在一起

parent父工程:存放项目的所有jar包

web、service、dao子工程可以选择性的继承jar包并在自己的工程中使用,这样可以消除jar包重复并锁定版本,安装parent就可以将所有子工程全部安装

web依赖于service,service依赖于dao,访问时可以直接启动parent或安装后启动web

给工程分层:

  1. 创建一个Maven项目作为父工程,打包方式为pom

    <!--父工程的pom.xml-->
    <modules>
        <!--每一个module标签的名称要和子工程的artifactId一致-->
        <module>model</module>
    </modules>
    <!--dependencyManagement只是管理依赖,而非导入依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. 在父工程下创建各个子工程

    <!--子工程的pom.xml-->
    <!--parent为父工程的坐标-->
    <parent>
        <artifactId>parent</artifactId>
        <groupId>com.liu2m</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <!--子工程的groupId和version默认使用父工程的-->
    <artifactId>model</artifactId>
    <packaging>jar</packaging>
    

7. Maven插件-

在pom.xml文件的build标签里的plugins标签中使用plugin标签引入插件

  1. JDK编译版本插件:方便修改项目的编译环境

    <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>
    
  2. Tomcat服务端插件(部署项目):无需安装Tomcat服务器就可以运行tomcat进行项目的发布与测试

    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <configuration>
            <!-- 指定端口 -->
            <port>8080</port>
            <!-- 请求路径 -->
            <path>/</path>
        </configuration>
    </plugin>
    

8. Maven私服-

Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。

8.1 安装Nexus
  1. 解压Nexus的压缩包
  2. 以管理员身份运行cmd,切换到bin目录,执行:nexus.bat install
  3. 在服务中查看是否有nexus服务
  4. 启动Nexus:
    1. 方式1:cmd进入bin目录,执行:nexus.bat start
    2. 方式2:直接启动nexus服务
  • 卸载Nexus:cmd进入bin目录,执行:nexus.bat uninstall

  • nexus的配置文件:conf/nexus.properties

8.2 nexus的仓库类型
  1. hosted:宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分
  2. proxy:代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件
  3. group:仓库组,用来合并多个hosted/proxy仓库
  4. virtual:兼容Maven1版本的jar或者插件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值