Maven 基本配置知识

Maven遵循 : Convention over Configuration 约定优于配置

1.maven 的配置文件

1.1 加载顺序

  ~/.m2/setting.xml -> conf/setting.xml(maven解压包里面的)

1.2 配置setting.xml
#本地仓库地址
<localRepository>/path/to/local/repo</localRepository> 
#镜像下载,相比普通的下载,
 <mirrors> 
   #阿里提供的镜像仓库下载更加快
	<mirror>  
		  <id>alimaven</id>  
		  <name>aliyun maven</name>  
		  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
		  <mirrorOf>central</mirrorOf>          
	</mirror> 
	#其他镜像仓库
	<mirror>
		<id>ui</id>
		<mirrorOf>central</mirrorOf>
		<name>Human Readable Name for this Mirror.</name>
		<url>http://uk.maven.org/maven2/</url>
	</mirror>
	<mirror>
        <id>osc</id>
        <mirrorOf>central</mirrorOf>
        <url>http://maven.oschina.net/content/groups/public/</url>
    </mirror>
    <mirror>
        <id>osc_thirdparty</id>
        <mirrorOf>thirdparty</mirrorOf>
        <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
    </mirror>
 </mirrors>
1.3 setting.xml的其他配置

可以百度下,或者看setting.xml中的英文说明。

2.Maven的插件运行机制

 Maven的所有构成都是由plugin构成。
  在这个包中,${M2_HOME}/lib/maven-model-builder-3.0.4.jar,打开该文件,能找到超级父POM:\org\apache\maven\model\pom-4.0.0.xml,它是所有Maven POM的父POM,所有Maven项目都继承该配置。

具体可以参考:http://www.cnblogs.com/AlanLee/p/6208562.html

3.Maven的pom.xml

<!-- 指的就是上面的超级父pom -- >
 <modelVersion>4.0.0</modelVersion>
 <!-- 用坐标的方式来唯一定制jar的唯一性 -- >
 <groupId>com.vison</groupId>   <!-- 公司域名倒写 -- >
 <artifactId>testhttps</artifactId> <!-- 功能命名  -- >
 <version>0.0.1-SNAPSHOT</version> <!-- 版本号  -- >
  <!--  父类型都为pom类型 jar内部调用或者是作服务使用   war需要部署的项目-- >
 <packaging>jar</packaging>  <!-- 打包方式默认是jar 项目的打包类型有:pom、jar、war、maven-plugin等-- >
 
   <parent></parent>  <!-- 配置父工程的坐标 -- >
   
<!-- 这个是定义变量,一般可以在父pom文件中定义版本号 -- >
<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
</properties>
 
<dependencyManagement></dependencyManagement>   <!-- 只能放在父pom文件中 -- >

	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
    </dependency>
    
<!--  scope的值定义
* compile,默认值,适用于所有阶段,会随着项目一起发布,会打包 
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖,其他提供后采用。如servlet.jar,不会打包
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段,与compile相比,跳过了编译而已,会打包
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布, 不会打包
* system,类似provided,需要显式提供包含依赖的jar,通过 systemPath指定路径;一般都不会用 Maven不会在Repository中查找它 
* 具体可以参考 https://www.cnblogs.com/hzzll/p/6738955.html
-- >

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
         <!-- exclusions 排除包中依赖的包,例如排除依赖包中的日志包 -- >
         <exclusions>
             <exclusion>
                 <groupId>org.apache.logging.log4j</groupId>
                 <artifactId>log4j</artifactId>
             </exclusion>
         </exclusions>
     </dependency>

其他:
1)依赖仲裁
  当一个模块同时依赖了两个相同的jar包,最终选择哪个jar,取决于如下两个准则:

  • 最短路径原则
  • 加载先后原则

2)scope的传递
第一列表示直接依赖的scope,第一行表示间接依赖的scope

compile test provided runtime
compile compile - - runtime
test test - - test
provided provided - provided provided
runtime runtime - - runtime

4.版本管理

4.1  1.0-SNAPSHOT命名
  SNAPSHOT是快照版本,不稳定版本,如果依赖包中有SNAPSHOT版本,要更新这个包可以两种方式:

  • 1)删除本地repository
  • 2)执行命令:mvn clean package -U (强制拉一次)

如果要发布上线,一定是要用RELAESE版本。

具体的release和snapshot 区别可以参考:
https://blog.csdn.net/yxz8102/article/details/80975542
4.2 版本名称
  主版本号.次版本号.增量版本号-<里程碑版本>
1.0.0-RELAESE

5.Maven的生命周期

1)层级关系:lifecycle/phase/goal;

  • A Build Lifecycle is Made Up of Phases(Lifecycle 是由phase构成)
  • A Build Phase is Made Up of Plugin Goals(Phase 是由Goals构成)

  Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。执行后面的phase会把之前的全都执行。

  • clean:清理上一次构建生成的文件
  • compile:编译项目的源代码。
  • package:把已编译的代码打包成可发布的格式,比如jar。
  • site:生成项目站点文档
    在这里插入图片描述

2)插件可以放在生命周期某个地方执行
在这里插入图片描述

6. Maven常用命令

  • compile 编译成class文件
  • clean 删除target/
  • test 运行test文件内容
  • package 打包
  • install 把项目install到 local repo;如果是多模块都需要先install,因为其他模块引用的是jar包,而不是编译后target中的class文件。
  • deploy 把本地jar发布到remote

猜你喜欢

转载自blog.csdn.net/weixin_40792878/article/details/85012151
今日推荐