Maven的基础知识

2023-11-04

Maven介绍

Maven 是一个项目管理和 综合工具,Maven 提供了开发人员构建一个完整的生命周期框架,开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构 和 默认构建生命周期。

Maven是什么?

它是一个 Apache 的开源项目,主要服务于基于 Java 平台的项目构建,依赖管理 和项目信息管理。

配置maven的环境变量

右击此电脑,选择属性,打开高级系统设置,选择环境变量,在系统变量找到 path ,点击编辑,将 maven 的安装路径添加上即可

Maven目录说明

bin:该目录下存放的是执行文件,命令

boot:该目录存放的是 maven 启动时需要的 jar 包

conf: 存放一个重要的配置文件,maven 的核心配置文件/全家配置文件---> settings.xml 文件

自定义安装Maven

在 maven.Apache 官网中下载到 meven.zip 文件,解压完成后,需要配置环境变量,同时需要一个 .m2 文件夹,如果没有该文件夹,我们在 cmd 命令 执行 mvn help:system 命令,执行完该命令会发现目录下自动创建了.m2 文件目录

Maven仓库

Maven 仓库是基于简单文件系统存储的,集中化管理 Java API 资源(构件)的一个服务。

仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,得益于 Maven的坐标机制,任何 Maven 项目使用任何一个构件的方式都是完成相同的。

Maven 可以在某个位置统一存储所有Maven 项目共享的构件,这个统一的位置就是仓库,项目构建完毕后生成的构件也可以安装或部署到仓库中,供其他项目使用。

对于 Maven 来说,仓库分为两类,本地仓库和远程仓库。

远程仓库

不在本机中的一切仓库,都是远程仓库: 分为中央仓库 和 本地私服仓库

远程仓库指通过各种协议如:file:// 和 http://访问的其他类型的仓库,这些仓库可能是第三方搭建的真实的远程仓库,用来提供它们的构件下载(例如 repo.maven.apache.org和uk.maven.org是Maven的中央仓库)。其他 远程 仓库可能是你的公司拥有在建立在文件或HTTP服务器的内部仓库(不是Apache 的那个中央仓库,而是你们公司的私服,你们自己在局域网中搭建的 maven仓库),用来在开发团队间共享私有构件和管理发布的.

默认的远程仓库使用的 Apache 提供的中央仓库 http://mvnrepository.com

本地创库

本地仓库指本地的一份拷贝,用来缓存远程下载,包含你尚未发布的临时构件

配置

在 settions.xml 文件中配置本地仓库

打开 setting.xml 配置文件

<localRepository>本地仓库在硬盘中的位置</localRepository>

在 settions.xml 文件中配置镜像仓库

如果仓库 A 可以提供仓库 B 存储的所有内容,那么就可以认为A是B的镜像。例如:在国内直接连接中央仓库下载依赖,由于一些特殊原因下载速度非常慢。这是,我们可以使用阿里云提供的 镜像 http://maven.aliyun.com.nexus/content/grounps/public/来替换中央仓库 http://repol.maven.ort/maven2/ 修改 maven 的 setting.xml 文件

<mirror>

<!-- 指定镜像ID(可自定义名称) -->

    <id>nexus-aliyun</id>

    <!-- 匹配中央仓库(阿里云的仓库名称,不可以自己起名,必须这样写) -->

    <mirrorOf>central</mirrorOf>

    <!-- 指定镜像名称(可定义名称) -->

    <name>Nexus aliyun</name>

    <!-- 指定的镜像路径(镜像地址) -->

    <url>http://maven.aliyun.com/nexus/content/grounps/public/</url>

</mirror>

优先级别

本地仓库 --> 到配置文件中指定的仓库中 --> 如果没有配置镜像仓库,就会去到中央仓库中找(如果配置了镜像仓库就会到镜像仓库中找,如果镜像仓库中没有,再去默认的中央仓库)

JDK的配置

如果你的 idea 中有多个 jdk的时候,就需要指定你的编译和运行的 jdk:

在 settings.xml 中配置

<profile>

    <!--

settings.xml 中的 id 不能随便起的

告诉maven我们使用的是 jdk1.8

-->

<id>jdk1.8</id>

    <!-- 开启编译器的使用 -->

    <activation>

     <activeByDefault>true</activeByDefault>

        <jdk>1.8</jdk>

    </activation>

    <properties>

        <!-- 配置编译器信息 -->

        <maven.compiler.source>1.8</maven.compiler.source>

        <maven.compiler.target>1.8</maven.compiler.target>

     <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>

    </properties>

</profile>

注:配置的前提是 idea 中要有对应的 jdk

Maven 工程类型

POM工程

POM工程是逻辑工程 ,用在父级工程或聚合工程中,用来做 jar包的版本控制

该工程更多是起到管理作用,该工程中不能写逻辑性代码和业务性代码

JAR 工程

将会打包成 jar,用作jar包使用,即常见的本地工程 --- > Java Project

WAR 工程

将会打包成 war,发布在服务器上的工程

Maven项目的目录结构

src/mian/java:该目录下存储的是 Java源代码

src/mian/resources:存储主要的资源文件,比如 xml 配置文件和properties 文件

src/test/java:存储测试用的类,比如 JUNIT的测试一般就放在这个目录下面,因为测试类本身就不属于项目的,所以放在任何一个包下都显得很尴尬,所以 maven 专门创建了一个测试包,用于存放测试的类

src/test/resources:可自己创建存储测试环境使用资源文件

src:包含了项目所有的源代码和资源文件,以及其他项目相关的文件

target:编译后内容放置的文件夹 如 .class文件

pom.xml:是Maven的配置文件,配置项目和项目之间的关系,包含配置依赖关系等等

注:在 Maven 创建的项目中的包名不要随便更改

Maven中的常见命令

install : 本地安装,包含编译,打包,安装到本地项目

编译 - javac: 打包 jar,将 java 代码打包为 jar 文件

安装到本地仓库 ,将打包的 jar 文件,保存到 本地仓库目录中

clean : 消除已编译信息。删除工程中的 target 目录

compile : 只编译,javac 命令

package: 打包,包含编译,打包两个功能

package 和 install 的区别

package 命令完成了项目编译,单元测试,打包功能,但没有把打包好的可执行 jar 包 (war 包或其他形式的包) 部署到本地 maven 仓库和 远程 maven私服仓库

install 命令完成了项目编译,单元测试,打包功能,同时把打包好的可执行 jar 包 (war 包或其他形式的包)部署到本地 maven 仓库,但没有部署到远程 maven 私服仓库

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven的基础知识 的相关文章

  • Gradle 构建过程失败

    我的项目正在成功构建 突然我在 Android studio 中收到以下错误 无法找到方法 org gradle api publish maven internal publication MavenPublicationInternal
  • Java 错误和警告列表

    在哪里 如何获得所有 java 和 javac 的错误和警告消息的列表 This http mindprod com jgloss compileerrormessages html我认为页面是您所需要的
  • 二元运算符 >=、-、* 的错误操作数类型

    我无法弄清楚如何修复代码中不断出现的这些错误 import java util Scanner public class Unit02Prog1 public static void main String args Scanner inp
  • Android Studio 与 Google Play 服务的编译问题

    我正在运行 Android Studio 0 8 4 并在 Android Studio 0 8 2 上尝试过此操作 我正在运行 Java JDK 1 8 0 11 并尝试使用 JDK 1 8 0 05 每当我尝试构建我的 android
  • Jenkins 未显示 Maven 编译器错误

    在 Jenkins 中构建多模块 maven 3 项目时 如果出现构建错误 我们会收到一条神秘消息 表明 Maven 编译器插件失败 这在上周才刚刚开始发生 INFO BUILD FAILURE INFO INFO Total time 1
  • 当我们使用赋值而不是比较时,如何评估 if/while 条件?

    我在学习 Java 的 OCA OCP 时发现了这个令人惊讶的事情 下面是第一段代码 其中 if 测试条件 部分 让我惊讶 public class BooleanIf public static void main String args
  • 如何在正则表达式中编写可选单词?

    我想编写一个识别以下模式的 java 正则表达式 abc def the ghi and abc def ghi 我试过这个 abc def the ghi 但是 它没有识别第二种模式 我哪里出错了 abc def the ghi 删除多余
  • 是否可以使用 Apache Tika 提取表信息?

    我正在寻找 pdf 和 MS Office 文档格式的解析器 以从文件中提取表格信息 当我看到 Apache Tika 时 正在考虑编写单独的实现 我能够从任何这些文件格式中提取全文 但我的要求是提取表格数据 我希望有 2 列采用键值格式
  • android gradle插件-离线安装

    我必须在离线电脑上安装 android gradle 插件 通过谷歌搜索 我了解到我可以通过本地 Maven 存储库来做到这一点 但从不成功的尝试和所有关于这个问题的质量保证中我知道这并不简单 我从来没有和maven一起工作过 有经验的人可
  • 在 Eclipse 中删除空块之前的新行

    我更喜欢奥尔曼式 http en wikipedia org wiki Brace style Allman style大括号 例如 if foo magical prancing unicorn stuff 而不是 if foo unma
  • 我的 Kafka 流应用程序刚刚退出,代码为 0,什么也不做

    为了尝试 Kafka 流 我这样做了 public static void main String args final StreamsBuilder builder new StreamsBuilder final Properties
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • 始终将双精度舍入

    我怎么总是能把一个double to an int 并且永远不要将其四舍五入 我知道Math round double 但我希望它始终向上舍入 所以如果是的话3 2 四舍五入为 4 您可以使用Math ceil method 请参阅Java
  • 如何在 JmsMessagingTemplate.sendAndReceive 上设置等待超时

    我在 MVC 控制器中使用 JmsMessagingTemplate 的 sendAndReceive 但如果没有发送回复消息 它似乎会永远等待回复 该文档指出 返回 回复 如果无法接收消息 例如由于超时 则可能为 null 然而 我只是不
  • 在约束验证器中使用 Guice 进行依赖注入

    我有一个在 ConstraintValidator 的实现中注入类的用例 我正在使用 Google guice 进行依赖项注入 目前无法在验证器内注入 我的场景的简化形式 内部模块 Provides Singleton public Ser
  • javadoc 子集/java 库组织

    我自己从来没有运行过javadoc 无论是在命令行还是ant 的 javadoc 任务 http ant apache org manual Tasks javadoc html 我将使用 ant 我需要为我编写的库生成 javadoc 问
  • 如何在 JASPIC 中保存经过身份验证的用户?

    我开发了一个安全认证模块 SAM 并实现了validateRequest方法 我还有一个简单的 Web 应用程序配置为使用此 SAM In my validateRequest方法 我检查 clientSubject 并设置一个Caller
  • 如何在一次操作中使用 Thymeleaf 检查 null 和空条件?

    有什么方法可以检查 Thymeleaf 中的 null 和empty 条件吗 方法一 1 variable1 variable2 variable3 2 variable null 3 variable 如果我们结合两个条件 例如 vari
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • Spring MVC:通用 DAO 和服务类

    我正在 Spring MVC 中编写网页 我使用 Generic DAO 编写了所有 DAO 现在我想重写我的服务类 我该如何写 通用服务 我的 DAO 如下 DAO package net example com dao import j

