超详细Maven教程

Maven

Maven是一个项目资源管理工具

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

Maven优点:

  • 简化项目依赖jar包管理,防止冲突
  • 便于项目升级,项目依赖jar包升级
  • 有助于项目开发,一个模块开发好后,发布到仓库,需要依赖改模块是可以从仓库引入
  • maven有很多插件,便于工能扩展
  • 便于与持续集成工具(jenkins)整合

Maven解决问题

​ 1.解决项目中jar包需要手动导入,一旦jar包资源过多,容易造成遗漏

​ 2.解决项目导包,比较麻烦

Maven的专业术语

中央仓库(Central Repository),

​ 官方维护, 存放所有相关的jar包(包含各个版本)

本地仓库(Local Repository),

​ maven项目都是从本地仓库加载jar包的

镜像仓库(Mirror Repository),

​ 国内有能力的组织(机构)搭建的仓库, 这个仓库就是将中央仓库中的所有内容复制了一份存起来.

jar包定位:坐标,三部分构成

  • GroupId 一般是公司逆向域名
  • Artifactld 项目名
  • Version 版本号

Maven安装配置

  1. 将maven的压缩包解压到指定的文件夹中
  2. 配置maven的本地仓库地址
  3. 在idea中继承maven

Maven setting.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:/RepositorylocalRepository>

  <mirrors>
	
	<mirror>
		<id>alimavenid>
		<name>aliyun mavenname>
		<url>http://maven.aliyun.com/nexus/content/groups/public/url>
		<mirrorOf>centralmirrorOf>
	mirror>
  mirrors>

  <profiles>
	
	<profile>
		<id>jdk-1.8id>
		<activation>
			<activeByDefault>trueactiveByDefault>
			<jdk>1.8jdk>
		activation>
		<properties>
			<maven.compiler.source>1.8maven.compiler.source>
			<maven.compiler.target>1.8maven.compiler.target>
				<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
		properties>
	profile>
  profiles>
settings>

Maven项目类型

类型 对应项目 描述
jar java工程 目最终被打包为jar包
war wen工程 项目被打包为war包
pom 逻辑工程 父工程必须是pom类型的工厂,pom工程中不写java代码,管理子工程

项目结构

  • projectname -------------- 项目名
    • src
      • java -------------- 存放项目核心代码
      • resource ---------- 存放项目配置文件
    • test
      • java ---------------- 存放测试代码
    • pom.xml ---------------- 引入jar包,maven项目配置

scope作用域

指依赖的jar包作用范围

compile:不写默是compile,指Maven项目依赖的jar包,在编译、测试、运行有效,由于运行时需,依赖会被打包

示例

<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <version>8.0.20version>
dependency>

provided:Maven项目依赖的jar包,只在编译和测试时需要,在运行时不需要

​ 比如:servlet api/jsp-api 被 tomcat 容器提供。

示例

<dependency>
    <groupId>javax.servletgroupId>
    <artifactId>javax.servlet-apiartifactId>
    <version>3.1.0version>
    <scope>providedscope>
dependency>

runtime:Maven项目依赖的jar包,只在运行和测试时需要,在编译时不需要

​ 比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。

test:指依赖的jar包,在编译和运行时都不需要,只在测试编译和测试运行阶段可用

​ 比如:junit。由于运行时不需要所以 test范围依赖不会被打包

实例


<dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <version>${junit-version}version>
    <scope>testscope>
dependency>

system:依赖于provided类似,但必须指定jar文件路径,指定systemPath磁盘路径,不推荐使用

Maven 指令

clean

清除maven项目下的target目录中的class和本地仓库中已打包的文件

validate

验证工程是否正确,所有需要的资源是否可用

compile

即编译项目中的java文件,并存放在项目的编译目录

test

即运行项目中的测试用例文件,如果测试用例未通过,也会打包失败,这里test过程可以在pom中通过配置跳过。

package

将本地编译好的文件打包为war 或者jar

verify

运行任何检查,验证包是否有效且达到质量标准

install

将打包的代码存放到本地maven仓库,可供本地其它项目依赖使用

