当前位置: 首页 > news >正文

maven简单使用

实验课的作业用一大堆框架/库,统统要用maven管理。

头一次用,真痛苦。

所幸得以解决,maven真香~

一步一步来。

1. maven

不是java人,只能说说粗浅的理解了。

简单来说,maven是一个管理项目的工具,可以帮助我们下载依赖、构建项目、打包、测试。

然而,需要编写恶心的pom.xml来实现。

IDEA自带的有maven,但是我们需要命令行,仅仅用IDEA的maven,不好理解。

所以第一步就是先下载并配置maven。

下载配置maven

linux人,直接apt install maven结束。

windows,官网下载,配配环境变量就OK了,在IDEA的设置里写上你的maven可执行文件路径。

在这里插入图片描述

下来,还需要换镜像,linux在/etc/maven/setting.xml里,windows下载的包里搜一下也出来了,

<mirrors> ... <mirros>中间放上阿里的镜像站:

 <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror>

这份文件写满了注释,有其他需要可以自己看一下,比如设置仓库路径:

<localRepository>/path/to/local/repo</localRepository>

默认仓库路径是{用户目录}/.m2/repository

这一步配好后,你的命令行应该有mvn命令。
可以mvn --help测试一下。
在这里插入图片描述

2. 最小化pom.xml

为了方便理解,建议命令行操作。

假设我们的项目结构是下面这样:
在这里插入图片描述

包名为top.hello,主类Hello.java的内容如下 :

package top.hello;
public class Hello{public String sayHello(String name){return "Hello "+name + "!";}public static void main(String []args){System.out.println("Hello world");}
}

按理来说,下面的就够了:

<?xml version="1.0"?>
<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>top.hello</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version></project>

很简单,前面的乱七八糟的链接就不要记了,让插件/IDE生成,官网也有。
pom.xml同级目录下执行mvn compile来编译,它会报错:

$ mvn compile
...
ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] 不再支持源选项 5。请使用 7 或更高版本。
[ERROR] 不再支持目标选项 5。请使用 7 或更高版本。
[INFO] 2 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.747 s
[INFO] Finished at: 2023-04-25T15:38:10+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project Hello: Compilation failure: Compilation failure: 
[ERROR] 不再支持源选项 5。请使用 7 或更高版本。
[ERROR] 不再支持目标选项 5。请使用 7 或更高版本。...

浅搜了一下,说是maven默认的jdk版本太低,此时注意到了IDEA自动生成的pom.xml会有这么一段:

    <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>

OK,把这段加到<project></project>下就可以了,看起来意思是用jdk17。

所以真正可用的maven配置如下:

<?xml version="1.0"?>
<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>top.hello</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>

还有个<name>Hello</name>,多了少了貌似都没影响。

运行mvn compile,就会生成一个target目录,用命令行运行一下。

在这里插入图片描述

3. 可用的pom.xml

上面的已经是可以用的了,但是用起来并不方便。

在IDEA里面直接点构建会报错,也无法运行。

3.1 默认行为

<project>下添加:

<build><defaultGoal>package</defaultGoal>
</build>

这样默认构建,比如命令行输入mvn,或者IDEA里点构建,就会执行mvn package,会生成jar包。

也可以改成 <defaultGoal>compile</defaultGoal>,默认行为是编译。

3.2 mvn package

mvn package打包成jar,java -jar XXX.jar运行时会报错,找不到MANIFEST什么的,可以手动解包写一份配置文件再打包进去。

也可以在maven中设置:

<plugins><plugin><!-- Build an executable JAR --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.1.0</version><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>top.hello.Hello</mainClass></manifest></archive></configuration></plugin>
</plugins>

3.3 引入库

如果你需要引入库,在<project>下添加:

    <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.0</version><scope>test</scope></dependency></dependencies>

更多的库,在<dependencies>里加更多个<denpendency>并填好就行了。

最终就变成这样:

<?xml version="1.0"?>
<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>top.hello</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><name>Hello</name><build><defaultGoal>package</defaultGoal><plugins><plugin><!-- Build an executable JAR --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.1.0</version><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>top.hello.Hello</mainClass></manifest></archive></configuration></plugin></plugins></build><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.0</version><scope>test</scope></dependency></dependencies></project>

打包依赖

用的spring,打包的jar运行时报错,找不到spring-context。
需要打包依赖。

在build里加上下面的:

