背景
公司搭建了私服,那么如何使用?本文记录常用的操作。
将工具包打包到私服
- 在
pom.xml
中添加一下配置
<!-- 发布jar包到私服 -->
<distributionManagement>
<repository>
<!-- 对应私服的releases仓库, 可能不同 -->
<id>releases</id>
<name>releases repository</name>
<!-- 私服地址, 去私服上找下, 不一定是下面的地址 -->
<url>http://server:port/repository/releases/</url>
</repository>
<snapshotRepository>
<!-- 快照版本库, 不用可以不配置 -->
<id>snapshot</id>
<name>Snapshot Repository</name>
<url>http:server:port/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<build>
<plugins>
<!-- 配置该插件后,使用deploy时,可以上传jar到私服 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 配置maven配置文件
settings.xml
<!-- ... -->
<servers>
<!-- 配置私服的密码 -->
<server>
<!-- 对应私服的releases仓库,注意是小写 -->
<id>releases</id>
<!-- 私服用户名 -->
<username>admin</username>
<!-- 私服密码 -->
<password>123456</password>
</server>
</servers>
<!-- ... -->
- 使用命令打包发布
mvn clean deploy
说明:
同时配置releases版本库和快照版本库, 当版本号<version>1.0-SNAPSHOT</version>
带有SNAPSHOT
(注意:一定是全大写)默认发布到快照库, 否则发布到release仓库
将一个已存在的jar包上传到maven私服
- 有时候已经存在的jar包也需要上传到maven私服。使用命令上传
mvn deploy:deploy-file -DgroupId=com.test -DartifactId=test -Dversion=1.0.0 -Dpackaging=jar -Dfile=test.jar -Durl=http://server:port/repository/releases/ -DrepositoryId=release
DgroupId=com.test
--><groupId>com.tdt</groupId>
DartifactId=test
--><artifactId>test</artifactId>
Dversion=1.0.0
--><version>1.0.0</version>
Dfile=test.jar
--> 指定要上传的jar包位置, 这里刚好在执行命令的文件夹下
Durl=...
--> 仓库位置
DrepositoryId=release
--> 仓库ID
- 当然, 也可以直接使用浏览器登录私服上传
下载/引用私服的jar包
- 配置
pom.xml
<repositories>
<!-- 阿里云镜像仓库 -->
<repository>
<id>aliyun</id>
<name>aliyun Repository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<!-- 私服 -->
<repository>
<id>releases</id>
<name>my Repository</name>
<url>http://server:port/repository/releases/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 应用私有jar包 -->
<dependencies>
<dependency>
<groupId>com.test</groupId>
<artifactId>XXtool</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
- 配置maven的
settings.xml
<!-- ... -->
<servers>
<!-- 配置私服的密码 -->
<server>
<!-- 对应私服的releases仓库,注意是小写 -->
<id>releases</id>
<!-- 私服用户名 -->
<username>admin</username>
<!-- 私服密码 -->
<password>123456</password>
</server>
</servers>
<!-- ... -->
<mirrors>
<!-- 跳过自己的仓库, 也可以不配置这里 -->
<mirror>
<id>nexus-aliyun</id>
<!-- 镜像名 -->
<mirrorOf>*,!releases</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<!-- ... -->
repository
和mirror
的关系
repository
在pom.xml
中指定了jar包的仓库, 且按照顺序依次查找引用jar包, 但是如果在maven配置文件settings.xml
中配置了mirror
就会“代理”pom中的配置, 所以可以不配置mirror
mirror
中的mirrorOf
指定了要代理的仓库id,*
表示代理所有仓库mirrorOf
有更灵活的写法, 可以用!
表示不代理指定仓库, 比如上文中的!releases
, 将不代理releases
私服
扩展
- repository中的url也可以是本地路径,如:
<repository>
<id>local</id>
<name>In Project Repo</name>
<!-- 将一些jar包放到resources/lib/下 -->
<url>file://${project.basedir}/src/main/resources/lib/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
- repository中release.enable表示允许从此版本库下载release版本, 一般我们会设置禁止从公共仓库下载快照版本
<!-- 允许从此版本库下载release版本 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 禁止从此版本库下载快照版本 -->
<snapshots>
<enabled>false</enabled>
</snapshots>