Maven私服实战
前置依赖
- JDK
- Maven
下载
Nexus Repository Manager OSS 3.x
地址:https://www.sonatype.com/download-oss-sonatype
Nexus Repository Manager 2.x
地址:https://help.sonatype.com/repomanager2/download
Pro版本 需要收费才能使用
安装
解压
tar -zxvf nexus-3.13.0-01-unix.tar.gz
进入目录/bin,输入./nexus,会显示命令
./nexus
Usage: ./nexus { console | start | stop | restart | status | dump }
默认是8081端口,配置文件:etc/nexus-default.properties
修改配置:
## DO NOT EDIT - CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties
##
# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/
# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
nexus-pro-feature
配置后访问:http://ip:8081
默认账号密码:admin / admin123
命令
./bin/nexus start
查看运行状态
./bin/nexus status
访问页面
Sign In 登录 admin
admin123
然后可以修改密码
Repository 介绍
- Name:
- Central:该仓库代理Maven的中央仓库,策略为Release,只会下载和缓存中央仓库中的发布版本构件。
- Public:仓库组,将所有策略为Release的仓库聚合并通过一致的地址提供服务。
- Release:策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件。
- Snapshots:策略为Snapshots的宿主类型仓库,用来部署组织内部的快照版本构件。
Nexus3 没有了 3rd party仓库
-
3rd party:一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构件。
-
neget 是 .net 使用的仓库,可以忽略
- Type
- group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库(能够组合多个仓库为一个地址提供服务)
- hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库)
- proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径)
- virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用)
- format
- maven2是JAVA仓库
- nuget是.net仓库,在此忽略
- status
确认是 online / oneline Ready To connect
即可
创建 一个 3rd_part
Create Repositories -> 选择 maven2(hosted) -> 输入信息
Name:3rd_part
其他默认
public 仓库的 Group Member Repository 添加 3rd_part
私服使用
配置 maven setting.xml 认证信息
在 ${maven}/conf/setting.xml,配置如下内容:
认证信息:
<!--设置私库认证信息-->
<servers>
<server>
<id>nexusali-3rd_part</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexusali-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexusali-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
添加镜像:
<mirrors>
<mirror>
<id>nexusali-3rd_part</id>
<name>nexusali-3rd_part</name>
<url>http://120.77.47.95:8081/repository/3rd_part/</url>
<mirrorOf>nexusali-3rd_part</mirrorOf>
</mirror>
<mirror>
<id>nexusali-releases</id>
<name>nexusali-releases</name>
<url>http://120.77.47.95:8081/repository/maven-releases/</url>
<mirrorOf>nexusali-releases</mirrorOf>
</mirror>
<mirror>
<id>nexusali-snapshots</id>
<name>nexusali-snapshots</name>
<url>http://120.77.47.95:8081/repository/maven-central/</url>
<mirrorOf>nexusali-snapshots</mirrorOf>
</mirror>
</mirrors>
需要注意的是 mirrorOf 的配置
mirrorOf 的配置
为了满足一些复杂的需求,Maven还支持更高级的镜像配置:
- 匹配所有远程仓库。
<mirrorOf>*</mirrorOf>
- 匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。
<mirrorOf>external:*</mirrorOf>
- 匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
<mirrorOf>repo1,repo2</mirrorOf>
- 匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
<mirrorOf>*,!repo1</miiroOf>
需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。
所以对于 阿里云 仓库配置,我们可以配置成如下:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>*,!repo1</mirrorOf>
</mirror>
这样可以保证,需要从我们自己 repo1 库 拉取的包,不会去 aliyun 仓库拉取
maven pom配置
注意 ID 与 setting.xml 中 server id 一致
<distributionManagement>
<repository>
<id>nexusali-releases</id>
<url>http://120.77.47.95:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexusali-snapshots</id>
<url>http://120.77.47.95:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
发布命令
mvn clean
mvn -D skipTests deploy
这时候可以看到 public 和 snapshots 仓库都有了刚发布的包
那么如何 发布到 releases ?
- maven会判断版本后面是否带了-SNAPSHOT,如果带了就发布到snapshots仓库,否则发布到release仓库。这里我们可以在pom.xml文件中,设置
所以在 <version>1.0</version> 标签配置 去掉 SNAPSHOT,就会发布到 Release仓库中
打包源码
配置插件
<!--打包源码-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
就可以在 仓库到 -source 的 jar 包了
其他项目 引用依赖
pom 配置
<repositories>
<repository>
<id>nexusali-releases</id>
<url>http://120.77.47.95:8081/repository/maven-releases/</url>
</repository>
<repository>
<id>nexusali-snapshots</id>
<url>http://120.77.47.95:8081/repository/maven-snapshots/</url>
</repository>
</repositories>
然后引入即可
<dependency>
<groupId>com.vwfisher.maven</groupId>
<artifactId>maven-vwfisher-deploy</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
第三方包 deploy 到 3rd_part
命令:
mvn deploy:deploy-file
-DgroupId=
-DartifactId=
-Dversion=
-Dpackaging=jar
-Dfile=jar路径
-Durl=远端仓库地址
-DrepositoryId={setting.xml配置的id}
如,发布 alipay-sdk-java20171123203126.jar 到 3rd_part
mvn deploy:deploy-file -DgroupId=org.alipay -DartifactId=alipay-sdk-java20171123203126 -Dversion=20171123203126 -Dpackaging=jar -Dfile=/Users/yuweiye/Coding/Fisher/FisherWorkSpace/FisherBuildTool/MavenFisher/localLib/alipay-sdk-java20171123203126.jar -Durl=http://120.77.47.95:8081/repository/3rd_part/ -DrepositoryId=nexusali-3rd_part
可以看到 public 和 3rd_part 都有了这个包
项目引入 3rd_part 包
添加 repository
<repositories>
<repository>
<id>nexusali-3rd_part</id>
<url>http://120.77.47.95:8081/repository/3rd_part/</url>
</repository>
</repositories>
和 依赖 即可引入
<dependency>
<groupId>org.alipay</groupId>
<artifactId>alipay-sdk-java20171123203126</artifactId>
<version>20171123203126</version>
</dependency>
网友评论