<plugins><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>
</plugins>

然后整个build 就像下面的:

 <build><defaultGoal>package</defaultGoal><plugins><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><plugin><!-- Build an executable JAR --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.1.0</version><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>top.hello.TestHelloSpring</mainClass></manifest></archive></configuration></plugin></plugins></build>

这样打包完之后,依赖在lib里,运行时:java -jar demo*.jar -classpath lib即可。

参考博客

Maven 最全教程,看了必懂
Maven打包所有依赖到一个可执行jar中

相关文章:

maven简单使用

实验课的作业用一大堆框架/库&#xff0c;统统要用maven管理。 头一次用&#xff0c;真痛苦。 所幸得以解决&#xff0c;maven真香&#xff5e; 一步一步来。 1. maven 不是java人&#xff0c;只能说说粗浅的理解了。 简单来说&#xff0c;maven是一个管理项目的工具&…...

HTML学习笔记一

目录 HTML学习笔记 一、HTML标签 1、HTML语法规范 1.1标签的语法概述 1.2标签关系 2、HTML基本结构标签 2.1第一个HTML 2.2基本结构标签总结 3、开发工具 4、HTML常用标签 4.1标签的语义 4.2标题标签 4.3段落和换行标签 4.4文本格式化标签 4.5div和span标签 4.…...

人工智能十大流行算法,通俗易懂讲明白

人工智能是什么&#xff1f;很多人都知道&#xff0c;但大多又都说不清楚。 事实上&#xff0c;人工智能已经存在于我们生活中很久了。 比如我们常常用到的邮箱&#xff0c;其中垃圾邮件过滤就是依靠人工智能&#xff1b;比如每个智能手机都配备的指纹识别或人脸识别&#x…...

支持中英双语和多种插件的开源对话语言模型,160亿参数

一、开源项目简介 MOSS是一个支持中英双语和多种插件的开源对话语言模型&#xff0c;moss-moon系列模型具有160亿参数&#xff0c;在FP16精度下可在单张A100/A800或两张3090显卡运行&#xff0c;在INT4/8精度下可在单张3090显卡运行。MOSS基座语言模型在约七千亿中英文以及代码…...

SQL基础培训10-复杂查询原理

知识点: 1、SQL查询语句逻辑执行顺序 下面是一个查询语句的逻辑执行顺序(每段语句都标明了执行顺序号): 执行1:FROM 执行2:...

如何搭建信息存储中心?资源共享方案之搭建ftp个人服务器

serveru是一款由Rob Beckers开发的ftp服务器软件&#xff0c;全称为&#xff1a;serv-u ftp server&#xff0c;它功能强大又易于使用。ftp服务器用户通过ftp协议能在internet上共享文件。FTP协议是专门针对在两个系统之间传输大的文件开发出来的&#xff0c;它是TCP/IP协议的一…...

【LeetCode】188. 买卖股票的最佳时机 IV

188. 买卖股票的最佳时机 IV&#xff08;困难&#xff09; 思路 状态定义 一、首先确定要一天会有几种状态&#xff0c;不难想到有四种&#xff1a; a.当天买入了股票&#xff1b;b.当天卖出了股票&#xff1b;c.当天没有操作&#xff0c;但是之前是买入股票的状态&#xff…...

android studio RadioButton单选按钮

1.定义 <!--单选按钮--> <TextViewandroid:layout_marginTop"10dp"android:layout_width"match_parent"android:layout_height"wrap_content"android:text"请选择你的性别&#xff1a;"> </TextView> <RadioGrou…...

AI大模型快速发展,我们该如何应对?

文章目录 提问问题范例Prompt 公式 如何准确提问 随着人工智能技术的不断发展&#xff0c;聊天型大语言模型工具如 ChatGPT 在解决各种实际问题时具有越来越广泛的应用。这一技术的快速发展&#xff0c;不仅带来了更高的工作效率和更高的精度&#xff0c;同时也改变了人类的工作…...

java多线程BlockingDeque的三种线程安全正确退出方法

本文介绍两种BlockingDeque在多线程任务处理时正确结束的方法 一般最开始简单的多线程处理任务过程 把总任务放入BlockingDeque创建多个线程&#xff0c;每个线程内逻辑时&#xff0c;判断BlockingDeque任务是否处理完&#xff0c;处理完退出&#xff0c;还有任务就BlockingDe…...

