当前位置: 首页 > 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;你只用提出…...

数谷智能和爱莫科技,非标准数据 AI 定制处理谁更强?

在数字化转型步入“深水区”的今天&#xff0c;企业面临的最大挑战不再是标准化的数据库信息&#xff0c;而是占据企业数据总量 80% 以上的“非标准数据”。这些数据散落在手写单据、非结构化合同、复杂的网页信息、甚至是不规则的工业图像中。如何高效、精准地处理这些非标数据…...

【软考高项】需求跟踪矩阵在项目全生命周期中的关键作用与实践指南

1. 需求跟踪矩阵&#xff1a;项目管理的"导航仪" 刚入行做项目经理那会儿&#xff0c;我最怕的就是需求变更。明明已经确认好的需求&#xff0c;开发到一半客户突然说要改&#xff0c;整个团队手忙脚乱地翻文档、改代码、调测试用例&#xff0c;最后交付时还是漏了几…...

3分钟搞定Windows和Office激活:KMS_VL_ALL_AIO智能脚本使用指南

3分钟搞定Windows和Office激活&#xff1a;KMS_VL_ALL_AIO智能脚本使用指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为系统激活烦恼吗&#xff1f;Windows提示许可证过期&#xff0c…...

快速验证openclaw:用快马AI一键生成安装脚本与抓取原型

最近在做一个机器人抓取相关的项目&#xff0c;偶然发现了openclaw这个开源工具。作为一个Python实现的轻量级抓取框架&#xff0c;它很适合快速搭建原型。不过在实际使用过程中&#xff0c;我发现它的安装和配置过程有点繁琐&#xff0c;特别是对新手不太友好。于是尝试用InsC…...

革新性B站体验全流程优化:Bilibili-Evolved让卡顿成为历史

革新性B站体验全流程优化&#xff1a;Bilibili-Evolved让卡顿成为历史 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved 你是否也曾遭遇这样的窘境&#xff1a;精心挑选的番剧在高潮时刻突然卡…...

如何快速突破iOS限制:终极降级完全手册

如何快速突破iOS限制&#xff1a;终极降级完全手册 【免费下载链接】downr1n downgrade tethered checkm8 idevices ios 14, 15. 项目地址: https://gitcode.com/gh_mirrors/do/downr1n 你是否曾想过让旧款iPhone重获新生&#xff1f;是否对苹果系统的版本限制感到困扰&…...

企业级低代码平台JeecgBoot全攻略:从零基础到实战应用

企业级低代码平台JeecgBoot全攻略&#xff1a;从零基础到实战应用 【免费下载链接】jeecg-boot 一款 AI 驱动的低代码平台&#xff0c;提供"零代码"与"代码生成"双模式——零代码模式一句话搭建系统&#xff0c;代码生成模式自动输出前后端代码与建表 SQL&…...

ROS2编译报错CMake未找到diagnostic_updater:从诊断工具缺失到精准安装

1. 当CMake告诉你找不到diagnostic_updater时发生了什么 第一次看到这个报错的时候&#xff0c;我也是一头雾水。明明代码是从GitHub上clone下来的标准功能包&#xff0c;怎么一编译就报错呢&#xff1f;那个红色的"CMake Error"特别扎眼&#xff0c;就像开车时突然亮…...

Claude Code性能优化实战:如何让AI编程助手在大型项目中飞起来

Claude Code性能优化实战&#xff1a;如何让AI编程助手在大型项目中飞起来 大型代码库就像一座迷宫&#xff0c;而Claude Code则是你手中的智能地图。但当项目规模膨胀到数十万行代码时&#xff0c;这张地图的加载速度可能会让你抓狂。本文将分享一系列经过实战验证的性能优化技…...

MLCC陶瓷电容选型避坑指南:从X7R到C0G,5个关键参数决定电路稳定性

MLCC陶瓷电容选型避坑指南&#xff1a;从X7R到C0G&#xff0c;5个关键参数决定电路稳定性 当你在设计一个精密电源模块时&#xff0c;突然发现输出电压在高温环境下出现异常波动&#xff1b;或者调试射频电路时&#xff0c;明明计算无误的滤波网络却始终达不到预期效果——这些…...