随机推荐

  • error: ‘QObject::QObject(const QObject&)’ is private within this context

    error QObject QObject const QObject is private within this context 这个错误是由于QObject类的拷贝构造函数被声明为私有 导致在某些情况下无法进行对象的拷贝操作而产生的
  • 最小费用最大流详解与模板

    最小费用最大流 在最大流有多组解时 给每条边在附上一个单位费用的量 问在满足最大流时的最小费用是多少 思想 给出一个容量网络 那他的最大流一定是一个定值 即使是有多个一样的最大值 所以我们从开始的可行流开始增广时 最终的增广量是一定的 所以
  • 你知道“$set”是什么吗?

    set 的原理是基于Vue的响应式系统和Vue的观察者机制 当使用 set 方法时 它会执行以下步骤来实现动态添加或修改响应式对象的属性 1 首先 set 会检查对象是否已经是响应式的 如果对象未被代理为响应式对象 它会将对象转换为响应式对
  • 机器学习之朴素贝叶斯算法的详解(包含高斯朴素贝特斯、多项式朴素贝叶斯、伯努利朴素贝叶斯,以及相应算法的简单实现)

    机器学习18 贝叶斯算法详解 2021 06 02 2021 06 05 一 朴素贝叶斯算法 为什么需要朴素贝叶斯算法 比如说 我们想预测一个人究竟是否能够侥幸在空难中生还 那么我们就需要建立一个分类模型来学习我们的训练集 在训练集中 其中
  • 学习cocos2d-x 之路 (1)--了解cocos2d-x

    学前感言 很久以前就听说过cocos2d的大名 知道它在手机游戏开发中处于主导地位 但是今天是真正意义上第一次接触 当前手机游戏市场十分火爆 我想对于任何一个对游戏感兴趣并且准备投身手机游戏开发的人学习这款引擎都是必要的 从百度百科上阅读了
  • Linux学习之安装vim软件

    Linux学习之安装vim软件欢迎来到陈冬冬的个人经验分享平台https www chendd cn blog article 1477573897833009153 html 在前一篇文章中初步使用到了 vi 命令去更改网络连接的参数文件
  • 【git系列】从远端仓库获取最新代码合并到本地分支里

    在日常开发中 很有可能几个开发人员都在开发同一个代码仓分支 导致本地分支里的代码 落后于 远端分支里的 我们需要做的就是从远端仓库获取最新代码合并到本地分支里 1 git pull 有风险 获取最新代码到本地 并自动合并到当前分支 首先我们
  • ORB_SLAM2 with XTION的编译问题(1)

    ORB SLAM2 with XTION的编译问题及解决 1 源链接为https github com chaizheng2157 RGBD ORB SLAM2 RT 其中里面有两个包要编译 分别是g2o with orbslam2和ORB
  • matlab做多元门限回归模型,门限自回归模型

    2014年第6期 郑晓亚 我国股权风险溢价的长期趋势与短期特征 我国股权风险溢价的长期趋势与短期特征 结合门限自回归模型与B P多重结构型断点检验的经验研究郑 Hansen 于 1996 年在 Econometrica 上发表文章 Infe
  • Vercel国内无法访问解决方案

    域名解析使用 cname vercel dns com 或 将 A 记录从 76 76 21 21 改成 76 223 126 88 官方建议将 cname 从 cname vercel dns com 修改为 cname china ve
  • python web页面增删改查_python web 增删改查教你快速入门

    1 导入需要的扩展和包from sqlalchemy import create engine Column Integer String from sqlalchemy ext declarative import declarative
  • 数据源 JNDI 作用

    数据源在JDBC中的应用简介众所周知 JDBC Java数据库连接 是Java 2企业版的重要组成部分 它是基于SQL层的API 通过把SQL语句嵌入JDBC接口的方法中 用户可以通过Java程序执行几乎所有的数据库操作 JDBC只提供了接
  • uni-app的Vue.js实现微信小程序的紧急事件登记页面功能

    主要功能实现 完成发生时间选择功能 用户可以通过日期选择器选择事件发生的时间 实现事件类型选择功能 用户可以通过下拉选择框选择事件的类型 添加子养殖场编号输入框 用户可以输入与事件相关的子养殖场编号 完成事件描述输入功能 用户可以通过文本输
  • 1、网易校招2016年《下厨房》

    题目描述 牛牛想尝试一些新的料理 每个料理需要一些不同的材料 问完成所有的料理需要准备多少种不同的材料 输入描述 每个输入包含 1 个测试用例 每个测试用例的第 i 行 表示完成第 i 件料理需要哪些材料 各个材料用空格隔开 输入只包含大写
  • 数据分析实战项目:SQL分析淘宝用户行为

    文章目录 一 项目背景及目的 1 1 项目背景 1 2 项目目的 1 3 数据集来源与介绍 二 数据导入 2 1 图形界面工具导入 2 2 以系统命令行导入 三 数据清洗 3 1 删除重复值 3 2 查看缺失值 3 3 时间格式转换 3 4
  • 赛宁网安有力保障淮安市网络安全技能竞赛决赛

    9月6日 由中共淮安市委网信办 淮安市总工会 淮安市人社局 淮安市教育局 淮安市公安局 共青团淮安市委共同主办 淮阴工学院协办 淮安市网络信息和数据安全协会 淮安市信息安全等级保护工作协调小组办公室承办 中国电信股份有限公司淮安分公司 中国
  • stm32 无刷电机控制板

    stm32f103c8t6 做主控 自制无刷电机 bldc 控制板 支持有感和无感两种模式 可通过硬件切换 内部包含原理图和源代码及照片 文件 url80 ctfile com f 25127180 745426979 e8e3fc p 5
  • Acesrc and Hunting【模拟 贪心】

    HDU 6660 题目链接 这道题主要就是讲我们从任意点出发 每次走的都是没走过并且 曼哈顿距离大于1小于3的点 然后问能不能覆盖完整幅图 这里就想到一个很经典的问题 4399小游戏除草游戏 以前玩过的一个小游戏倒是让我对这道题的解法有了方
  • 动手学数据分析 Task4

    动手学数据分析 Task4 一 可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图 二 可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况 三 可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况 一 可视化展
  • Maven的基础知识

    Maven介绍 Maven 是一个项目管理和 综合工具 Maven 提供了开发人员构建一个完整的生命周期框架 开发团队可以自动完成项目的基础工具建设 Maven 使用标准的目录结构 和 默认构建生命周期 Maven是什么 它是一个 Apac