site

生成项目报告,站点,发布站点

deploy

将打包在本地仓库中的项目发布到服务器,供他人依赖使用

常用Maven指令

clean

package

install

test

Maven 指令生命周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P9m2dpqD-1609420321238)(.\img\Maven指令生命周期.png)]

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle 生成项目报告,站点,发布站点。

Maven项目之间关系

Maven项目依赖关系

什么是Maven项目依赖关系?

依赖关系指一个项目依赖另一个项目资源,指项目之间的调用

项目A中会使用项目B中的资源,我们会将项目B的包导入到项目A中使用那么项目A和项目B之间就是依赖关系。项目A依赖项目B

Maven项目依赖关系的使用

​ ① 创建项目A完成功能开发

​ ② 在项目A的pom文件中配置项目B或者其他第三方资源的资源坐标

​ ③ 在项目A中正常调用项目B的资源即可。

依赖原则

​ 依赖jar包有相同情况,路径不同间接依赖中maven采用的是路径最短者优先

​ 路径相同间接依赖中maven 采用的是依赖定义顺序从上到下

依赖关系实现

 <dependency>
            <groupId>com.testgroupId>
            <artifactId>05maven_gx_ylaartifactId>
            <version>1.0-SNAPSHOTversion>
            
            <exclusions>
                <exclusion>
                    <groupId>org.mybatisgroupId>
                    <artifactId>mybatisartifactId>
                exclusion>
            exclusions>
        dependency>

Maven项目继承关系

什么是Maven项目继承关系?

子项目可以直接调用父项目资源,父项目必须是pom类型,

子项目通过父项目pom.xml获得资源,指的是pom资源继承,不是项目功能代码继承

Maven项目继承关系使用

​ ① 创建两个maven项目,项目parent和项目child,项目paren是pom类型,没有代码

​ ② 建立两个项目之间的继承关系

​ 在子项目中的pom.xml文件中使用parent标签,并声明父项目的资源坐标即可

​ ③ 观察在父项目中配置资源,在子项目中是否会自动加载相关资源

注意:

​ (1) maven项目的继承关系中的父项目要创建为pom类型

​ (2) 继承关系中的maven项目是相互独立的,本质就是两个项目

继承关系实现


<parent>
    <groupId>com.testgroupId>
    <artifactId>06maven_gx_jcpomartifactId>
    <version>1.0-SNAPSHOTversion>
parent>

<dependencies>
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
    dependency>
dependencies>

Maven项目聚合关系

什么是Maven项目聚合关系?

快速构建,将一个Maven项目,划分为多个子项目。前提是子项目必须继承父项目

Maven项目聚合关系使用

① 创建一个maven pom类型项目

② 在pom项目下创建多个 module

Maven项目聚合关系实现

父项目

<groupId>com.testgroupId>
<artifactId>07maven_gx_jhartifactId>
<version>1.0-SNAPSHOTversion>
<modules>
    <module>jh_pojomodule>
    <module>jh_utilmodule>
modules>
<packaging>pompackaging>

子项目

<parent>
    <artifactId>07maven_gx_jhartifactId>
    <groupId>com.testgroupId>
    <version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>jh_pojoartifactId>

继承和聚合之间区别

​ 继承目的是减少重复配置,是一种单向的,子项目继承父项目配置,父项目不能访问子项目

​ 聚合目的是快速构建项目,一个项目拆分成多个项目,是一种双向的,前提必须是继承。子项目继承父项目,父项目可以访问子项目

部署

什么是部署?

将项目部署到服务器,在服务器运行

手动部署

​ ① 使用maven将项目整体打包到本地仓库中

​ ② 在idea中找到war类型的web项目将其target文件夹下的war包上传到其他的tomcat中,然后启 动其他的tomcat

​ ③ 在本地的浏览器中访问另一个中的web项目

注意:访问项目的虚拟项目的名字为tomcat下的war包解压后的文件夹的名字

远程热部署

什么是远程热部署?

​ 远程上传项目部署到服务器

