maven仓库的概念和建立私服

发表时间:2017-07-18 18:53:14 浏览量( 25 ) 留言数( 0 )

学习目标:

1、了解maven的本地库、私有库和远程库的概念

2、了解nexus

3、掌握nexus的安装和配置


学习过程:

一、仓库的概念

1、仓库简介

maven仓库分为本地仓库和远程仓库。前面讲过,maven项目所需要的构件并不是复制在项目的lib中,而是每一次部署项目的时候从maven本地仓库中引用过来的,那么maven本地仓库在什么地方呢?默认是在用户目录的.m2 epository,比如我的window系统就是在C:UsersAdministrator.m2 epository目录下的。

大家知道java有很多第三方的构件,所以maven的本地仓库也不是保存了所有的构件,你需要使用的构件在本地仓库中没有,maven会自动从远程中心仓库中下载,这种自动化的功能,是我们在使用maven时不需要自己去下载构件,以后再使用这个构件是也会maven会先查询本地仓库,如果本地仓库已经有这个构件了,就会直接使用本地仓库的构件,不需要从远处仓库下载。

我们可以从远处仓库中查询需要的构件的坐标信息,目前有很多这样的远程仓库:

http://mvnrepository.com/

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/

attcontent/ed40cb5b-b336-4674-836b-d848ca8b7704.png

下载完成就复制到tomcat的webapps目录下面,然后重启tomcat就可以了,输入网址

http://localhost:8081/nexus

点击右上角的Login in登录。

attcontent/482fa0bc-f856-4199-8883-b279baa8a114.png

默认的用户名密码是:admin/admin123。

attcontent/45c67230-eab4-4b47-9829-aa90857a479c.png


配置,配置邮箱,忘记密码的时候可以通过这个邮箱找回

1、配置服务邮箱

attcontent/e812eb92-ffd7-46a6-94b8-5a2612035788.png

2、配置每个用户的邮箱

attcontent/c4a272b7-0366-4b03-829b-9b2f8597db89.png

3、修改密码

attcontent/a000c652-d522-4355-99c2-2bfc306dbe28.png

输入密码:这里我为了方便都改成123456了。

5、仓库类型

attcontent/0c55a090-accf-4943-8dbc-bebfe76bffa8.png

hosted:主要用户发布内部构件或第三方的项目构件,比如oracle的驱动等等

  hosted又分为三个库

     releases 内部的releases模块

     snapahots 发布内部的SNAPAHOTS模块

     3rd party 第三方的依赖仓库,通常就是购买的项目构件,在一般仓库中没有的。

proxy 代理仓库:代理远程的仓库

virtual 虚拟仓库,主要是maven1使用,所以现在使用的比较少了。


6、设置proxy代理仓库的地址,并下载索引库,这样就可以在上面进行搜索了。

这些仓库的构件没有下载下来,但是你可以下载仓库的索引文件,这样你就可以使用搜索你需要的构件。一般我们需要修改如下图几个proxy仓库的Configuration配置,把Download Remote Indexes改为True,然后点击保存就可以了。他会启动一个计划慢慢下载搜索的了。

attcontent/fb017d03-2564-4d83-a414-c37b5e2224f8.png

在这里你可以看到正在下载之中

attcontent/35a9b303-4fc9-41fd-b69b-c1a294dab96b.png

这些仓库的构件没有下载下来,但是你可以下载仓库的索引文件,这样你就可以使用搜索你需要的构件。一般我们需要修改如下图几个仓库的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才能够部署的,快照是不可以的)

attcontent/9740eff4-c340-4aed-84cc-afcebcfe0e29.png

也有可能是插件包不完整,你可以先删除上小节的从私服中下载构件的配置,先从中心仓库中下载相关的插件后,然后在部署。

(2)上传jar包

手动部署构件则更为简单了,在nexus的仓库列表中点击要部署的目标仓库,然后点击Artifact Upload选项卡看到下图所示:

attcontent/900c7112-1ac1-4ebd-88be-b913291e500f.png


attcontent/de67989e-842f-4ba5-8b90-6d5e2c99ecf8.png

最后点击Upload Artifact就可以了。

下面你可以测试一下,在项目中添加依赖

  <dependency>
    <groupId>oracle.jdbc.driver.OracleDriver</groupId>
    <artifactId>oracle</artifactId>
    <version>11</version>
</dependency>

就可以使用oracle的驱动包了。