maven笔记

news/2024/11/23 3:58:39/

maven笔记

maven解决jar冲突的办法

排除A.jar中依赖的B.jar

<dependency><groupId>xxx.xxx</groupId><artifactId>jarA</artifactId><version>0.0.1</version><exclusions><exclusion><groupId>xxx.xxx</groupId><artifactId>jarB</artifactId></exclusion></exclusions>
</dependency>

A.jar打包时忽略B.jar (可以使用 optional标签 或 provided作用域)

<dependency><groupId>xxx.xxx</groupId><artifactId>jarB</artifactId><version>0.0.1</version><optional>true</optional>  <!-- optional意思是可选依赖 -->
</dependency>
<dependency><groupId>xxx.xxx</groupId><artifactId>jarB</artifactId><version>0.0.1</version><scope>provided</scope> <!--provided表示 仅编译和测试 -->
</dependency>

maven项目生命周期管理

常用的maven生命周期命令有9种,分别如下

clean—清空target目录下生成的打包文件

mvn clean 

validate–验证项目结构的有效性

mvn validate

compile–编译项目,这个命令需要配置maven-compiler-plugin插件,如果是springboot项目还需要配置spring-boot-maven-plugin插件

mvn compile

test–执行项目的Test case

mvn test

package–执行项目打包 ,打jar包或war包

mvn package

verify–验证项目打包结果

mvn verify

install—上传到本地仓库

mvn install

site—根据JavaDoc注释,生成项目的代码说明文档,生成的内容是一个静态web站点。这个命令需要配置maven-project-info-reports-plugin插件

mvn site

deploy—把打包生成的jar 推送发布到 远程repo上 或 你公司的maven私服上

mvn deploy

注意,以上9个阶段里,每个阶段执行的时候,都会把上面所有的阶段都执行。

如 执行mvn install 时,会把 clean 、validate、compile等所有在install之前的阶段都执行一遍。

maven项目模块聚合与继承

maven聚合

maven多模块项目存在根pom ; 或者maven聚合项目中某个模块没有代码,只有1个pom.xml。

这种项目称之为maven聚合项目。

maven聚合项目的根pom文件,也被成为bom, 意思是物料清单管理。

这种根pom文件的内容和一般的maven项目的pom.xml文件内容有所不同,如下

一般maven项目pom文件指定依赖包的标签是 ,而bom包(根pom文件)使用的是来声明项目所需的依赖

<dependencyManagement><dependencies><dependency><groupId>xxx.xxx</groupId><artifactId>jarA</artifactId><version>0.0.1</version></dependency></dependencies>
</dependencyManagement>

maven继承

在maven聚合之后,就可以使用maven的继承能力了。

如,maven多模块项目里 子模块可以继承父模块的部分或全部依赖,这样子模块就不用管理依赖jar的版本号了,而是统一由根pom文件管理。

再如,用STS快速新建一个springboot项目,会发现生成项目里的pom文件里都指定了继承的父项目的依赖, 此时你在中使用springboot官方依赖是不需要指定版本号的,因为bom中已经指定了当前这个springboot项目可用的官方依赖的版本号。

<parent><groupId>org.springframework</groupId><artifactId>spring-framework-bom</artifactId><version>5.3.16</version><relativePath/> 
</parent>

maven项目公共属性的指定

在pom文件中,可以使用标签定义公用的一些版本属性 或 定义项目的编码以及使用的jdk版本。

<properties><java.version>1.8</java.version><poi.version>4.1.2</poi.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties><dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi.version}</version>  <!-- 这里使用$符合选取上面定义的公共属性 --></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency>
</dependencies>   

普通maven项目怎么打jar包

大多数情况下,我们都是直接使用生成的springboot项目脚手架来开发后端java项目了,这种是特殊maven项目,因为IDEA ,STS都帮你生成好了项目结构和必要的插件,你引入web-starter后就能开箱即用,开始开发api了 。

springboot项目其实就是一个fat jar ,用开发完api接口后,执行mvn package后得到的是可以执行run的jar ,因为其内置了web容器;且springboot项目打出的jar内置了其需要的第三方jar,所以经常看到一个springboot项目打包后的jar有几百兆,这其实是正常的。

实际上普通maven项目打包,是一个重要的技能。普通maven项目既可以打jar包,也可以打war包;且可以配置jar包直接启动 ;也可以让打出的jar不能启动(如开发dubbo的二方包,只含有公共的interface,可以给其他人的dubbo客户端或服务器端用)。

下面以一个普通java项目(netty服务器端demo)打包成可执行的jar 为例,如下配置生成的jar 可以通过java -jar xxx.jar来run。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.demo</groupId><artifactId>netty-server-test1</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging>  <!-- 声明要打jar包 --><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.8</version></dependency><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.50.Final</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></dependency></dependencies><build><plugins><!-- 配置jdk编译版本,编码等级8,编码UTF-8  --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target><encoding>UTF-8</encoding></configuration></plugin><!-- 配置jar包自启动,配置主类 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><mainClass>cn.demo.App</mainClass><addClasspath>true</addClasspath><useUniqueVersions>false</useUniqueVersions><classpathPrefix>lib/</classpathPrefix>  <!-- jar启动时会去找依赖的lib目录 --></manifest><manifestEntries><Class-Path>.</Class-Path></manifestEntries></archive></configuration></plugin><!-- 将app依赖的第三方jar包copy到./lib下,因为这个项目依靠一些依赖才能run --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><type>jar</type><includeTypes>jar</includeTypes><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin></plugins></build>
</project>

