java进阶之maven

news/2025/1/11 2:08:44/

Maven

  • Maven问题处理
    • 本地jar包导入本地maven
  • Maven基础
    • 什么是maven
    • idea整合maven
    • maven目录
    • maven仓库
    • 仓库的配置
      • jdk的配置
      • 本地仓库的配置
      • 镜像仓库的配置
      • 访问仓库的优先级别
        • 如何在idea中进行配置
    • maven工程的类型
    • POM模式-Maven工程关系
      • 依赖关系
        • 如何注入依赖呢?
        • 依赖的传递性
        • 原则
        • 排除依赖
        • 依赖范围
      • 继承
      • 聚合
    • 插件管理
      • 编译插件
      • 资源拷贝插件
      • tomcat 插件
    • maven命令

Maven问题处理

maven_4">本地jar包导入本地maven

mvn install:install-file -Dmaven.repo.local=D:\myRepository\repository(你本机本地仓库的位置)-DgroupId=com.infosec (自定义groupId)-DartifactId=ISFJ_v2_0_139_16_BAISC_JDK15 (自定义artifactId)-Dversion=1.0.0 (自定义版本)-Dpackaging=jar -Dfile=D:\lib\ISFJ_v2_0_139_16_BAISC_JDK15.jar(需要安装的jar)

根据自己情况,修改指令行中的参数,然后回车执行命令,如果出现BUIL DSUCCESS即为安装成功。
在这里插入图片描述

例如:

mvn install:install-file -Dmaven.repo.local=/Users/qingmu/rep -DgroupId=com.gexin -DartifactId=gexin-rp-fastjson -Dversion=1.0.0.3 -Dpackaging=jar -Dfile=/Volumes/QINGMU/repository/com/gexin/gexin-rp-fastjson/1.0.0.3/gexin-rp-fastjson-1.0.0.3.jarmvn install:install-file -Dmaven.repo.local=/Users/qingmu/rep -DgroupId=com.chinapay.secure -DartifactId=chinapay-sdk -Dversion=1.5.0 -Dpackaging=jar -Dfile=/Users/qingmu/bitan/jar包/chinapay/secure/chinapay-sdk/1.5.0/chinapay-sdk-1.5.0.jar

Maven基础

maven_28">什么是maven

目前无论使用的是IDEA还是Eclipse等其他IDE,使用里面的ANT工具。ANT工具帮助我们进行编译,打包运行等工作。

Apache基于ANT进行了升级,研发出了全新的自动化构建工具Maven。

Maven是Apache的一款开源的项目管理工具。

Maven是哟ing项目对象模型(POM-Project Object Model,项目对象模型)的概念,可以通过一小段信息来管理项目的构建,报告和文档的软件项目管理工具。在Maven中每个项目都相当于是一个对象,对象(项目)和对象(项目)之间是有关系的。关系包含了:依赖、继承、聚合,实现Maven项目可以更加方便的实现导jar包、拆分项目等效果。

maven_37">idea整合maven

在这里插入图片描述

maven_40">maven目录

在这里插入图片描述
bin目录下存放的是可执行文件,也就是mvn命令。
conf目录下存放的是maven的核心配置文件/全局配置文件 setting.xml

maven_45">maven仓库

maven仓库是基于简单文件系统存储的,集中化管理Java API(构件)的一个服务。
仓库中的任何一个构建都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径。得益于Maven的坐标机制,任何Maven项目使用任何一个构建的方式都是完全相同的。
Maven可以在某个位置统一存储所有的Maven项目共享的构件,这个统一的位置就是仓库,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其他项目使用。

maven_50">maven远程仓库

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

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

默认的远程仓库使用的是Apache提供的中央仓库:

https://mvnrepository.com

maven_59">maven本地仓库

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

仓库的配置

jdk的配置

java">         <profile><id>jdk-1.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>

本地仓库的配置

java"><localRepository>/Users/qing/rep</localRepository>

镜像仓库的配置

如果仓库A可以提供仓库B存储的所有内容,那么就可以认为A是B的一个镜像。例如:在国内直接连接中央仓库下载依赖,由于一些特殊原因下载速度非常慢。这时,我们可以使用阿里云提供的镜像地址

java">http://maven.aliyun.com/nexus/content/groups/public

来替换中央仓库

java">http://repol.maven.org/maven2/

修改maven的setting.xml文件,具体内容如下:

java">      <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public</url><mirrorOf>central</mirrorOf></mirror>

完整的aliyun的配置文件:

