为什么执行maven命令在哪执行时,会首先链接远程仓库呢

Maven部署构件至远程仓库
我的图书馆
Maven部署构件至远程仓库
我们知道,Maven仓库包括本地仓库和远程仓库,而远程仓库又包括中央仓库,私服,Jboss仓库和Java.net仓库等。
私服,即私有的仓库服务器,它不仅可以降低中央仓库负荷,节省外网带宽,还可以加速Maven构建,自己部署构件等,从而高效地使用Maven。对于私服,我们可以使用仓库管理软件来创建自己的私有仓库服务器。目前网上流行的仓库管理软件有Apache的Achiva,JFrog的Artifactory和Sonatype的Nexus。由于当前Nexus是最流行的仓库管理软件,因此,我们这里采用Nexus。
Nexus的安装很简单,只需从http://nexus.sonatype.org/downloads下载最新的版本即可。需要注意的是官网向我们提供了两种安装方式,一种是自带Web容器(Jetty)的Bundle包,另外一种是war包。(可以直接部署到Tomcat等Web容器中)
假设下载的是Bundle包,解压到指定目录后(笔者的目录是E:\sonatype-nexus),进入目录E:\sonatype-nexus\nexus-2.4.0-09-bundle\nexus-2.4.0-09\bin\jsw\windows-x86-32\,找到脚本文件console-nexus.bat,打开并运行。如果没有出现错误,打开浏览器输入,可以看到nexus的欢迎界面:
默认情况下是匿名登录该网站,只能享受浏览,搜索等功能。如果想拥有更多控制能力,可以点击右上角的Login in进行登录,Nexus内置了一个管理员账户,用户名是admin,密码是admin123。
下面开始创建自己的宿主仓库,目的是为了将自己编写的构件部署到该仓库中,供组织其它成员下载。
用管理员账户登录之后,在左边导航栏框中找到Repositories,点击后,在右框中选择Add按钮,弹出的菜单中选择Hosted Repository,表示添加宿主仓库。
在新建宿主仓库表中,填写仓库的ID,Name以及仓库策略(release表示发布版构件,snapshot表示快照版构件),比如:
点击save按钮,完成策略为Release的宿主仓库创建。
同理,创建策略为Snapshot的宿主仓库。
至此,我们的宿主仓库(包括发布版和快照版)就完成了。
接下来,需要添加权限(Privileges)
在左边导航栏的Security中找到Privileges,点击后,在右框中点击Add按钮,选择Repository Target Privilleges
按如图所示添加发布版和快照版。
接下来创建具有相应权限的角色(Role)
最后创建用户。
这里需要注意的是,User ID就是远程仓库的username,password就是远程仓库的password。
至此,宿主仓库就算完成了。
因为远程仓库需要安全认证,所以需要在settings.xml中进行配置。
打开settings.xml,在settings根标签下添加如下内容:
&server&&&
&&&&&id&pro-snapshot&/id&&&
&&&&&username&foo&/username&&&
&&&&&password&123456&/password&&&
&/server&&&
&server&&&
&&&&&id&pro-release&/id&&&
&&&&&username&foo&/username&&&
&&&&&password&123456&/password&&&
&/server&&&这里的用户名和密码对应之前创建的user的userId和password。即foo和123456。另外,id元素对应pom.xml中distributionManagement里的id元素。之后会给出相应的代码。
安全认证配置好后,接下来打开你要部署的maven项目的pom.xml,在project元素下添加如下内容:
&&distributionManagement&&&
&repository&&&
&&&&&id&pro-release&/id&&&
&&&&&name&Proj&Release&Repository&/name&&&
&&&&&url&http://localhost:8081/nexus/content/repositories/RestBus-Releases&/url&&&
&/repository&&&
&snapshotRepository&&&
&&&&&id&pro-snapshot&/id&&&
&&&&&name&Proj&Snapshot&Repository&/name&&&
&&&&&url&http://localhost:8081/nexus/content/repositories/RestBus-Snapshots&/url&&&
&/snapshotRepository&&&
&&/distributionManagement&&&
这里在distributionManagement元素下添加了发布版仓库和快照版仓库,它们的id对应之前在settings.xml中server的id。url为仓库地址,该url可以在nexus的repositories中找到:
最后一步,打开命令提示符窗口,定位到maven根目录下(和pom.xml同目录),执行maven命令:
mvn clean deploy
如果配置没有错误,会出现以下类似打印信息:
[INFO]&Scanning&for&projects...&&
[INFO]&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[INFO]&------------------------------------------------------------------------&&
[INFO]&Building&bus-location&1.0&&
[INFO]&------------------------------------------------------------------------&&
[INFO]&---&maven-clean-plugin:2.4.1:clean&(default-clean)&@&bus-location&---&&
[INFO]&Deleting&G:\bus-location\target&&
[INFO]&---&maven-resources-plugin:2.5:resources&(default-resources)&@&bus-location&---&&
[debug]&execute&contextualize&&
[INFO]&Using&'UTF-8'&encoding&to&copy&filtered&resources.&&
[INFO]&skip&non&existing&resourceDirectory&G:\bus-location\src\main\resources&&
[INFO]&---&maven-compiler-plugin:2.3.2:compile&(default-compile)&@&bus-location&---&&
[INFO]&Compiling&1&source&file&to&G:\bus-location\target\classes&&
[INFO]&---&maven-resources-plugin:2.5:testResources&(default-testResources)&@&bus-location&---&&
[debug]&execute&contextualize&&
[INFO]&Using&'UTF-8'&encoding&to&copy&filtered&resources.&&
[INFO]&skip&non&existing&resourceDirectory&G:\bus-location\src\test\resources&&
[INFO]&---&maven-compiler-plugin:2.3.2:testCompile&(default-testCompile)&@&bus-location&---&&
[INFO]&Compiling&1&source&file&to&G:\bus-location\target\test-classes&&
[INFO]&---&maven-surefire-plugin:2.10:test&(default-test)&@&bus-location&---&&
[INFO]&Surefire&report&directory:&G:\bus-location\target\surefire-reports&&
-------------------------------------------------------&&
&T&E&S&T&S&&
-------------------------------------------------------&&
Running&zjut.edu.soft.bus.AppTest&&
Tests&run:&1,&Failures:&0,&Errors:&0,&Skipped:&0,&Time&elapsed:&0.016&sec&&
Results&:&&
Tests&run:&1,&Failures:&0,&Errors:&0,&Skipped:&0&&
[INFO]&---&maven-jar-plugin:2.3.2:jar&(default-jar)&@&bus-location&---&&
[INFO]&Building&jar:&G:\bus-location\target\bus-location-1.0.jar&&
[INFO]&---&maven-install-plugin:2.3.1:install&(default-install)&@&bus-location&---&&
[INFO]&Installing&G:\bus-location\target\bus-location-1.0.jar&to&C:\Users\tsw\.m2\repository\zjut\edu\soft\bus\bus-location\1.0\bus-location-1.0.jar&&
[INFO]&Installing&G:\bus-location\pom.xml&to&C:\Users\tsw\.m2\repository\zjut\edu\soft\bus\bus-location\1.0\bus-location-1.0.pom&&
[INFO]&---&maven-deploy-plugin:2.7:deploy&(default-deploy)&@&bus-location&---&&
Uploading:&http://localhost:8081/nexus/content/repositories/RestBus-Releases/zjut/edu/soft/bus/bus-location/1.0/bus-location-1.0.jar&&
2/3&KB&&&&&
3/3&KB&&&&&
&&&&&&&&&&&
Uploaded:&http://localhost:8081/nexus/content/repositories/RestBus-Releases/zjut/edu/soft/bus/bus-location/1.0/bus-location-1.0.jar&(3&KB&at&7.3&KB/sec)&&
Uploading:&http://localhost:8081/nexus/content/repositories/RestBus-Releases/zjut/edu/soft/bus/bus-location/1.0/bus-location-1.0.pom&&
2/2&KB&&&&&
&&&&&&&&&&&
Uploaded:&http://localhost:8081/nexus/content/repositories/RestBus-Releases/zjut/edu/soft/bus/bus-location/1.0/bus-location-1.0.pom&(2&KB&at&10.1&KB/sec)&&
Downloading:&http://localhost:8081/nexus/content/repositories/RestBus-Releases/zjut/edu/soft/bus/bus-location/maven-metadata.xml&&
&&&&&&&&&&&
Uploading:&http://localhost:8081/nexus/content/repositories/RestBus-Releases/zjut/edu/soft/bus/bus-location/maven-metadata.xml&&
305/305&B&&&&&
&&&&&&&&&&&&&&
Uploaded:&http://localhost:8081/nexus/content/repositories/RestBus-Releases/zjut/edu/soft/bus/bus-location/maven-metadata.xml&(305&B&at&3.1&KB/sec)&&
[INFO]&------------------------------------------------------------------------&&
[INFO]&BUILD&SUCCESS&&
[INFO]&------------------------------------------------------------------------&&
[INFO]&Total&time:&4.762s&&
[INFO]&Finished&at:&Wed&May&22&13:23:16&CST&2013&&
[INFO]&Final&Memory:&14M/33M&&
[INFO]&------------------------------------------------------------------------&&进入http://localhost:8081/nexus网页,在RestBus-Releases(因为在pom.xml中,version是1.0,不是快照版)中,可以找到刚刚部署上去的构件bus-location-1.0.jar
当然,也可以在网页上进行手工部署。
TA的最新馆藏[转]&Maven入门实战笔记04-仓库 - Free Coding - ITeye技术网站
博客分类:
区分 坐标和依赖与仓库
构件的逻辑表示方式:坐标和依赖
构件的物理表示方式:文件(Maven通过仓库来统一管理文件)
Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库
2.仓库的布局
groupId/artifactId/version/artifactId-version.packaging
3.仓库的分类
默认本场仓库目录 :用户名/.m2/repository
自定义本地仓库目录地址,编辑文件~/.m2/settings.xml
&settings&
&localRepository&D:\java\respository&/localRepository&
&/settings&
将本地项目的构件装到Maven仓库中
mvn clean install
该命令将项目的构件输出文件安装到本地仓库中
安装好 Maven后,本地仓库目录是不存在的,当输入第一条Maven命令后,Maven才会创建本地仓库,根据配置和需要,从远程仓库下载构件至本地仓库
Maven必须知道至少一个可用的远程仓库
中央仓库是一个默认的远程仓库,Maven安装文件自带了中央仓库的位置
%M2_HOME%/lib/maven-model-builder-3.0.5.jar中
org\apache\maven\model\pom-4.0.0.xml
&repositories&
&repository&
&id&central&/id&
&name&Central Repository&/name&
&url&http://repo.maven.apache.org/maven2&/url&
&layout&default&/layout&
&snapshots&
&enabled&false&/enabled&
&/snapshots&
&/repository&
&/repositories&
包含这段配置的文件是所有Maven项目都会继承的超级POM
一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用
优点:节省自己的外网带宽、加速Maven构建、部署第三方构件、提高稳定性,增强控制、降低中央仓库的负荷
配置JBoss Maven仓库,在POM中配置
&repositories&
&repository&
&id&jboss&/id&
&name&JBoss Repository&/name&
&url&/&/url&
&releases&
&enabled&true&/enabled&
&/releases&
&/repository&
&snapshots&
&enabled&false&/enabled&
&updatePolicy&daily&/updatePolicy&
&checksumPolicy&ignore&/checksumPolicy&
&/snapshots&
&layout&default&/layout&
&/repositories&
&/project&
如上配置:Maven只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件
default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局(不明白)
updatePolicy:daily(默认),never,always,interval:X(每隔X分钟检查一次更新)
checksumPolicy:warn(默认),fail,ignore
远程仓库的认证
配置仓库信息可以直接配置在POM文件中,认证信息必须配置在settings.xml中(POM往往被提交到代码仓库中供所有成员访问的,而settings.xml一般只放在本机)
demo,编辑settings.xml
&settings&
&id&my-proj&/id&
&username&admin&/username&
&password&password&/password&
&/servers&
&/settings&
部署至远程仓库
Maven对项目进行编译、测试、打包外,还能将项目生成的构建部署到仓库中
编辑项目的pom.xml文件
&distributionManagement&
&repository&
&id&proj-releases&/id&
&name&Proj Release Repopsitory&/name&
&url&http://192.168.1.100/content/repositories/proj-releases/&/url&
&/repository&
&snapshotRepository&
&id&proj-snapshots&/id&
&name&Proj Snapshot Repopsitory&/name&
&url&http://192.168.1.100/content/repositories/proj-snapshots/&/url&
&/snapshotRepository&
&/distributionManagement&
&/project&
需要认证时,需配置认证信息
配置正确后,运行命令
mvn clean deploy
5.快照版本
为什么区分发布版和快照版?例小张开发模块A的2.1版本,小季开发模块B,B依赖于A,小张需要将最新的构建输出,交给小季,供其开发和集成高度,工作如何进行?
Maven的快照版本机制:
小张将模块A的版本设定为2.1-SNAPSHOT,然后发布到私服中,在发布过程中,Maven会自动为构件打上时间戳。如2.1-559-12表示日23点35分59秒的第12次快照;小季配置对于模块A的2.1-SNAPSHOT的最新构件,当发现有更新时便进行下载。默认情况下,Maven每天检查一次更新(由仓库配置的upldatePolicy控制),用户也可以使用命令行-U参数强制让Maven检查更新,如
mvn clean install -U
当项目需要发布时,将快照版本更改为发布版本。例如将2.1-SNAPSHOT更改为2.1,表示该版本已经稳定且对应了唯一的构件;2.1-SNAPSHOT往往对应了大量的带有不同时间戳的构件,这也决定了其不稳定性
快照版本只应该在组织内部的项目或模块间依赖使用(组织对于这些快照版本的依赖具有完全的理解及控制权)
项目不应该依赖于任何组织外部的快照版本依赖(快照版本的不稳定性,造成潜在危险)
6.从仓库解析依赖的机制
仓库元数据groupId/artifactId/versionmaven-metadata.xml
RELEASE:最新发布版本
LATEST:最新版本(包含快照)
依赖声明中使用LATEST和RELEASE是不推荐的做法(因为Maven随时都可能解析到不同的构件)
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像
如:/content/groups/public/是中央仓库http://repo1.maven.org/maven2/在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务
编辑settings.xml
&settings&
&name&one of the central mirrors in China&/name&
&url&/content/groups/public&/url&
&mirrorOf&central&/mirrorOf&
&/mirrors&
&/settings&
&mirrorOf&值为central表示该配置为中央仓库的镜像
注:这个镜像现在好像不能用了
如镜像需要认证,也可以基于该id配置仓库认证
镜像的一个常见应用:结合私服
&settings&
&id&internal-repository&/id&
&name&Internal Repository Manager&/name&
&url&http://192.168.1.100/maven2/&/url&
&mirrorOf&*&/mirrorOf&
&/mirrors&
&/settings&
&mirrorOf&值为星号,表示该配置是所有Maven仓库的镜像,任何远程仓库的请求都会被转至http://192.168.1.100/maven2/。
如果该镜像仓库需要认证,则配置一个id为internal-repository的&server&即可
更高级的镜像配置:
&mirrorOf&*&/mirrorOf&
匹配所有远程仓库
&mirrorOf&external:*&/mirrorOf&
匹配所有远程仓库,使用localhost、file://协议的除外,即匹配所有不在本机上的远程仓库
&mirrorOf&repo1,repo2&/mirrorOf& 匹配仓库repo1和repo2
&mirrorOf&*,!repo1&/mirrorOf&
匹配所有远程仓库,repo1除外
注意:由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库出问题时,Maven仍将无法访问被被镜像仓库,因而将无法下载构件
8.仓库的搜索服务
Sonatype Nexus
http://repository.sonatype.org/
MVNbrowser
MVNrepository
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
浏览: 137802 次
来自: 青岛
document.forms['formName'];里面放的 ...
test_cacerts 是什么?
这篇文章非常赞,支持楼主
赞......啊
能给个完整的实现分页的代码吗?最好给出一个Demo,谢谢温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(5684)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'maven基础命令',
blogAbstract:'Maven 参数 -D 传入属性参数 -P 使用pom中指定的配置 -e 显示maven运行出错的信息 -o 离线执行命令,即不去远程仓库更新包 -X 显示maven允许的debug信息 -U 强制去远程参考更新snapshot包 例如 mvn install -Dmaven.test.skip=true -Poracle 其他参数可以通过mvn help 获取 \r\nmaven常用命令 mvn clean 说明: 清理项目生产的临时文件,一般是模块下的target目录 mvn package 说明: 项目打包工具,会在模块下的target目录生成jar或war等文件 ',
blogTag:'maven',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:1,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 maven 更新仓库 命令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信