Maven

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

作用

Maven_第1张图片

Maven_第2张图片

Maven_第3张图片

下载

⚫官网: Maven – Welcome to Apache Maven

⚫ 下载地址:Maven – Download Apache Maven

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

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

Path增加%MAVEN_HOME%\bin

cmd输入mvn测试

Maven_第4张图片

Maven_第5张图片

仓库,私服cache 

Maven_第6张图片Maven_第7张图片

坐标

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

中央仓库:Central Repository:

咋搜:https://mvnrepository.com/

Maven_第8张图片

maven配置阿里云镜像

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


    
	 
		alimaven
		central
		aliyun-maven
		http://maven.aliyun.com/nexus/content/repositories/central/
	
	 
	 
	 
  

Maven项目

Maven_第9张图片

Maven_第10张图片Maven_第11张图片


  4.0.0




  com.itheima
  project-java项目名
  1.0-SNAPSHOT



  jar

  

    
      junit
      junit
      4.12
    
  

依赖管理

添加依赖

    
      // 这里是jar包的索引结构,按下图找
      junit
      junit
      // 这里是版本
      4.12
    

    
      log4j
      log4j
      1.2.13
    

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

依赖传递

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

在java01里配置

        
            org.example
            java02
            1.0-SNAPSHOT
        

Maven_第12张图片

依赖冲突

引用冲突

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

Maven_第13张图片

看层级

Maven_第14张图片

pom.xml配了两个冲突

后面的覆盖前面的生效

Maven_第15张图片

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

Maven_第16张图片

可选依赖

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

        
            junit
            junit
            4.12
            true  // 可选依赖设置
        

排除依赖

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

        
            org.example
            java02
            1.0-SNAPSHOT
            
                
                    log4j
                    log4j
                
            
        

        
            junit
            junit
            4.12
            
                
                    org.hamcrest
                    hamcrest-core
                
            
        

依赖范围

Maven_第17张图片

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

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

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

Maven_第18张图片

传递 结果

Maven_第19张图片

生命周期、插件

啥啊?

大整体

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

Maven_第20张图片

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

插件

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

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

java01加上

 // 写在构建下
        
            
                org.apache.maven.plugins
                maven-source-plugin
                3.2.0

                  // 执行设置
                    
                        
                            jar  // 执行结果
                            test-jar
                        
                        // 在哪个阶段执行生效
                         generate-test-resources  
                    
                
            

            
                别的插件
            

        

    

Maven_第21张图片

多一个 maven-source-plugin

Maven_第22张图片

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

Maven_第23张图片

Maven_第24张图片

继承

多个子工程中依赖同样的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范围:

pom
 
       
 
              
 
                     
 
                            junit
 
                            junit
 
                            4.0
 

 
                            test
 
                     
 
              
 

(3)在各个子工程中对父工程进行继承:



    com.mqf.maven

    MavenParent

    0.0.1-SNAPSHOT

    ../MavenParent/pom.xml

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



    junit

    junit

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

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

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

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

Maven_第25张图片

HelloFriend项目中的pom:

Maven_第26张图片

MakeFriend的pom:

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

Maven_第27张图片


 

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