java"><?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0     http://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>本地仓库的路径</localRepository><pluginGroups></pluginGroups><proxies></proxies><servers></servers><mirrors><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central</url></mirror><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public</url><mirrorOf>central</mirrorOf></mirror><mirror><id>central</id><name>Maven Repository Switchboard</name><url>http://repo1.maven.org/maven2</url><mirrorOf>central</mirrorOf></mirror><mirror><id>repo2</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://repo2.maven.org/maven2</url></mirror><mirror><id>ibiblio</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url></mirror><mirror><id>jboss-public-repository-group</id><mirrorOf>central</mirrorOf><name>JBoss Public Repository Group</name><url>http://repository.jboss.org/nexus/content/groups/public</url></mirror><mirror><id>google-maven-central</id><name>Google Maven Central</name><url>https://maven-central.storage.googleapis.com</url><mirrorOf>central</mirrorOf></mirror><!-- 中央仓库在中国的镜像 --><mirror><id>maven.net.cn</id><name>one of the central mirrors in china</name><url>http://maven.net.cn/content/groups/public</url><mirrorOf>central</mirrorOf></mirror>  </mirrors><profiles><profile><id>jdk-1.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><profile><id>repository_set</id><repositories><repository><snapshots><enabled>false</enabled></snapshots><id>public</id><name>Public Repository</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></repository></repositories><pluginRepositories><pluginRepository><releases><updatePolicy>never</updatePolicy></releases><snapshots><enabled>false</enabled></snapshots><id>public</id><name>Public Repository</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></pluginRepository></pluginRepositories></profile></profiles>
</settings>

访问仓库的优先级别

先在本地仓库中查—>到配置文件中指定的仓库中查找—>若未配置镜像仓库,去中央仓库。若配置了镜像仓库,去镜像仓库中查找,然后再去中央仓库中查找。

如何在idea中进行配置

选择Setting>Build,Execution,Deployment>Build Tools >Maven>Runner,设置Maven启动虚拟机的选项:VMOption,设置所有资源先从本地仓库查找,如果本地仓库中没有才去互联网找。

java">-DarchetypeCatalog=internal

在这里插入图片描述

maven_237">maven工程的类型

  • POM工程
    pom工程是逻辑工程。用在父级工程或聚合工程中。用来做jar包的版本控制。
  • jar工程
    将会打包成jar,用作jar包使用。即常见的本地工程—》java project
  • war工程
    将会打包成war,发布在服务器上的工程。

POM模式-Maven工程关系

Maven工具基于POM(Project Object Model,项目对象模型)模式实现的。在Maven中每个项目都相当于是一个对象,对象(项目)和对象(项目)之间是有关系的。关系包含了:依赖、继承、聚合,实现Maven项目可以更加方便的实现导入jar包、拆分项目等效果。

依赖关系

即A工程开发或者运行过程中需要B工程提供支持,则代表A工程依赖B工程。
在这种情况下,需要在A项目的pom.xml文件中增加下属配置定义依赖关系。
在这里插入图片描述
通俗理解:就是导jar包
B工程可以是自己的项目打包后的jar包,也可以是中央仓库的jar包。

如何注入依赖呢?

在pom.xml文件中根元素project下的dependencies标签中,配置依赖信息,其中可以包含多个dependence元素,以声明多个依赖,每个依赖dependence标签都应该包含以下元素:groupId,artifactId,version:依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。

依赖的传递性

依赖的传递性是Maven2.0的新特性。假设你的项目依赖于一个库,而这个库又依赖于其他库。你不必自己去找出所有的这些依赖,你只需要加上你直接依赖的库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中。这个特性是靠从远程仓库中获取的依赖的项目文件实现的。一般的,这些项目的所有依赖都会加入到项目中,或者从父项目继承,或者通过传递性依赖。

在这里插入图片描述

原则
  • 1.最短路径优先原则

意味着项目依赖关系树中路径最短的版本会被使用。
例如:A->B->C->D(2.0)和A->E->D(1.0) 则D(1.0)会被使用。因为A到E到D的路径更短。

  • 2最先声明原则

依赖路径长度一样的情况下,第一原则不能解决所有问题,比如A->B-C(1.0),A->D->E(2.0)这种情况下依赖路径长度一样,都是2,在maven2.0.8及之前的版本是不确定的,但是2.0.9之后为了避免这种情况,在POM中依赖声明的顺序决定了谁会被解析使用。顺序最靠前的那个依赖优胜。

排除依赖
java"><excluesions><excluesion></excluesion>
</excluesions>
依赖范围
java"><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><scope>compile</scope></dependency>
</dependencies>

依赖范围就决定了你依赖的坐标,在什么情况下有效,什么情况下无效:

  • compile

这是默认范围。如果没有制定,就会使用该依赖范围。表示该依赖在编译和运行时都生效。

  • provided

已提供依赖范围。使用此依赖范围的maven依赖,典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在项目运行项目的时候,由于容器已经提供了,就不需要Maven重复地引入一遍。即编写代码时候保证不报错,但是不会将这个jar包打包到war或jar中。

  • runtime

表明编译时不需要生效,只在运行时生效。如JDBC驱动实现,项目主代码的编序之需要JDK提供的JDBC接口,只有在执行测试或者运行项目时候才需要实现上述接口的具体JDBC剧去。

  • system

与provided类似,不过你必须显式制定一个本地系统路径的JAR包,此类依赖应该一致有效,Maven也不会去仓库中寻找它。但是,使用system范围依赖时必须通过systemPath元素显式地制定依赖文件的路径。

  • test

只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。典型的例子就是Junit。只在编译测试代码和运行测试的时候需要,只在测试阶段需要,打出来jar或war的时候不需要。

  • import

