• Maven


    Maven详解(入门到精通)学习maven有这个就够了_精通maven_做技术我是认真的的博客-CSDN博客

    作用

    下载

    ⚫官网: Maven – Welcome to Apache Maven

    ⚫ 下载地址:Maven – Download Apache Maven

    下载完直接解压,配置环境变量

    MAVEN_HOME=D:\BottomSoftware\apache-maven-3.6.3

    Path增加%MAVEN_HOME%\bin

    cmd输入mvn测试

    仓库,私服cache 

    坐标

    花里胡哨,就是资源所在的地址, org.apache.spark

    中央仓库:Central Repository:

    咋搜:https://mvnrepository.com/

    maven配置阿里云镜像

    %MAVEN_HOME%\conf修改setting.xml,找到这一段,加上阿里云

    1. <mirrors>
    2. <mirror>
    3. <id>alimavenid>
    4. <mirrorOf>centralmirrorOf>
    5. <name>aliyun-mavenname>
    6. <url>http://maven.aliyun.com/nexus/content/repositories/central/url>
    7. mirror>
    8. mirrors>

    Maven项目

    1. <project
    2. xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    5. <modelVersion>4.0.0modelVersion>
    6. <groupId>com.itheimagroupId>
    7. <artifactId>project-java项目名artifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. <packaging>jarpackaging>
    10. <dependencies>
    11. <dependency>
    12. <groupId>junitgroupId>
    13. <artifactId>junitartifactId>
    14. <version>4.12version>
    15. dependency>
    16. dependencies>
    17. project>

    依赖管理

    添加依赖

    1. <dependency>
    2. // 这里是jar包的索引结构,按下图找
    3. <groupId>junitgroupId>
    4. <artifactId>junitartifactId>
    5. // 这里是版本
    6. <version>4.12version>
    7. dependency>
    8. <dependency>
    9. <groupId>log4jgroupId>
    10. <artifactId>log4jartifactId>
    11. <version>1.2.13version>
    12. dependency>

    https://mvnrepository.com/search?q=log4j

    依赖传递

    问题:如果一个项目需要另一个项目的依赖项

    在java01里配置

    1. <dependency>
    2. <groupId>org.examplegroupId>
    3. <artifactId>java02artifactId>
    4. <version>1.0-SNAPSHOTversion>
    5. dependency>

    依赖冲突

    引用冲突

    问题:同一个jar包,java01使用了1.2.12版本,导入的java02使用了1.2.13版本,怎么办

    看层级

    pom.xml配了两个冲突

    后面的覆盖前面的生效

    相关,java02中是test,java01里就看不到了 

    可选依赖

    对外隐藏,不让别人用,这样别的模块引用就看不见这个了

    1. <dependency>
    2. <groupId>junitgroupId>
    3. <artifactId>junitartifactId>
    4. <version>4.12version>
    5. <optional>trueoptional> // 可选依赖设置
    6. dependency>

    排除依赖

    在java01里配个exclusions,主动断开间接依赖

    1. <dependency>
    2. <groupId>org.examplegroupId>
    3. <artifactId>java02artifactId>
    4. <version>1.0-SNAPSHOTversion>
    5. <exclusions>
    6. <exclusion>
    7. <groupId>log4jgroupId>
    8. <artifactId>log4jartifactId>
    9. exclusion>
    10. exclusions>
    11. dependency>
    12. <dependency>
    13. <groupId>junitgroupId>
    14. <artifactId>junitartifactId>
    15. <version>4.12version>
    16. <exclusions>
    17. <exclusion>
    18. <groupId>org.hamcrestgroupId>
    19. <artifactId>hamcrest-coreartifactId>
    20. exclusion>
    21. exclusions>
    22. dependency>

    依赖范围

    主程序范围有效(main文件夹范围内)

    测试程序范围有效(test文件夹范围内) Me:[在test包里可以导,在main程序里导不进去]

    是否参与打包(packagel指令范围内)

    传递 结果

    生命周期、插件

    啥啊?

    大整体

    • clean:清理工作
    • default:核心工作,例如编译,测试,打包,部署等
    • site:产生报告,发布站点等

    当做中间的一件事n,会从0做到n(开始test,会从validate-----------test都做了)

    插件

    去这里找需要的插件和goal等用法、指定在哪生效:

    https://maven.apache.org/plugins/maven-source-plugin/

    java01加上

    1. <build> // 写在构建下
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.maven.pluginsgroupId>
    5. <artifactId>maven-source-pluginartifactId>
    6. <version>3.2.0version>
    7. <executions> // 执行设置
    8. <execution>
    9. <goals>
    10. <goal>jargoal> // 执行结果
    11. <goal>test-jargoal>
    12. goals>
    13. // 在哪个阶段执行生效
    14. <phase> generate-test-resourcesphase>
    15. execution>
    16. executions>
    17. plugin>
    18. <plugin>
    19. 别的插件
    20. plugin>
    21. plugins>
    22. build>

    多一个 maven-source-plugin

    执行完test周期后,多了个jar,里面有源码

    继承

    多个子工程中依赖同样的jar包,但是采用test范围;由于test范围没有传递性;所以,每一个工程都需要对test范围的jar包进行单独依赖;

    而如果希望修改多个工程中所依赖test范围的jar包版本,那么,一个一个项目去修改太麻烦,这时可以应用继承解决。

    继承的使用:

    (1)定义一个父工程,父工程packaging必须是pom

    pom

    项目的打包类型:pom、jar、war

    packing默认是jar类型,

    pom   --------->   父类型都为pom类型

    jar      --------->  普通项目打jar包,一般普通项目设置jar

    war    --------->   web项目一般都是打war包,web项目的话设置war

    (2)在父工程中定义依赖的jar包,属于test范围:

    1. <packaging>pompackaging>
    2.  
    3.        <dependencyManagement>
    4.  
    5.               <dependencies>
    6.  
    7.                      <dependency>
    8.  
    9.                             <groupId>junitgroupId>
    10.  
    11.                             <artifactId>junitartifactId>
    12.  
    13.                             <version>4.0version>
    14.  
    15.  
    16.                             <scope>testscope>
    17.  
    18.                      dependency>
    19.  
    20.               dependencies>
    21.  
    22. dependencyManagement>
    23. (3)在各个子工程中对父工程进行继承:
    24. <parent>
    25.     <groupId>com.mqf.mavengroupId>
    26.     <artifactId>MavenParentartifactId>
    27.     <version>0.0.1-SNAPSHOTversion>
    28.     <relativePath>../MavenParent/pom.xmlrelativePath>
    29. parent>

     (4)在各个子工程中对父工程中的包进行依赖,但是,不需要配置版本号和范围(与父工程的版本号和范围一致)

    1. <dependency>
    2.     <groupId>junitgroupId>
    3.     <artifactId>junitartifactId>
    4. dependency>

    (5)如果希望修改版本,只需要修改父工程中的依赖jar包版本就可以了,那么,各个子工程中的jar包版本就都变了

    (6)一个子工程只能继承一个父工程.

    1.  父项目加入让子项目依赖的jar包配置

    子项目继承父项目(继承后自动使用父类往外暴露的jar包)

    HelloFriend项目中的pom:

    MakeFriend的pom:

    MakeFriend继承了Parent就可以选择使用父工程的pom中暴露的jar包:


     

  • 相关阅读:
    搭建ftp服务器并注册账号
    【2022国赛模拟】相似序列问题——DFA(DP套DP)
    【SpringBoot3+Vue3】三【实战篇】-后端(优化)
    Guava中的封装的Map操作
    第二次面试 9.15
    Java 图像处理(一)
    开学季蓝牙耳机怎么选?高性价比学生蓝牙耳机推荐
    Pytorch学习笔记 (参考官方教程)
    基于WMI更新Windows系统信息采集程序sysInfo的一些收获
    8 张图 | 剖析 Eureka 的首次同步注册表
  • 原文地址:https://blog.csdn.net/qq_58551342/article/details/132759295