maven经典篇-基本常识操作和依赖管理汇总1

目录

一 maven的基本常识

1.1 作用

1.2 构建

1.3 maven的结构

 1.4 mven工程默认结构

 1.5 mven仓库的概念

  1.6 mven常用命令

1.7 打包编译

1.8 pom的依赖坐标

1.8.1 依赖坐标的定义

1.8.2 依赖坐标的案例

二  maven的依赖管理

2.1 依赖的注入

2.2 maven的间接依赖

2.3 依赖的顺序

2.4   使用变量统一版本管理

2.5   排除依赖

2.5.1 使用exclusions标签

2.5.2 使用optional标签

三  maven的模块管理

3.1 模块管理

3.2 模块继承

3.3 全局模块管理

​编辑 3.4 依赖导入

四  maven的插件管理

4.1 maven-jar-plugin插件管理

4.2   maven-dependency-plugin+maven-jar-plugin

4.3 详情打包方式

五  maven构建配置属性

5.1 打包插件属性

5.1.1 指定jdk版本

5.1.2 排除resources下的配置文件

5.1.3 主类配置


一 maven的基本常识

1.1 作用

Maven 是一个项目管理工具,它包含了一个 项目对象模 ( POM Project Object Model ),来管理项目从编译、测试、发布、打包,部署整个生命周期的一系列操作。
简而言之: Maven 的一个核心特性就是依赖管理。

1.2 构建

指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理

 

1.3 maven的结构

注意,安装maven确保安装jdk且配置java_home环境变量

 1.4 mven工程默认结构

 1.5 mven仓库的概念

在引用依赖时会先从私人仓库进行读取,如果未找到再从中央仓库下载至私人仓库,最后再下载到本地仓库。项目读取时,先本地仓库,再中央仓库。

  1.6 mven常用命令

1.compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target 目录下

2.test maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类。

3.clean maven 工程的清理命令,执行 clean 会删除 target 目录及内容。

4.package maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包。
5.install maven 工程的安装命令,执行 install maven 打成 jar 包或 war 包发布到本地仓库。

1.7 打包编译

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

1.8 pom的依赖坐标

1.8.1 依赖坐标的定义

   <!--项目名称,定义为组织名+项目名,类似包名-->
  <groupId>cn.itcast.maven</groupId>
<!-- 模块名称 -->
<artifactId>maven-first</artifactId>
<!-- 当前项目版本号,snapshot 为快照版本即非正式版本, release 为正式发布版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging > :打包类型
jar:执行 package 会打成 jar 包
war:执行 package 会打成 war 包
pom :用于 maven 工程的继承,通常父工程设置为 pom   

1.8.2 依赖坐标的案例

当我们引用一个模块时,也是通过 groupId、 artifactId、 version 三项内容进行确定。

代码如下:

<groupId>xyz.ibudai</groupId>
    <artifactId>maven-demo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <version>maven demo</version>
    <description>This is maven demo.</description>

二  maven的依赖管理

2.1 依赖的注入

使用 dependencies标签我们即可导入所需要的工程依赖。

<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>9.0.27</version>
        <scope>runtime</scope>
    </dependency>

使用范围:

2.2 maven的间接依赖

maven 中我们只需要引入A工程即可, Maven会自动将子模块B,C所依赖的包导入。

2.3 依赖的顺序

1.最短路径优先原则

获取Dependency-C的坐标: 由A->D->C 需要3层级;由B->C需要2层级;根据【最短路径优先】原则,选择B->C这条路径;选择版本为:Dependency-C -v2.0

2.相同层级路径,在pom中先配置的依赖优先原则;这里获取Dependency-C的路径层级都是2层,其中先配置dependency-A,所以选用Dependency-C -v1.0  这个版本。

2.4   使用变量统一版本管理

通过 properties 标签即可自定义变量配置,然后使用 ${} 引用变量;

<properties>
    <junit.version>4.13.2</junit.version>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
    </dependency>
</dependencies>

2.5   排除依赖

2.5.1 使用exclusions标签

在A模块中,引入B模块的依赖坐标,但是想排除掉B模块中引入的C模块坐标,则可以使用exclusions标签,如下图:

 <dependency>
        <groupId>xyz.ibudai</groupId>
        <artifactId>demo-B</artifactId>
        <version>1.0.0</version>
        <excludes>
            <exclude>
                <groupId>xyz.ibudai</groupId>
                <artifactId>dependency-c</artifactId>
                <version>1.0.0</version>
            </exclude>
        </excludes>
    </dependency>