从STM32F407到AT32F407(一)

雅特力公司的MCU有着性能超群&#xff0c;价格优越的巨大优势&#xff0c;缺点是相关资料少一些&#xff0c;我们可以充分利用ST的现有资源来开发它。 我用雅特力的STM32F437开发板&#xff0c;使用原子 stm32f407的开发板自带程序&#xff0c;测试串口程序&#xff0c;原设定…...

【数据结构】顺序表和链表基本实现(含全代码)

文章目录 一、什么是线性表1. 什么是顺序表动态开辟空间和数组的问题解释LeetCode-exercise 2. 什么是链表2.1链表的分类2.2常用的链表结构及区别2.3无头单向非循环链表的实现2.4带头双向循环链表的实现2.5循序表和链表的区别LeetCode-exercise 3. 快慢指针LeetCode-exercise 一…...

CMake : Linux 搭建开发 - g++、gdb

目录 1、环境搭建 1.1 编译器 GCC&#xff0c;调试器 GDB 1.2 CMake 2、G 编译 2.1 编译过程 编译预处理 *.i 编译 *.s 汇编 *.o 链接 bin 2.2 G 参数 -g -O[n] -l、-L -I -Wall、-w -o -D -fpic 3、GDB 调试器 3.1 调试命令参数 4、CMake 4.1 含义 4.2…...

大数据实战 --- 美团外卖平台数据分析

目录 开发环境 数据描述 功能需求 数据准备 数据分析 RDD操作 Spark SQL操作 创建Hbase数据表 创建外部表 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop&#xff1a;start-all.sh 启动zookeeper&#xff1a;zkServer.sh start 启动Hive&#xff1a; nohup …...

三大本土化战略支点,大陆集团扩大中国市场生态合作「朋友圈」

“在中国&#xff0c;大陆集团已经走过30余年的发展与耕耘历程&#xff0c;并在过去10年间投资了超过30亿欧元。中国市场也成为了我们重要的‘增长引擎’与‘定海神针’。未来&#xff0c;我们将继续深耕中国这个技术导向的市场。”4月19日上海车展上&#xff0c;大陆集团首席执…...

为什么停更ROS2机器人课程-2023-

机器人工匠阿杰肺腑之言&#xff1a; 我放弃了ROS2课程 真正的危机不是同行竞争&#xff0c;比如教育从业者相互竞争不会催生ChatGPT…… 技术变革的突破式发展通常是新势力带来的而非传统行业的升级改革。 2013年也就是10年前在当时主流视频网站开启分享&#xff1a; 比如 …...

【SpringCloud常见面试题】

SpringCloud常见面试题 1.微服务篇1.1.SpringCloud常见组件有哪些&#xff1f;1.2.Nacos的服务注册表结构是怎样的&#xff1f;1.3.Nacos如何支撑阿里内部数十万服务注册压力&#xff1f;1.4.Nacos如何避免并发读写冲突问题&#xff1f;1.5.Nacos与Eureka的区别有哪些&#xff…...

ChatGPT+智能家居在AWE引热议 OpenCPU成家电产业智能化降本提速引擎

作为家电行业的风向标和全球三大消费电子展之一&#xff0c;4月27日-30日&#xff0c;以“智科技、创未来”为主题的AWE 2023在上海新国际博览中心举行&#xff0c;本届展会展现了科技、场景等创新成果&#xff0c;为我们揭示家电与消费电子的发展方向。今年展馆规模扩大至14个…...

拷贝构造函数和运算符重载

文章目录 拷贝构造函数特点分析拷贝构造函数情景 赋值运算符重载运算符重载operator<运算符重载 赋值运算符前置和后置重载 拷贝构造函数 在创建对象的时候&#xff0c;是不是存在一种函数&#xff0c;使得能创建一个于已经存在的对象一模一样的新对象&#xff0c;那么接下…...

本周热门chatGPT之AutoGPT-AgentGPT,可以实现完全自主实现任务,附部署使用教程

AutoGPT 是一个实验性的开源应用程序&#xff0c;它由GPT-4驱动&#xff0c;但有别于ChatGPT的是&#xff0c;​ 这与ChatGPT的底层语言模型一致。 ​AutoGPT 的定位是将LLM的"思想"串联起来&#xff0c;自主地实现你设定的任何目标。 简单的说&#xff0c;你只用提出…...

