# 第08章 Maven私服
# 8.1 需求
正式开发,不同的项目组开发不同的工程。
ssm_dao工程开发完毕,发布到私服。
ssm_service从私服下载dao
# 8.2 分析
公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。
私服还充当一个代理服务器,当私服上没有jar包会从互联网中央仓库自动下载,如下图:
# 8.3 搭建私服环境
# 8.3.1 下载Nexus
Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等。
下载Nexus, 下载地址:https://www.sonatype.com/download-oss-sonatype
# 8.3.2 安装和启动Nexus
解压在F盘,进入bin目录:
cmd进入bin目录,执行nexus /install Nexus3
该命令将会将Nexus Repository注册成为Windows服务
安装成功在服务中查看有nexus服务:
进入windows服务管理页面,启动刚刚注册的Nexus3服务
等几分钟到Nexus Repository程序初始化完成,打开浏览器,输出localhost:8081,出现如下界面,安装成功。
# 8.3.3 Sonatype Nexus Repository OSS配置
Nexus Repository OSS默认管理员账号为admin,密码为admin123,使用管理员账号登陆系统;
在etc下有一个nexus-defauly.properties文件,是nexus的配置文件:
## 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
2
3
4
5
6
7
8
9
10
11
12
可以在这里修改端口号或者项目的context
nexus仓库默认在sonatype-work目录中
登录之后就可以查看私服了。登录以后,最上面会有两个按钮,一个是查看仓库配置的(齿轮形状),另一个是查看仓库内容的(正方体):
我们只关心maven,所以在左侧点击maven,右面就是所有的仓库的maven的jar包。上面支持特定的搜索。第一次这个页面没有任何包。
当然我们也可以点击左侧的browse来浏览仓库
这是默认的仓库,当然这里我们只关心maven的,也就是前四个。name是仓库名,url是仓库的地址,会在我们的项目pom里被使用到。
- maven-central:这是maven的中心仓库,nexus这里只是做一个代理,最后会转发到maven的central库,如下:
- maven-public:这是一个仓库组,访问这个仓库组的地址其实会访问组内所有仓库
我们可以在配置页面看到这个public的仓库组的配置,默认是包含了members指定的三个仓库。所以在pom中使用这个仓库组的url时,实际上会从members里的所有仓库下载jar包。
maven-releases:这是nexus提供的一个默认的存放release版本jar包的仓库。
maven-snapshots:这是nexus提供的一个默认的存放snapshot版本jar包的仓库。
仓库的属性可以控制只存放snapshot或者release版本的jar包,当然我们可以不使用这些默认的仓库,进行自行创建。创建途径
这里可以看到nexus可以支持很多种仓库,只看maven,其实就只有三种:
proxy就是代理类,负责转发,比如之前的maven-central;
hosted就是我们常用的存放jar包的仓库,可以选择jar包的类型,release,snapshot或者mixed;
group可以包含多个仓库,比如之前的maven-public;
以上就是nexus3的大致使用方式,具体的可以自行了解,比较简单
# 8.4 将项目发布到私服
上传jar包需要认证,maven的认证是在settings.xml里servers标签下配置的
<servers>
<server>
<id>release_user</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshot_user</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
2
3
4
5
6
7
8
9
10
11
12
这里配置两个用户,一个部署release类型jar包的,一个是部署snapshot类型jar包的。
id用于唯一指定一条认证配信息,之后会在pom中使用。
接着在项目的pom.xml文件中配置上传的仓库的位置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>demo-ad</artifactId>
<groupId>com.clare.ad</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.clare.ad</groupId>
<artifactId>ad-eureka</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>ad-eureka</name>
<description>Spring Cloud Eureka</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--是springboot提供的微服务检测接口,默认对外提供几个接口:/info-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<distributionManagement>
<repository>
<id>release_user</id>
<name>Release Deploy</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshot_user</id>
<name>Snapshot Deploy</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
这里配置了上传的url,具体的url可以在nexus的仓库浏览界面下点击仓库的url copy获得。使用刚才的两个认证信息,把jar包存在nexus提供的默认仓库下。id对应了setting.xml里配置的信息,name随意。
执行maven的deploy命令,部署到nexus上
此时使用的是父类的版本,即快照版本,所以可以在maven-snapshots仓库下看到:
选择一个项目可以在左侧看到详情
再打一个release的jar包,只需要把version改为1.0即可,再执行deploy命令
<parent>
<artifactId>demo-ad</artifactId>
<groupId>com.clare.ad</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.clare.ad</groupId>
<artifactId>ad-eureka</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
2
3
4
5
6
7
8
9
10
11
# 8.5 从私服下载jar包
需要在pom中加入依赖,并且配置我们的nexus仓库。
未配置前:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>demo-ad</artifactId>
<groupId>com.clare.ad</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.clare.ad</groupId>
<artifactId>ad-gateway</artifactId>
<packaging>jar</packaging>
<dependencies>
<!--web应用程序-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring cloud eureka客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!--是springboot提供的微服务检测接口,默认对外提供几个接口:/info-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--ad-eureka-->
<dependency>
<groupId>com.clare.ad</groupId>
<artifactId>ad-eureka</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>nexus-public</id>
<name>Nexus Public</name>
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
配置后: