Maven

作者: 半数的年 | 来源:发表于2019-01-24 11:50 被阅读0次

还没有maven的时候,我们在项目添加依赖包的时候,需要自己下载添加到lib,但在项目中引入的依赖包其又依赖别的依赖包,并且可能存在版本冲突的问题。

一、认识maven

解决复杂依赖传递问题,打包项目

  • 约定优于配置
  • 简单易用
  • 支持测试
  • 插件丰富

二、安装和配置

  • MVN_HOME
  • 配置setting.xml


    加载配置的顺序
1、阿里镜像
<mirror>  
  <id>alimaven</id>  
  <name>aliyun maven</name>  
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
  <mirrorOf>central</mirrorOf>          
</mirror> 
2、profies可以配置开发、测试、生产不同环境时的配置
image.png

三、maven项目结构

image.png

1、pom.xml

(1)、groupId 域名反过来
(2)、artfactId 功能命名
(3)、version 版本号
  • 主版本号.次版本号.增量版本号-<里程碑版本>
  • mvn clean package -U (每次上线版本release强制从远端仓库重新拉一次)
(4)、packaging 打包方式 默认是jar
(5)、dependencyManagement

a)、只能出现在父pom
b)、统一版本号
c)、声明 (子POM里用到再引)
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

(6)、dependency
  • Type 默认jar
  • scope 定义依赖包在什么时候,并且会不会在打包上(优化pom文件)
    a)compile 编译 (默认)
    b)test 测试
    c)provided 例如 tomcat已经提供servlet的依赖包,这个依赖在编译时就不会被打包上
    d)runtime运行时 例如JDBC驱动实现在运行时才会用到,编译时不会用到。
    e)system 本地一些jar 在maven中央仓库没有的依赖包,例如短信jar
  • 依赖传递
    第一列表示直接依赖的scope,第一行表示间接依赖的scope


    image.png
  • 依赖仲裁
    a)、最短路径原则
    b)、加载先后原则,当最短路径相等时,则是按书写顺序的先后


    image.png
  • exclusions
    排除包 例如spring内引用common-logging,在项目并不会用来,可用来排除这个依赖包。

四、生命周期

image.png

五、常用命令

  • compile
  • clean 删除target/ 生成的包
  • test test case junit/testNG
  • package 打包
  • install 把项目install到local repo
  • deploy 发本地jar发布到remote

六、实现plugin

七、搭建私服

<distributionManagement>
    <repository>
        <id>xiaoyuan-nexus-release</id>
        <name>Nexus Release Repository</name>
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>xiaoyuan-nexus-snapshot</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>
  • d)、setting.xml配置
<servers>
    <server>
        <id>xiaoyuan-nexus-release</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server>
        <id>xiaoyuan-nexus-snapshot</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

八、自定义archetype(脚手架)

  • 生成一个archetype
    a)、mvn archetype:create-from-project
    b)、cd /target/generated-sources/archetype
    c)、mvn install
  • 从archetype创建项目 mvn archetype:generate -DarchetypeCatalog=local

九、实现dev、test、pro不同环境下的配置

  • 不同环境下的配置文件


    image.png
  • pom.xml配置
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <profiles.active>test</profiles.active>
        </properties>
    </profile>
    <profile>
        <id>pro</id>
        <properties>
            <profiles.active>pro</profiles.active>
        </properties>
    </profile>
</profiles>

<build>
    <resources>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
                <excludes>
                    <exclude>conf/**</exclude>
                </excludes>
        </resource>
        <resource>
            <directory>src/main/resources/conf/${profiles.active}</directory>
        </resource>
    </resources>
</bulid>
  • 在打包时则使用 mvn clean package -P pro,生成对应的配置文件


    image.png

相关文章

网友评论

    本文标题:Maven

    本文链接:https://www.haomeiwen.com/subject/fjgsjqtx.html