独立开发者如何借助 Taotoken 以更低成本试验不同大模型效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助 Taotoken 以更低成本试验不同大模型效果 对于独立开发者或小微创业团队而言&#xff0c;在产品原型或功能验证…...

端侧AI算力瓶颈与优化企业格局解析

一、引言&#xff1a;端侧AI的发展困境与研究核心1.1 端侧AI的产业价值与普及现状端侧AI作为边缘计算的核心落地形态&#xff0c;正深度渗透工业制造、智能终端、车载电子、安防监控等领域。据IDC数据&#xff0c;2025年全球端侧AI芯片市场规模突破180亿美元&#xff0c;工业端…...

LeetCode IPO问题题解

LeetCode IPO问题题解 题目描述 给定初始资本 w&#xff0c;最多完成 k 个项目。每个项目有利润和最低资本要求。找到能够获得的最大资本。 示例&#xff1a; 输入&#xff1a;capital [0,1,2,3], profits [1,2,3,5], k 2, w 0输出&#xff1a;4 解题思路 方法&#…...

FreeRTOS-Plus-TCP vs LwIP:在GD32F450上如何选择?附LAN8720A驱动避坑指南

FreeRTOS-Plus-TCP与LwIP在GD32F450上的深度对比与实战选型指南 当工程师在资源受限的GD32F450平台上构建网络功能时&#xff0c;FreeRTOS-Plus-TCP和LwIP这两个轻量级TCP/IP协议栈往往成为主要候选。本文将基于实际项目经验&#xff0c;从内存占用、性能表现、开发效率等维度进…...

RV1126B嵌入式音频开发实战:从ALSA驱动到应用播放全解析

1. 项目概述&#xff1a;从一块核心板到声音的诞生 最近在折腾一块基于瑞芯微RV1126B芯片的EASY EAI Nano开发板&#xff0c;目标是让它“开口说话”——实现稳定的音频输出。这听起来像是一个基础功能&#xff0c;但对于嵌入式开发&#xff0c;尤其是涉及多媒体处理的边缘AI设…...

Scratch 画笔模块全解析:从零到一绘制动态轨迹

1. 初识Scratch画笔模块&#xff1a;数字画布的神奇魔法 第一次接触Scratch的画笔功能时&#xff0c;我仿佛回到了小时候拿着彩色粉笔在水泥地上涂鸦的快乐时光。这个看似简单的模块&#xff0c;实际上藏着让角色"留下痕迹"的魔法——就像蜗牛爬过会留下闪亮的黏液轨…...

DB2数据字段拼接实战:从LISTAGG到XMLAGG的进阶应用与避坑指南

1. 从LISTAGG到XMLAGG&#xff1a;DB2字段拼接的进化之路 第一次在DB2里用LISTAGG函数时&#xff0c;那种丝滑的体验让我误以为找到了终极解决方案——直到某天凌晨三点&#xff0c;生产环境突然报警&#xff0c;日志里赫然写着"SQL0407N The result of a scalar fullsel…...

告别Python依赖!用SpringBoot+LangChain4j从零搭建企业级RAG知识库(附避坑指南)

告别Python依赖&#xff01;用SpringBootLangChain4j从零搭建企业级RAG知识库&#xff08;附避坑指南&#xff09; 在AI技术快速落地的今天&#xff0c;检索增强生成&#xff08;RAG&#xff09;已成为企业知识管理的热门解决方案。然而&#xff0c;当大多数团队都在Python生态…...

Claude Code cli 以及vscode版本的各种命令参考手册

Claude Code 各种命令参考手册版本说明&#xff1a; 截至 2026 年 4 月&#xff0c;Claude Code 官方文档共收录超过 70 条内置命令与绑定技能。其中约一半为内置命令&#xff08;行为由 CLI 代码实现&#xff09;&#xff0c;另一半为绑定技能&#xff08;通过 Prompt 机制实现…...

iMX8MQ开发板实测:存储、网络与4K解码性能深度解析

1. 项目概述&#xff1a;iMX8MQ开发板深度评测最近拿到了一块飞凌嵌入式出品的OKMX8MQ-C开发板&#xff0c;这是一款基于NXP i.MX 8M Quad处理器设计的核心板底板套件。对于从事嵌入式多媒体、边缘计算或者工业网关开发的朋友来说&#xff0c;i.MX8系列一直是热门选择&#xff…...