import范围只适用于pom文件中部分。表明指定的POM必须使用部分的依赖。
注意:import只能用在的scope中。

继承

指的是pom文件的继承,父工程中定义好版本号和需要引入的jar包后,子工程中可以只引入jar包,而在父中统一管理版本号。

聚合

在创建聚合工程的时候,总的工程必须是一个POM工程(Maven Project)(聚合项目必须是一个pom类型的项目,jar项目war项目是没有办法做聚合工程的),各个子模块可以是任意类型模块(Maven Project)

在父工程中做jar包的版本号的全局管理。

插件管理

编译插件

通过插件管理,我们可以配置使用JDK或者编译器的版本:

  • 1 setting.xml文件中配置全局编译器插件:

找到profiles节点,在里面加入profile节点:
如上面设置jdk的版本,此处略过。

  • 2.pom.xml
java"><!--    配置maven的编译插件--><build><plugins>
<!--            JDK编译插件--><plugin>
<!--                插件坐标--><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration>
<!--                    源代码使用JDK版本--><source>1.8</source>
<!--                    源代码编译为class文件的版本,要保持跟上面一致--><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>

资源拷贝插件

maven在打包时默认只将src/main/resource里的配置文件拷贝到项目中并作打包处理,而非resouce目录下的配置文件在打包时不会添加到项目中。
pom.xml配置片段:

java"><!--    配置maven的编译插件--><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.yml</include><include>**/*.yaml</include></includes></resource></resources></build>

tomcat 插件

在war项目中使用的tomcat插件

java"><!--    配置maven的编译插件--><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path></configuration></plugin></plugins></build>

maven_388">maven命令

  • install

本地安装,包含编译,打包,安装到本地仓库。

mvn install
  • clean

清除已编译信息。

mvn clean 
  • compile

只编译

  • package

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

注意:
package命令完成了项目的编译,单元测试,打包功能,但没有把打包好的可执行jar部署到本地maven仓库和远程maven私服仓库。
install命令完成了编译、单元测试、打包功能,同时把打包好的可执行jar包部署到本地maven仓库,但没有部署到远程maven私服仓库。


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

相关文章

ASP.NET Core实现微服务--什么是微服务

微服务是这几年最流行的架构&#xff0c;说起架构不提微服务都不好意思跟人家打招呼。最近想要再梳理一下关于微服务的知识&#xff0c;并且结合本人的一些实践经验来做一些总结与分享。前面会分享一些概念性的东西&#xff0c;后面也会使用.net来实践&#xff0c;一步步完成一…

【Java基础】使用Apache POI和Spring Boot实现Excel文件上传和解析功能

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

[豆包MarCode AI 刷题] 算法题解 Java 青训入营考核 五题打卡第三天

目录 11 中 观光景点组合得分问题 55 易 小E的射击训练 47 易 完美偶数计数 48 易 替换函数 70 易 打点计数器的区间合并 欢迎你报名豆包MarsCode 青训营-寒假专场&#xff01;非常开心你加入这个充满活力和创新的大家庭。在这里&#xff0c;你将遇到一群和你一样对技术充…

【开源免费】基于SpringBoot+Vue.JS教学辅助平台(JAVA毕业设计)

本文项目编号 T 123 &#xff0c;文末自助获取源码 \color{red}{T123&#xff0c;文末自助获取源码} T123&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

微软发布AIOpsLab:一个开源的全面AI框架,用于AIOps代理

在当今这个云计算技术迅猛发展的时代&#xff0c;企业面临着前所未有的挑战与机遇。随着云基础设施的日益复杂化&#xff0c;它们成为了企业运营不可或缺的支柱。网站可靠性工程师&#xff08;Site Reliability Engineers&#xff0c;简称SRE&#xff09;和DevOps团队肩负着关键…

时序数据库对比

优劣势对比 数据库优势 劣势InfluxDB使用广泛&#xff0c;生态完备&#xff0c;社区活跃集群版本闭源TDengine性能好&#xff0c;集群版本免费&#xff0c;内置流式计算&#xff0c;社区活跃 不支持 Prometheus 的 Query 类接口 M3DB完全开源架构复杂&#xff0c;资源占…

ios越狱脚本巨魔商店安装教程

使用爱思助手安装 安装爱思助手&#xff1a;在电脑上安装 iTunes 和爱思助手&#xff0c;并使用 Apple ID 登录2。 IPA 签名&#xff1a;打开爱思助手&#xff0c;选择工具箱中的 IPA 签名。点击添加 IPA 文件&#xff0c;选择下载的 TrollInstallerX.ipa 文件。选择使用 Apple…

Pytorch单、多GPU和CPU训练模型保存和加载

Pytorch多GPU训练模型保存和加载 在多GPU训练中&#xff0c;模型通常被包装在torch.nn.DataParallel或torch.nn.parallel.DistributedDataParallel中&#xff0c;这会在模型的参数名前加上module前缀。因此&#xff0c;在保存模型时&#xff0c;需要使用model.module.state_di…