玩转Maven

1,什么是Maven?(What)
maven是一款服务于Java平台的自动化构建工具
麦文,妹文,美文
make-->ant-->maven-->gradle
何为构建?
构建并不是简单的创建。构建是以“Java源文件”,“框架配置文件”,“JSP”,“HTML”,
“图片”等资源为原材料,去生产一个可以运行的项目的过程。
注意点:一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译的结果”。
动态Web工程本身====》编译的结果
仔细分别观看动态Web工程本身和它编译的结果两者工程“目录结构”的异同点。(重点)
Tips:为什么使用Maven?(Why)
关键词:jar包,项目、工程、模块

2,Maven的下载,安装和配置(叫Maven核心程序)(How)
下载:Maven官网    maven-3.5.4.zip
安装:解压下载下来的zip压缩包,apache-maven-3.5.4,观看各个目录(重点conf/settings.xml)
配置:(tips:Maven是用Java语言开发的,所以它也是运行在JVM当中,必须检查JAVA_HOME
环境变量是否配置)
检查JAVA_HOME环境变量是否配置?Win+R-->cmd-->echo JAVA_HOME
MAVEN_HOME或者M2_HOME(选用):Maven解压目录
PATH:Maven解压目录\bin
测试是否安装成功?mvn -v或者mvn --version或者mvn -version

3,构建过程中的各个环节
清理:将以前编译好的Class字节码文件删除,干嘛?为下一次编译做准备
编译:将Java源程序(User.Java)编译成Class字节码(User.class)文件,交由Java虚拟机(JVM)去执行
测试:自动测试,自动调用junit程序
报告:测试程序执行的结果
打包:动态Web工程打war包,Java工程打jar包
安装:这个概念很重要,它是Maven特有的一个概念,讲解 :将我们自己开发好的Maven工程打包所得到的文件
”复制粘贴“到“仓库”中
部署:将动态Web工程打包得到的war包“复制粘贴”到“Servlet容器“中的指定目录中,使其可以运行起来

4,Maven的几个常用的命令
tips:执行与构建过程相关的maven命令需要进入pom.xml文件所在的目录
清理:mvn clean
编译主程序:mvn compile
编译测试程序:mvn test-compile
测试:mvn test
打包:mvn package
安装:mvn install
部署:mvn deploy
生成站点:mvn site

5,Maven中的几个重要的概念
约定的目录结构
POM
坐标
仓库
依赖
生命周期,阶段,插件,目标
继承
聚合

6,约定的目录结构
根目录:工程名,模块名
src目录:源代码
pom.xml文件:这个文件很重要,它是此Maven工程的核心配置文件(全局配置文件),有关
            此工程的大部分操作都要在这里面进行配置
main目录:存放主程序
test目录:存放测试程序
java目录:存放Java源文件
resources目录:存放知名框架或者第三方工具的配置文件
层级结构:
    Hello
        src
            main
                java
                resources
            test
                java
                resources
        pom.xml

7,POM
POM,Project Object Model,项目对象模型
    类比,DOM
pom.xml文件,对于Maven工程而言重要性相当于web.xml文件对于动态Web工程

8,坐标(gav)
Maven中的坐标,通过坐标可以在仓库中唯一的定位一个Maven工程。
groupid:公司或组织域名倒叙+项目名
artifactid:模块名或者叫做工程名
version:版本
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
org/springframework/spring-core/4.3.7.RELEASE/spring-core-4.3.7.RELEASE.jar

9,仓库
分类:本地仓库,布置在本机上面,只为当前电脑上的所有Maven工程所服务,
        
     远程仓库,
         私服,在这里我们需要学习去如何搭建一个私服,存在于局域网环境上,
             只为此局域网环境内的Maven工程所服务
         中央仓库,架设在整个大Internet网络上,为全世界所有的Maven工程所服务
         中央仓库镜像,为了分担中央仓库的流量,提升用户访问速度,提高用户体验

本地仓库的默认位置,登录当前系统用户家目录\.m2\repository
修改本地仓库的默认位置,apache-maven-3.5.4\conf\settings.xml
<localRepository>D:\DevInstall\MavenRep</localRepository>

其它的一些重要的配置,(settings.xml)
所有Maven工程jdk一劳永逸配置(jdk1.8)
<profiles>    
    <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>
        </properties>
     </profile>
</profiles>

借用阿里云仓库
<mirrors>
    <mirror> 
        <id>alimaven</id> 
        <name>aliyun maven</name> 
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
        <mirrorOf>central</mirrorOf> 
    </mirror> 
</mirrors>
9,依赖(很重要很重要)
最低要学会如何在我们开发的项目中导入我们所需要的依赖!!!
依赖,初步
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>
(这就是一个依赖,)
依赖的范围,主要用到三个compile,test,provided
<scope>compile</scope>

典型例子            依赖的范围
spring-core          compile
junit                test
servlet-api          provided

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

依赖的传递性
    如果多个模块工程需要相同的依赖,则只需要在“最下面”的工程引用一次依赖即可,它“上面的”
    工程中也就导入了相应的依赖。
    maven也会自动导入此依赖所需要的其它的依赖信息

依赖的原则
    就近原则,路径最短者优先原则。
    相同路径,先声明者优先原则
    依赖的原则测试

依赖的排除
    如果我们觉得某些jar包不够稳定,可以将它排除出去
    <dependency>
        ......
        <scope>...<scope>
        <exclusions>
            <exclusion>
                <groupId>...</groupId>
                <artifactId>...</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

统一管理依赖的版本号
    <properties>
        <atguigu.spring.version>4.0.0.release</atguigu.spring.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <aa.bb.cc></aa.bb.cc>
    </properties>

10,继承
由于非compile范围的依赖不能传递,所以这些依赖就很容易存在于各个模块工程中。
典型例子:junit,各个模块工程中的junit版本不一致,容易出现问题。定义一个父工程来统一
管理这些依赖。

父工程Parent
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>    <!--打包方式-->

<dependencyManager>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.0</version>
            <scope>test</scope>
        </dependency>
    <dependencies>
</dependencyManager>

其他的子工程引用这个父工程就可以了,子工程就有父工程所有的依赖信息了。
<parent>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>Parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

11,聚合
一键“安装”各个参与聚合的模块工程!
<modules>
    <module>../Hello/pom.xml</module>
    <module>../HelloFriend/pom.xml</module>
    <module>../MakeFriends/pom.xml</module>
    <module>../OurFriends/pom.xml</module>
</modules>

12,分别在eclipse中,idea中使用Maven。
    使用maven来创建一个Java工程
    使用maven来创建一个动态Web工程
    执行命令

13,Maven酷站
maven repository
maven rep
搜索详细的依赖信息

=========================================================================
大家可以在CSDN上面下载我的关于Maven的资料
更多技术分享加QQ:2040423570

猜你喜欢

转载自blog.csdn.net/qq_39157951/article/details/84319992