实现步骤

  1. tomcat tomcat-user.xml文件 配置登录账号

    <role rolename="manager-gui"/>
    <role rolename="manager-script "/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
     <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
    
  2. 启动tomcat服务器

  3. 在maven项目中配置pom.xml文件,tomcat7-maven-plugin 插件远程上传

 
<plugin>
    <groupId>org.apache.tomcat.mavengroupId>
    <artifactId>tomcat7-maven-pluginartifactId>
    <version>2.2version>
    <configuration>
        
        <url>http://192.168.1.75:8080/manager/texturl>
        <username>adminusername>
        <password>adminpassword>
        
        <path>/flowerpath>
        
        <update>trueupdate>
    configuration>
plugin>
  1. tomcat7-maven-plugin 插件使用deploy名,远程部署

  2. 访问tomcat服务器中部署好的项目

pom.xml文件配置

引入jar包

<dependencies>
    
    <dependency>
        <groupId>javax.servletgroupId>
        <artifactId>javax.servlet-apiartifactId>
        <version>3.1.0version>
        <scope>providedscope>
    dependency>

    <dependency>
        <groupId>javax.servlet.jspgroupId>
        <artifactId>jsp-apiartifactId>
        <version>2.1version>
        <scope>providedscope>
    dependency>
dependencies>

定义依赖jar包版本号


<properties>
    <mysql-version>8.0.17mysql-version>
properties>
<dependencies>
    
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>${mysql-version}version>
    dependency>
dependencies>

排除依赖jar包中的依赖

<dependency>
    <groupId>com.testgroupId>
    <artifactId>05maven_gx_ylaartifactId>
    <version>1.0-SNAPSHOTversion>
    
    <exclusions>
        <exclusion>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
        exclusion>
    exclusions>
dependency>

依赖管理

 
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.11version>
        dependency>

        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.5.2version>
        dependency>

        <dependency>
            <groupId>com.google.code.gsongroupId>
            <artifactId>gsonartifactId>
            <version>2.8.5version>
        dependency>
    dependencies>
dependencyManagement>

继承父项目

<dependency>
    <groupId>com.testgroupId>
    <artifactId>05maven_gx_ylaartifactId>
    <version>1.0-SNAPSHOTversion>
    
    <exclusions>
        <exclusion>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
        exclusion>
    exclusions>
dependency>

调用父项目资源


<dependencies>
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
    dependency>
dependencies>

Maven项目资源拷贝插件

<build>
    
    <resources>
        <resource>
            <directory>src/main/javadirectory>
            <includes>
                <include>**/*.xmlinclude>
            includes>
            <filtering>truefiltering>
        resource>
        <resource>
            <directory>src/main/resourcesdirectory>
            <filtering>truefiltering>
        resource>
    resources>
build>

引入tomcat插件并远程热部署

<build>
    <plugins>
        
        <plugin>
            <groupId>org.apache.tomcat.mavengroupId>
            <artifactId>tomcat7-maven-pluginartifactId>
            <version>2.2version>
            <configuration>
                
                <url>http://192.168.1.75:8080/manager/texturl>
                <username>adminusername>
                <password>adminpassword>
                
                <path>/flowerpath>
                
                <update>trueupdate>
            configuration>
        plugin>
    plugins>
build>

引入tomcat插件部署不使用远程热部署


<plugin>
    <groupId>org.apache.tomcat.mavengroupId>
    <artifactId>tomcat7-maven-pluginartifactId>
    <version>2.2version>
    <configuration>
        
        <port>8080port>
        
        <path>/flowerpath>
    configuration>
plugin>
  <username>adminusername>
                <password>adminpassword>
                
                <path>/flowerpath>
                
                <update>trueupdate>
            configuration>
        plugin>
    plugins>
build>

引入tomcat插件部署不使用远程热部署


<plugin>
    <groupId>org.apache.tomcat.mavengroupId>
    <artifactId>tomcat7-maven-pluginartifactId>
    <version>2.2version>
    <configuration>
        
        <port>8080port>
        
        <path>/flowerpath>
    configuration>
plugin>

你可能感兴趣的:(maven,java)