4、maven仓库的概念和建立私服
学习目标:
1、了解maven的本地库、私有库和远程库的概念
2、了解nexus
3、掌握nexus的安装和配置
学习过程:
一、仓库的概念
1、仓库简介
maven仓库分为本地仓库和远程仓库。前面讲过,maven项目所需要的构件并不是复制在项目的lib中,而是每一次部署项目的时候从maven本地仓库中引用过来的,那么maven本地仓库在什么地方呢?默认是在用户目录的.m2 epository,比如我的window系统就是在C:UsersAdministrator.m2 epository目录下的。
大家知道java有很多第三方的构件,所以maven的本地仓库也不是保存了所有的构件,你需要使用的构件在本地仓库中没有,maven会自动从远程中心仓库中下载,这种自动化的功能,是我们在使用maven时不需要自己去下载构件,以后再使用这个构件是也会maven会先查询本地仓库,如果本地仓库已经有这个构件了,就会直接使用本地仓库的构件,不需要从远处仓库下载。
我们可以从远处仓库中查询需要的构件的坐标信息,目前有很多这样的远程仓库:
https://repository.sonatype.org
2、安装构件在本地仓库中
我们之前使用的构件都是从中心仓库下载到本地仓库,然后再引用的。如果有需要我们也可以把自己开发的构件安装在本地仓库中。比如我们操作数据库时候经常需要封装分页类Page,这个类我们可以设计成为一个构件,保存在仓库中。
(1)使用Eclipse建立一个maven项目
选择maven-archetype-quickstart就可以了,输入相关的信息
项目的pom.xml文件
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.liubao.dao</groupId>
<artifactId>basedao</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>basedao</name>
<url>http://maven.apache.org</url>
</project>
删除默认的App.java类,新建一个BaseDao类,并实现内容,代码如下:
public class BaseDao {
public void connect(){
System.out.println("只是测试能否按照,所以代码就简单一点了。");
}
}
(2)安装到本地仓库中
使用maven的 install 命令就可以安装到本地库中
右键选中项目,Run as >> Maven Install
这时候你可以到你的本地仓库中查看是否已经安装成功。
(3)使用这个构件
使用自己开发的构件和使用其他的构件一样,说明好构件的坐标就可以了。新建另外一个项目test,依赖我们刚才的构件,修改pom.xml文件,添加对baseDao的依赖,代码如下;
<dependency>
<groupId>com.liubao.dao</groupId>
<artifactId>basedao</artifactId>
<version>1.0</version>
</dependency>
这时候你可以在代码中使用BaseDao类了,代码如下:
public class App {
public static void main( String[] args ){
BaseDao baseDao=new BaseDao();
baseDao.connect();
}
}
二、搭建私服
1、为什么要使用私服
本地仓库一般只适合你一个人使用,但是我们在公司里面很多时候都是团队开发的,有很多构件需要共享,如果我们有一个自己开发的构件,需要团队共享这个构件,这时候我们最好就就搭建一个自己的“远程仓库”,一般我们称为私服,私服可以配置从中心仓库中下载索引和构件,团队内部也可以把自己开发的构件安装在私服中。这样我们既可以减少对外部网路的访问流量,也可以很好的维护团队自己开发构件。
当然maven私服不需要我们自己开发,目前有几个比较流行的maven私服,有apache的Archiva,Sonatype Nexus等等软件,我们只需要下载部署私服就可以了。下面就介绍比较流行的Sonatype Nexus,你可以到网上下载他的war版,这样你只需要把文件复制到tomcat的webapps目录下就可以运行了。Sonatype Nexus的下载地址是:
http://www.sonatype.org/nexus/
下载完成就复制到tomcat的webapps目录下面,然后重启tomcat就可以了,输入网址
http://localhost:8081/nexus
点击右上角的Login in登录。
默认的用户名密码是:admin/admin123。
配置,配置邮箱,忘记密码的时候可以通过这个邮箱找回
1、配置服务邮箱
2、配置每个用户的邮箱
3、修改密码
输入密码:这里我为了方便都改成123456了。
5、仓库类型
- hosted:主要用户发布内部构件或第三方的项目构件,比如oracle的驱动等等
hosted又分为三个库
- releases 内部的releases模块
- snapahots 发布内部的SNAPAHOTS模块
- 3rd party 第三方的依赖仓库,通常就是购买的项目构件,在一般仓库中没有的。
- proxy 代理仓库:代理远程的仓库
- virtual 虚拟仓库,主要是maven1使用,所以现在使用的比较少了。
6、设置proxy代理仓库的地址,并下载索引库,这样就可以在上面进行搜索了。
这些仓库的构件没有下载下来,但是你可以下载仓库的索引文件,这样你就可以使用搜索你需要的构件。一般我们需要修改如下图几个proxy仓库的Configuration配置,把Download Remote Indexes改为True,然后点击保存就可以了。他会启动一个计划慢慢下载搜索的了。
在这里你可以看到正在下载之中
这些仓库的构件没有下载下来,但是你可以下载仓库的索引文件,这样你就可以使用搜索你需要的构件。一般我们需要修改如下图几个仓库的Configuration配置,把Download Remote Indexes改为True,然后点击保存就可以了。
下载索引需要时间,当然下载索引并不是必须的,对你自己的构件你可以建立索引以方便查询,如果是第三方的构件你也可以去Nexus的官方网站搜索构件。
7、客户端配置
修改客户端的setting.xml settings.xml中不能直接插入<repositories>元素,需要在profile配置,最后使用<activeProfile>元素自动将这个profile**。这里的central仓库指向了刚才我们配置的Nexus中“Repositories”仓库组,也就是说,所有该仓库组包含的仓库都能供我们使用。此外,我们通过<releases>和<snapshots>元素**了Maven对于仓库所有类型构件下载的支持,当然你也可以调节该配置,比如说禁止Maven从Nexus下载snapshot构件。
settings.xml中不能直接插入<repositories>元素,需要在profile配置,最后使用<activeProfile>元素自动将这个profile**。这里的central仓库指向了刚才我们配置的Nexus中“Repositories”仓库组,也就是说,所有该仓库组包含的仓库都能供我们使用。此外,我们通过<releases>和<snapshots>元素**了Maven对于仓库所有类型构件下载的支持,当然你也可以调节该配置,比如说禁止Maven从Nexus下载snapshot构件。
<!--配置权限,使用默认用户,在上传构件的时候会使用到这个服务。-->
<servers>
<server>
<id>nexus-releases</id>
<username>deployment</username>
<password>123456</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>deployment</username>
<password>123456</password>
</server>
</servers>
<profiles>
<profile>
<id>centralnexus</id>
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.6</jdk>
</activation>
<repositories>
<!-- 私有库地址-->
<repository>
<id>nexus</id>
<url>http://192.168.3.21:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!--插件库地址-->
<pluginRepository>
<id>nexus</id>
<url>http://192.168.3.21:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>centralnexus</activeProfile>
</activeProfiles>
4、上传构件到私服中
(1)上传自己开发的构件
修改pom.xml
<distributionManagement>
<repository>
<id>mynexus-releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>mynexus-snapshot</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
还需要在setting.xml中配置用户名和密码,注意id要和上面的pom.xml的id对应。
<servers>
<server>
<id>mynexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>mynexus-snapshot</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
上面的配置中我用的是超级管理员的账户,开发项目中可以改为具有部署构件权限的用户就可以了。
下面你就可以测试一下了,这里在项目目录中执行mvn deploy,注意不是mvn install。如果有问题,你可能需要做出以下的调整
修改release仓库的Configuration的Deployemnt Policy 为 Allow Redeploy。(这个其实是不需要的,默认只有release才能够部署的,快照是不可以的)
也有可能是插件包不完整,你可以先删除上小节的从私服中下载构件的配置,先从中心仓库中下载相关的插件后,然后在部署。
(2)上传jar包
手动部署构件则更为简单了,在nexus的仓库列表中点击要部署的目标仓库,然后点击Artifact Upload选项卡看到下图所示:
最后点击Upload Artifact就可以了。
下面你可以测试一下,在项目中添加依赖
<dependency>
<groupId>oracle.jdbc.driver.OracleDriver</groupId>
<artifactId>oracle</artifactId>
<version>11</version>
</dependency>
就可以使用oracle的驱动包了。