maven是怎么判断包在本地仓库和远程仓库哪个是新的

maven是怎么判断包在本地仓库和远程仓库哪个是新的,第1张

maven对构件的更新判断基本上是两种,一种是稳定版本,一种是maven特有的SNAPSHOT版本。

稳定版本很好判断,直接根据maven构件的坐标体系就能够获得。先从本地仓库中找,如果本地仓库没有,就从pomxml和settingxml配置的远程仓库来找。

SNAPSHOT版本的判断比较麻烦,基本步骤如下:

假设我在2014年08月22日09时40分52秒在我自己的电脑上使用 “mvn install” 构建了“commycompanydemo:test:10-SNAPSHOT”。

那么Maven会在本地仓库目录“~/m2/com/mycompany/demo/test/10-SNAPSHOT/”下生成文件“maven-metadata-localxml”,内容如下:

<xml version="10" encoding="UTF-8">

<metadata modelVersion="110">

<groupId>commycompanydemo</groupId>

<artifactId>test</artifactId>

<version>10-SNAPSHOT</version>

<versioning>

<snapshot>

<localCopy>true</localCopy>

</snapshot>

<lastUpdated>20140822084052</lastUpdated>

<snapshotVersions>

<snapshotVersion>

<extension>jar</extension>

<value>10-SNAPSHOT</value>

<updated>20140822084052</updated>

</snapshotVersion>

<snapshotVersion>

<extension>pom</extension>

<value>10-SNAPSHOT</value>

<updated>20140822084052</updated>

</snapshotVersion>

</snapshotVersions>

</versioning>

</metadata>

十点钟的时候,其他同事更新了commycompanydemo:test:10-SNAPSHOT的内容,并通过 "mvn deploy" 发布到了公司的Maven服务器上。

公司Maven服务器上产生了文件:

test-10-20140822100021-1jar

test-10-20140822100021-1pom

并更新了maven-metadataxml,内容如下:

<xml version="10" encoding="UTF-8">

<metadata modelVersion="110">

<groupId>commycompanydemo</groupId>

<artifactId>test</artifactId>

<version>10-SNAPSHOT</version>

<versioning>

<snapshot>

<timestamp>20140822100021</timestamp>

<buildNumber>34</buildNumber>

</snapshot>

<lastUpdated>20140822100021</lastUpdated>

<snapshotVersions>

<snapshotVersion>

<extension>jar</extension>

<value>10-20140822100021-1</value>

<updated>20140822100021</updated>

</snapshotVersion>

<snapshotVersion>

<extension>pom</extension>

<value>10-20140822100021-1</value>

<updated>20130407081828</updated>

</snapshotVersion>

</versioning>

</metadata>

从eclipse中增加了maven2的插件之后,maven默认的本地库的路径是${user}/m2/repository/下,一般windows用户的 *** 作系统都安装在C盘,所以这个目录下的jar包比较危险。我尝试从myeclipse->preferences->java->build

path->classpath variables中查找M2_REPO这个变量,发现其路径指向的是“C:\Documents and

Settings\lvxda\m2\repository\”,我想修改其路径为:d:\m2\repository,可是这个变量的编辑按钮是灰色的,不可编辑。从网上也没有找到相应的解决办法。打算自己尝试一下:

1、手动创建本地仓库的地址为:d:/m2/repository

2、从windows的环境变量中增加了:M2_REPO=d:\m2\repository,同时把这个变量增加到path变量中。

3、修改d:\maven\conf\settingxml文件,在<localRepository>节点下新增一行:

复制内容到剪贴板

代码:

<localRepository>d:/m2/repository</localRepository>

表示本地仓库的地址为:d:/m2/repository。

4、从myeclipse->preferences->maven->installations下add一个已经安装到d盘的maven,如:d:\maven,并勾选此新加项。并点击下面的browse按钮打开maven的全局配置文件,如:d:\maven\conf\settingxml。

5、从myeclipse->preferences->maven->installations下修改user

setting 选项为:D:\m2\repository\settingsxml,并点击update

settings。并点击下面的reindex按钮更新索引。

6、点击配置窗口的apply按钮,突出配置窗口。

7、配置修改后,myeclise会自动更新索引,当完成后重启myeclipse,会发现M2_REPO变量的值变成了d:/m2/repository。

自此,maven从远程库下载的jar包都会放到d:/m2/repository下。为了避免每次构建系统都从远程仓库下载jar,需要搭建私服。

<dependency>

<groupId>orguddi</groupId>

<artifactId>antlr-276</artifactId>

<version>092</version>

</dependency>

这样就可以了,pom不会挑的,只要你导入到本地库,就可以被依赖到

原则上Maven的设计是不需要这么做的,因为pomxml中依赖的jar包会自动实现从中央仓库下载到本地仓库。但是公司设计了一个setting,如果本地仓库没有,就去setting指定的url中下载jar包,如果还没有就报错。

考虑到setting中url的jar包比较老,如果需要用最新的,则需要将jar包手动下载到本地仓库。

比如我下载了

lucene-queryparser-461jar

怎么添加到本地仓库呢看

步骤:

1cmd命令进入该jar包所在路径

2执行命令

mvn install:install-file -Dfile=lucene-queryparser-461jar -DgroupId=orgapachelucene -DartifactId=lucene-queryparser -Dversion=461 -Dpackaging=jar

(不同的jar包相对应替换对应部分)

另外我尝试了下面的方法,发现不行:

直接写一个空的pom,里头包含对所需要jar包的依赖,通过这种方式希望将jar包下载到本地仓库。但是应用代码中没用到,maven命令没有下载这个jar包到本地仓库。

补充,-DgroupId和-DartifactId的作用其实是指定了这个jar包的安装在repository的安装路径,只是用来告诉项目去这个路径下寻找这个名称的jar包。比如:

mvn install:install-file -Dfile=freemarker-2313jar -DgroupId=freemarker -DartifactId=freemarker -Dversion=2313 -Dpackaging=jar

就是安装到了repository\freemarker\freemarker\2313目录下,如果在dependency的依赖里也这么写的话,就可以到对应的目录去寻找。

对于maven中存在classifier的,例如

<dependency>

<groupId>orgapachehadoop</groupId>

<artifactId>hadoop-hdfs</artifactId>

<version>220</version>

<classifier>tests</classifier>

</dependency>

就加一个-D参数就可以了,如下:

mvn install:install-file -Dfile=hadoop-hdfs-220-testsjar -DgroupId=orgapachehadoop -DartifactId=hadoop-hdfs -Dversion=220 -Dclassifier=tests -Dpackaging=jar

以上就是关于maven是怎么判断包在本地仓库和远程仓库哪个是新的全部的内容,包括:maven是怎么判断包在本地仓库和远程仓库哪个是新的、如何修改maven插件本地仓库jar包默认存储、JAVA Maven install 方式导本地Jar库在pom。xml中怎么具体配置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9750000.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存