上面的配置,配置完后,执行mvn -DskipTests=true clean package 即可开始打jar包,

打出的target目录下除了netty-server-test1-1.0-SNAPSHOT.jar之外,

还有1个lib目录,该目录里存放了中依赖的第三方jar包,如下

|-netty-server-test1-1.0-SNAPSHOT.jar
|-lib|--junit-4.13.2.jar|--hutool-all-5.7.8.jar|--netty-all-4.1.50.Final.jar|--lombok-1.18.16.jar

在netty-server-test1-1.0-SNAPSHOT.jar平级目录里执行java -jar netty-server-test1-1.0-SNAPSHOT.jar 即可运行这个项目。

jar包制作exe

这个问题应该分成2类看,一类是如springboot那种的fat jar 直接封包为exe,另一类是如上面的普通maven项目打出的jar已经lib封包成exe。

springboot打包exe

材料:springboot jar + 一个自定义的icon

工具: exe4j 之类的安装包生成器

具体怎么使用exe4j可以百度网上有很多教程, exe4j工具可以生成类似idea安装包那样的exe ,就是exe内部自带了1套jre ,使得客户电脑即使没有安装jdk ,也可以安装和运行这个程序。

普通java项目打包exe

材料:app.jar + lib文件夹( 内部app.jar需要的第三方依赖)+ 一个自定义的icon+ bat脚本(内部定义了 java -jar命令)

工具:batToExe的软件,可以把bat脚本打包成exe安装包,打包好的exe安装到新电脑时会依次解压上面的材料

这个本质是依靠bat启动的jar,客户电脑上还是得安装jdk才能run。

网上还有一些其他安装包工具 和打包教程,大家可以自行百度。

如果你用的是jdk17 ,那你打包exe会更方便,jdk17提供了快速打包exe的工具,好像是叫jlink 工具,bilibili上有教程,想了解的可以自行查询。


http://www.ppmy.cn/news/75959.html

相关文章

PCA及其实现方法

引言 主成分分析(PCA)是一种广泛使用的数据降维技术,它可以将高维数据转换为低维数据,同时保留原始数据的主要信息.在这些信息中,我们可以找到特征向量和特征值,它们可以描述数据的主要结构. 在实际应用中,我们通常使用matlab来实现PCA算法.本文将介绍matlab中的PCA实现方法,…

Axure教程—单色折线图(中继器)

本文将教大家如何用AXURE中的中继器制作单色折线图 一、效果介绍 如图&#xff1a; 预览地址&#xff1a;https://d84rfm.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87814278 二、功能介绍 简单填写中继器内容即可动态显示值样…

动态生成表格的方法

动态生成表格的方法&#xff1a; 1&#xff09; 前台&#xff1a;<asp:Literal ID"Literal1" runat"server"></asp:Literal> 后台&#xff1a; string getHtml ""; for (int i 0; i < datatable.rows.count; i) …

如何自建个人音乐播放器Navidrome

文章目录 1. 前言2. Navidrome网站搭建2.1 Navidrome下载和安装2.1.1 安装并添加ffmpeg2.1.2下载并配置Navidrome2.1.3 添加Navidrome到系统服务 2.2. Navidrome网页测试 3. 本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4. 公网访问测试5. 结语 转…

彻底理解Promise和async/await

Promise 1.异步行为是为了优化因计算量大而时间长的操作. 2.pedding 待定: 表示尚未开始或正在进行中 fulfilled 解决: 表示已经成功完成 rejected 拒绝: 表示没有完成 3.从pedding状态切换到fulfilled状态或rejected状态后,状态就不会再改变.而且也不能保证promise比如会脱…

制造运营管理 (MOM) 的工作流驱动方法

介绍 “在企业中使用的任何技术的第一条规则是&#xff0c;应用于高效运营的自动化将放大效率。第二个是自动化应用于低效率的操作会放大低效率。” - 比尔盖茨 。 工作流是结构化的活动&#xff0c;主要涉及人与人或人与机器的交互&#xff0c;所有这些活动都旨在在不影响安…

YOLOv5-7.0训练中文标签的数据集

链接&#xff1a;https://pan.baidu.com/s/1KSROxTwyYnNoNxI5Tk13Dg 提取码&#xff1a;8888 以显示楷体为例&#xff08;上面的百度网盘里面有黑体、宋体、楷体ttf文件&#xff09; (1)将metric.py中&#xff1a; 将 sn.set(font_scale1.0 if nc < 50 else 0.8) # for …

<SQL>《SQL命令(含例句)精心整理版(3)》

《SQL命令&#xff08;含例句&#xff09;精心整理版&#xff08;3&#xff09;》 10 联结10.1 联结10.2 高级联结10.3 带聚集函数的联结 11 组合查询13 更新13.1 INSERT13.2 UPDATE13.3 DELETE13.4 truncate 10 联结 10.1 联结 定义说明定义笛卡尔积&#xff08;cartesian p…