目录
4.2 maven-dependency-plugin+maven-jar-plugin
一 maven的基本常识
1.1 作用
1.2 构建
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 目录及内容。
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 依赖坐标的定义
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-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>
中配置的为项目主类的完成限定名。