2.5.2 使用optional标签

在A模块中,引入B模块的依赖坐标,B模块中的C模块坐标不想要,则在B模块中将C模块禁止依赖的传递性。

 <dependency>
        <groupId>xyz.ibudai</groupId>
        <artifactId>demo-c</artifactId>
        <version>1.0.0</version>
        <optional>true</optional>
    </dependency>

三  maven的模块管理

3.1 模块管理

当我们项目包含多个子项目时,通过 modules 标签即可实现模块管理。

3.2 模块继承

通过 parent 即可标记当前模块的父模块,且子模块将会继承父模块中的所有依赖配置。子模块若没有指定的 groupId 和 version 默认继承父模块中的配置。

其中 relativePath 用于指定父模块的 POM 文件目录,省略时默认值为 ../pom.xml 即当前目录的上一级中,若仍未找到则会在本地仓库中寻找。

3.3 全局模块管理

将项目的依赖,统一定义在父模块的 dependencyManagement 标签中,子模块只需继承父模块并在 dependencies 引入所需的依赖,便可自动读取父模块 dependencyManagement 所指定的版本。

dependencyManagement 既不会在当前模块引入依赖,也不会给其子模块引入依赖,但其可以被继承的,只有在子模块下同样声明了该依赖,才会引入到模块中,子模块中只需在依赖中引入 groupId 与 artifactId 即可, 也可以指定版本则会进行覆盖。

父模块:

子模块:

在B模块中继承A工程,引入mysql,无需指定版本,将会自动读取父模块中 dependencyManagement 中所指定的版本。当然你也可以选择指定版本则将会进行覆盖,但并不建议这么操作,将提高项目维护难度。

 3.4 依赖导入

A模块 创建同级模块A1 ,如果要实现 A1 中配置, dependencyManagement ,则在其 dependencyManagement 配置中导入A模块并将 scope 设置为 import,并将 type 设置为 pom

通过导入即可实现更轻量化的模块信息继承,具体配置内容如下:

四  maven的插件管理

4.1 maven-jar-plugin插件管理

史上最全 Maven 教程,建议收藏!!

通过 maven-jar-plugin 插件我们即可在添加额外信息至打包后的 JAR 文件,插件配置信息如下:

<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-jar-plugin</artifactId>  
    <version>2.3.1</version>  
    <configuration>  
        <archive>  
            <manifest>  
    <mainClass>org.example.MyTest</mainClass> 
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
    <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
            </manifest>
            <!-- 配置额外属性信息 -->
            <manifestEntries>  
                <Plugin-Id>demo-plugin</Plugin-Id>  
                <Plugin-Version>1.0.0</Plugin-Version>  
            </manifestEntries>  
        </archive>  
    </configuration>  
</plugin>

4.2   maven-dependency-plugin+maven-jar-plugin

1.maven-dependency-plugin插件:maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容,只是生成MANIFEST.MF文件还不够,maven-dependency-plugin插件用于将依赖包拷贝到<outputDirectory>${project.build.directory}/lib</outputDirectory>指定的位置,即lib目录下。

2.pom配置

<!--自定义打包方式-->
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <classpathPrefix>lib/</classpathPrefix>
          <mainClass>com.ljf.springboot.mybaits.demos.StartApp</mainClass>
        </manifest>
      </archive>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
      <execution>
        <id>copy-dependencies</id>
        <phase>package</phase>
        <goals>
          <goal>copy-dependencies</goal>
        </goals>
        <configuration>
          <outputDirectory>${project.build.directory}/lib</outputDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>

3.Main-Class,有了依赖包,那么就可以直接通过java -jar xxx.jar运行jar包 

4.3 详情打包方式

maven打包的5种方式总有一款适合你【超赞】-CSDN博客

五  maven构建配置属性

5.1 打包插件属性

以下所有配置项都是定义在<build>标签组内。

5.1.1 指定jdk版本

5.1.2 排除resources下的配置文件

默认项目打包后 /resources 目录下文件都将统一打包进编译后的 JAR 文件,但为了方便修改配置文件,通常将配置文件排除在jar包外,使用时只需将文件放置于 JAR 同级即可。

5.1.3 主类配置

其中 <mainClass> 中配置的为项目主类的完成限定名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值