maven仓库分类,Maven依赖的是本地工程还是仓库jar包
maven仓库分类,Maven依赖的是本地工程还是仓库jar包详细介绍
本文目录一览: 公司maven一般怎么用
Maven 是一个项目管理工具,包含了一个项目对象模型(POM : Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System )和用来运行定义在生命周期阶段中插件目标的逻辑。Maven 仓库有三种类型:本地(local):Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。中央(central):中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。远程(remote):开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
为什么执行maven命令时,会首先链接远程仓库呢
在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)
任何的构件都有唯一的坐标,Maven根据这个坐标定义了构件在仓库中的唯一存储路径,
解读Maven在仓库中的存储路径:
1.基于groupId准备路径,将句点分隔符转成路径分隔符,就是将 "." 转换成 "/" ; example: org.testng --->org/testng
2.基于artifactId准备路径,将artifactId连接到后面:org/testng/testng
3.使用version准备路径,将version连接到后面:org/testng/testng/5.8
4.将artifactId于version以分隔符连字号连接到后面:org/testng/testng/5.8/tesng-5.8
5.判断如果构件有classifier,就要在 第4项 后增加 分隔符连字号 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5
6.检查构件的extension,如果extension存在,则加上句点分隔符和extension,而extension是由packing决定的,org/testng/testng/5.8/tesng-5.8-jdk5.jar
到这里我们就明白了Maven 对于构件存储的细节。
Maven 仓库的分类:
maven的仓库只有两大类:1.本地仓库 2.远程仓库,在远程仓库中又分成了3种:2.1 中央仓库 2.2 私服 2.3 其它公共库
1.本地仓库,顾名思义,就是Maven在本地存储构件的地方。
注:maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建
maven本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven仓库的默认位置
如何更改maven默认的本地仓库的位置:这里要引入一个新的元素:localRepository,它是存在于maven的settings.xml文件中
1.1 更改配置用户范围的本地仓库:先在/.m2/目录下创建settings.xml文件,然后在~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址
maven repository怎么理解
简单点来说,repository就是个仓库。
maven里有两种仓库,本地仓库和远程仓库。远程仓库相当于公共的仓库,大家都能看到。
本地仓库是你本地的一个山寨版,只有你看的到,主要起缓存作用。
当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。如果有则直接返回,否则会向远程仓库请求,并做缓存。
什么是Maven仓库?
Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源。
1、在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j.jar,junit.jar等等。每建立一个项目,你都需要建立这样的一个/lib目录,然后复制一对jar文件,这是很明显的重复。
2、永远是噩梦的起点,多个项目不共用相同的jar文件,不仅会造成磁盘资源的浪费,也使得版本的一致性管理变得困难。你需要将大量的jar文件提交到代码库里,可是版本管理工具在处理二进制文件方面并不出色。
3、Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源。
4、此外,由于Maven仓库中所有的JAR都有其自己的坐标,该坐标告诉Maven它的组ID,构件ID,版本,打包方式等等,因此Maven项目可以方便的进行依赖版本管理。你也不在需要提交JAR文件到SCM仓库中,你可以建立一个组织层次的Maven仓库,供所有成员使用。
如何搭建maven远程中央仓库
1.首先,配置好Maven,jdk等必备环境
2.配置好环境后,下载最新版本的nexus
下载地址:http://www.sonatype.org/nexus/go
3.打开目录nexus-***\bin\jsw
这个文件夹下面有适配各种平台的nexus服务配置工具。
大家可以根据自己的需要选择对应的版本,我用的是windows-x86-64版本的。
打开一个windows的版本你会看到如下几个文件:
如果要将nexus安装成windows服务,就点击install-nexus.bat这个文件,安装完成后,打开浏览器,访问http://localhost:8081/nexus/ 启动后如下页面,在右上角有个Log in 的超链接,点击登录
默认的用户名是 admin 密码是 admin123
登录后你可以在左侧修改登录信息:
接下来进入正题,仓库配置在左侧Repositories中
点击后会看到nexus提供的所有仓库类型,其中主要用的的就是3rd party、Snapshots、Releases这三个,分别作为第三方仓库,项目的快照仓库和项目的发布仓库.
这里以3rd party仓库为例,为大家演示如何上传jar包,方法很简单,选中3rd party仓库后选择Artifact
Upload标签,填好要上传包的groupID,ArtifactID,Version等信息后,点击下方upload按钮上传jar包即可。
上传之后可以在Browse Index中查看上传结果
完成了上传操作后,在我们本地构建过程中,打开Maven工程中的pom.xml文件,将repository标签中的信息配置为此远程私仓的信息,填好对应的dependency信息,即可完成本地构建从远程私仓中调用依赖的需求。
上面一系列眼花缭乱的操作看明白了么,如果没看明白接下来让我给你介绍个无比简单的解决方案—华为软件开发云 发布仓库!
发布服务提供的Maven仓库有release(发布仓),snapshot(快照仓),Mirror(中央仓镜像库),编译构建仓四种类型,其中release和snapshot属于租户级私有仓,用户归档用户内部软件组件的发布版本和快照版本,并支持通过Maven配置进行租户内依赖共享;Mirror仓主要代理并镜像缓存了grails-core、maven2、jcenter、grails-plugins四个中央仓的开源第三方组件,可作为租户内第三方私服仓库使用,提升依赖组件下载效率;编译构建仓是租户项目级私有仓,主要用于归档项目内构建出来的软件组件。
使用方法和远程私仓使用方法完全一样,但是省却大家所有自己搭建和维护远程私仓的工作和资源,即开即用,节省人力物力,提高开发效率。
如何配置maven的本地安装位置和本地仓库
方法/步骤
下载maven,最新版本是Maven3.0.4 , 下载文件后,并解压到 D:\maven\apache-maven-3.0.4
配置maven3的环境变量:先配置M2_HOME的环境变量,新建一个系统变量:M2_HOME , 路径是:D:\maven\apache-maven-3.0.4,如图所示
再配置path环境变量,在path值的末尾添加"%M2_HOME%\bin",如下图所示;
点击确定之后,打开cmd窗口:输入 mvn -version,出现如下内容表示安装成功。
5
给maven配置版本库,打开conf文件夹下的D:\maven\apache-maven-3.0.4\settings.xml文件,找到第53行,把注释去掉,修改成:
D:\maven\repository到处maven的安装与版本库配置完成
下载maven,最新版本是Maven3.0.4 , 下载文件后,并解压到 D:\maven\apache-maven-3.0.4
配置maven3的环境变量:先配置M2_HOME的环境变量,新建一个系统变量:M2_HOME , 路径是:D:\maven\apache-maven-3.0.4,如图所示
再配置path环境变量,在path值的末尾添加"%M2_HOME%\bin",如下图所示;
点击确定之后,打开cmd窗口:输入 mvn -version,出现如下内容表示安装成功。
给maven配置版本库,打开conf文件夹下的D:\maven\apache-maven-3.0.4\settings.xml文件,找到第53行,把注释去掉,修改成:
D:\maven\repository到处maven的安装与版本库配置完成
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。
Java Maven打包总结(Jenkins多模块编译部署)
原文地址: Java Maven打包总结(Jenkins多模块编译部署)
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。 完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。 完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
可以看到主要区别在把生成的jar包最终存放的位置, package只管打包; install把打好的包放到了本地maven仓库;deploy是同时放到本地仓库和远程maven私服
这里本地仓库默认是 /root/.m2/repository/ ,具体配置在 ${M2_HOME}/conf/settings 的 localRepository 配置项决定。远程私服仓库一般是nexus,具体地址在项目的pom.xml中配置。比如
一般是进入父级目录之后执行
如果是多级目录的话,有时候并不一定是按照 具体的项目来 编译,比如
这个时候如果一个项目一个项目来编译会超级多,很繁琐,这里是按照 subparentproject 来编译,命令如下
有个注意的地方: subparentproject 目录下的pom.xml文件中一定有类型如下的配置
1、需要安装插件 Extended Choice Parameter Plug-In 可以支持参数单选、多选 2、项目选择"自由风格",而不是maven编译 3、在“构建” -> "执行shell" 中编写 子模块编译脚本及其后续处理
具体配置如下图
“构建” -> "执行shell" 中的处理脚本
附加:
Linux Bash下字符串操作总结
Maven依赖的是本地工程还是仓库jar包
相信大家都碰见过maven配置的依赖或者是jar包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看maven依赖的文件的时候,就能直接查看到源码。
一、本地工程依赖
举个例子,其架构如下所示(以下均使用eclipse中m2eclipse插件进行演示)——
此时,这里依赖的“dependency-to-hello”指代的是eclipse工作空间中的工程,这样,我们直接源码依赖的便是工作空间里的源码,这样很方便,也是我们需要的。会注意到,所依赖的“dependency-to-hello”工程,并没有显示其路径,也就是默认的工作空间的地址。
那么,什么时候maven依赖的是仓库(本地仓库或远程仓库)中的jar包呢?
二、(本地/远程)仓库jar包依赖
很简单的方法之一,直接把“dependency-to-hello”工程关闭掉(close project),这样,就得到这样一个视图——
会看到,此时maven依赖的正是对应“dependency-to-hello”工程的jar文件,并且,后面的路径显示是从maven仓库里面取的。
三、工程依赖及仓库依赖的转换
OK,我们现在还原之,我们将工程“dependency-to-hello”打开,会看到对应的maven依赖又变回原来的工程依赖了。
需要说的是,当重新打开工程“dependency-to-hello”的时候,hello工程并没有出现红色感叹号,也就是无须做“update dependencies”等的更新maven依赖等操作。
从这里,我们就能够看出来——m2eclipse首先查看是否能够从本地工程库中得到对应的maven依赖,如何存在,则将本地工程依赖进来;如何不存在,则从本地仓库/远程仓库中加载解析对应的jar包依赖。
四、版本号变更
在这儿,我假装模拟一下版本号变更,来看一下,会发生什么情况?
现在“dependency-to-hello”工程是“快照”版本,当我们将之换为正式版本的时候,发现“hello”工程的maven依赖重新变回了jar依赖,如下——
“dependency-to-hello”工程的maven坐标配置——
com.juvenxu.mvnbook
dependency-to-hello
0.0.1
jar
“hello”工程的依赖配置——
com.juvenxu.mvnbook
dependency-to-hello
0.0.1-SNAPSHOT
其文件架构会显示如下——
会发现其依赖是原有的仓库中的“快照”版本的“dependency-to-hello”的jar包。我们将仓库中的“快照”版本删除掉。刷新工程,发现hello工程上显示红色感叹号。如下——
也就是说,其依赖是空依赖,本地及仓库中均不存在。
当然这个“陷阱”是我自己加的,重新更改其版本号正确对应即可,就可以重新得到maven本地工程依赖了。
五、总结
在日常多人协作开发过程中,我们常常会遇到maven依赖版本变更带来的问题。当我们的工作空间也存在对应的依赖工程(对应上述例子中的“dependency-to-hello”工程)的时候,我们可以通过判断依赖的是本地工程还是仓库jar包的方式来判断是否出现了版本不一致的问题。从而,就能够解决maven依赖版本变更带来的问题。
我也遇到了两次这样的问题,但解决方法不一样。网上Maven的教程很多,但真正解决日常使用问题的,太少;1、解决法就是:右键项目,【Maven】--》【UpdateProjectConfiguration】Tips:根据Maven插件版本的问题,【UpdateProjectConfiguration】这个东西有的时候是打勾的,有的时候就是个JMenuItem2、我想第一种就可以了,第二种就给你地址吧
相信大家都碰见过 maven 配置的依赖或者是 jar 包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看 maven 依赖的文件的时候,就能直接查看到源码。
一、本地工程依赖
举个例子,其架构如下所示(以下均使用eclipse中m2eclipse插件进行演示)——
此时,这里依赖的“dependency-to-hello”指代的是eclipse工作空间中的工程,这样,我们直接源码依赖的便是工作空间里的源码,这样很方便,也是我们需要的。会注意到,所依赖的“dependency-to-hello”工程,并没有显示其路径,也就是默认的工作空间的地址。
那么,什么时候maven依赖的是仓库(本地仓库或远程仓库)中的jar包呢?
二、(本地/远程)仓库jar包依赖
很简单的方法之一,直接把“dependency-to-hello”工程关闭掉(close project),这样,就得到这样一个视图——
会看到,此时maven依赖的正是对应“dependency-to-hello”工程的jar文件,并且,后面的路径显示是从maven仓库里面取的。
三、工程依赖及仓库依赖的转换
OK,我们现在还原之,我们将工程“dependency-to-hello”打开,会看到对应的maven依赖又变回原来的工程依赖了。
需要说的是,当重新打开工程“dependency-to-hello”的时候,hello工程并没有出现红色感叹号,也就是无须做“update dependencies”等的更新maven依赖等操作。
从这里,我们就能够看出来——m2eclipse首先查看是否能够从本地工程库中得到对应的maven依赖,如何存在,则将本地工程依赖进来;如何不存在,则从本地仓库/远程仓库中加载解析对应的jar包依赖。
maven repository 私人仓库怎么搭建
方法:
1.基于artifactId准备路径,将artifactId连接到后面:org/testng/testng
2.使用version准备路径,将version连接到后面:org/testng/testng/5.8
3.将artifactId于version以分隔符连字号连接到后面:org/testng/testng/5.8/tesng-5.8
4.判断如果构件有classifier,就要在 第4项 后增加 分隔符连字号 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5
5.检查构件的extension,如果extension存在,则加上句点分隔符和extension,而extension是由packing决定的,org/testng/testng/5.8/tesng-5.8-jdk5.jar
6、基于groupId准备路径,将句点分隔符转成路径分隔符,就是将 "." 转换成 "/" ; example: org.testng --->org/testng参考资料
Maven详解之仓库------本地仓库、远程仓库.研发管理[引用时间2017-12-28]