在公司的局域网内部署一台服务器,服务器上安装maven私服软件。服务器上存储了maven仓库。
在私服环境下本地项目找jar流程是:
1、先找本地仓库
2、如果本地仓库没有从私服找
3、如果私服没有从中央仓库下载,下载成功将jar向私服和本地仓库都存一份。
nexux仓库类型
①hosted类型:自己的jar包放到hosted类型的仓库里
a、 Releases:发布版本,放进这个仓库里
b、Snapshots:测试版本放在这个仓库里
c、3rd party : 存放中央仓库没有的第三方jar包
②proxy类型:代理仓库,代理中央仓库
③group:仓库组,将一些仓库组成一个组(一般包含宿主仓库和代理仓库),自己项目链接仓库组去下载jar包
④virtual:虚拟仓库,存储了maven1的构件,一般不用
nexus安装路径中仓库的位置
①conf/nexus.properties里面有sonatype-work的地址;
②sonatype-work的地址/nexus/conf/nexus.xml里面有storage的地址
maven将项目发布到私服
①修改私服中央仓库部署策略
Release版本的项目应该发布到Releases仓库中,对应的,Snapshot版本应该发布到Snapshots仓库中。Maven根据pom.xml文件中版本号<version>节点的属性是否包含-SNAPSHOT,来判断该项目是否是snapshot版本。如果是snapshot版本,在执行mvn deploy部署命令时,maven会自动将项目发布到Snapshots仓库。要发布项目,首先需要将Releases仓库和Snapshots仓库的“Deployment Policy”设置为“Allow Redeploy”:
②配置项目pom.xml的部署仓库(将哪个项目发布到仓库就在哪个项目的pom文件里配置以下代码)
<distributionManagement> <snapshotRepository> <id>user-snapshot</id> <name>User Porject Snapshot</name> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> <uniqueVersion>true</uniqueVersion> </snapshotRepository> <repository> <id>user-release</id> <name>User Porject Release</name> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> </distributionManagement>
<uniqueVersion>表示是否为Snapshot版本分配一个包含时间戳的构建号,效果如下:
③在settings.xml中分别为上面配置的部署仓库配置server,其中id需要分别对应上面的部署仓库id
<servers> <server> <id>user-release</id> <username>deployment</username> <password>deployment123</password> </server> <server> <id>user-snapshot</id> <username>deployment</username> <password>deployment123</password> </server> … </servers>
④进入项目的根目录执行一下代码
mvn clean deploy
maven从nexus中下载jar包
①配置仓库组
②仓库组地址
http://192.168.10.235:8081/nexus/content/groups/public/
③在setting.xml文件中配置镜像镜像地址为nexus仓库组的地址
<mirror> <!--镜像id,mirrors中可以配置多个镜像,保证id不重复--> <id>emei-central</id> <!--mirrorOf指定仓库id,仓库组包括了id为 releases、snapshots、thirdparty 、central 的仓库,可以配置具体的id,如果镜像所有的仓库则设置为*--> <mirrorOf>central</mirrorOf> <name>emei-central-mirror</name> <url>http://192.168.10.235:8081/nexus/content/groups/public/</url> </mirror>
Maven将三方jar包上传到仓库(本地仓库和私服)
例如:merSDK-2.0.3.jar 中央仓库找不到
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.1.0.RELEASE</version> </dependency>
①发布到本地仓库
mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar 例如: 我下载的这个 jar 包是放到了 D:\mvn 目录下(D:\mvn\spring-context-support-3.1.0.RELEASE.jar) 那么我在 cmd 中敲入的命令就应该是: mvn install:install-file -Dfile=D:\mvn\spring-context-support-3.1.0.RELEASE.jar -DgroupId=org.springframework -DartifactId=spring-context-support -Dversion=3.1.0.RELEASE -Dpackaging=jar
②发布到nexus私服(登录nexus界面方式上传更简洁)
上面的命令只是将jar包发布到本地仓库 但是如何发布到私服呢?应该执行下面这条命令 mvn deploy:deploy-file -DgroupId=com.xy.Oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=E:\ojdbc14.jar -Durl=http://localhost:9090/nexus-2.2-01/content/repositories/thirdparty/ -DrepositoryId=thirdparty