windows上 maven仓库--搭建局域网私服,使用私服

搭建Maven环境

使用nexus搭建局域网私服

一. 认识mav仓库

1.1 maven仓库的作用

  回想之前不用maven的时候,我们用eclipse原始的项目骨架构建项目时,在工程目录下往往有一个lib文件夹用来存放工程所需jar文件,每次建一个新工程时都会有这样一个lib文件夹。然后将jar复制进lib文件夹配置路径,很显然有大量的重复工作,而且不同项目所用jar包不尽相同,需要我们慢慢去分辨。而后我们用了项目管理工具比如svn或者git,我们需要把把大量的jar文件引入代码库,这也不是一件很合适的事。
  而maven能够帮我们解决这些问题,maven仓库是专门用来存放jar文件的位置(也可以用来存放项目war,zip,pom等文件)。maven仓库中为每个jar文件分配了一个坐标,比如jstl的jar包:

javax.servlet        组ID
jstl           构建ID
...  其余属性后续介绍

 

这样做的话,maven能很方便的进行项目依赖版本的控制。简单说maven仓库就是帮我们统一管理项目构件。

1.2 maven仓库分类

  项目构建的查询路径:首先查询本地仓库,未找到就会查询中央仓库,没找到就会报错。中央仓库地址有:

  1. http://www.sonatype.org/nexus/ 私服nexus用
  2. http://mvnrepository.com/ 推荐使用
  3. http://repo1.maven.org/maven2
    上面三个是较为常见的,也是项目中使用较多的,但是由于下载速度太慢,并且仓库的jar文件不完整,实际企业开发需要我们搭建私服仓库。

二. 安装使用nexus

  这里注意搭建maven私服不仅仅只有这一种工具。博主用的版本是nexus-2.12.0。

  1. 点击下载,密码: 8mel
  2. 下载完成后解压即可,解压完成到目录nexus-2.12.0-01-bundle\nexus-2.12.0-01\bin\jsw下可以看到:
  3. 博主电脑是64位所以打开最后一个文件夹:
  4. 点击第二个bat文件设置为windows服务,开启nexus后访问网址: http://localhost:8081/nexus/启动后打开如下页面,即代表nexus安装并启动成功。

三. 配置maven私服

  1. 点击右上角Login登陆,初始账号为admin,密码是admin123 登陆成功可修改账号密码,自己找。
  2. 点击左边的导航Respositories。

    可以看到默认有一些仓库,仓库类型Type或名称的意义:
  • hosted 宿主仓库,用来发布一些第三方不允许的组件,比如oracle驱动等商业软件的jar包
  • proxy 代理远程的仓库,比如上面写得三个maven远程仓库。如果本地不存在某些jar文件时就会到这些代理站点去下载。
  • releases 内部的模块中release模块的发布仓库
  • snapshots 发布内部的snapshot模块的仓库
  • 3rd party 第三方依赖的仓库,本地上传jar包后使用
  • group 组仓库,用来添加其他的仓库,方便开发人员设置
    开始搭建私服仓库,值得注意的是:maven项目索引:maven项目索引就是用来方便在私服站点查找相关依赖构建的功能。所以在搭建私服之前,应该下载maven索引,10M足左右,将仓库的索引下载选项改成true后保存;保存后可以在Adminstration下--Scheduled Tasks可以看到下载进度是running,下载完之后在左侧搜索栏搜索jar包比如所有spring就会出现
  • 这一步是必不可少的如果所以呢无法下载,或者下载完之后任然无法搜索,可以查看nexus的日志进行排错(也可以在我博客下面留言,一起踩坑):
  • 3.添加自己代理的远程库,有时候我们的项目需要引入一些特殊的jar文件,比如Jboss的某些jar包,这时候也可以在私服中代理该远程仓库:

    点击add后添加代理类型,依次填写id,name和url,这样的话,在项目中不再需要在pom.xml中配置远程仓库:

    jboss
    JBoss Repository
    http://repository.jboss.com/maven2/
    
        daily
        true
        warn
    
    
        false
    
    default

 

4.宿主仓库的使用,上面提到的一些特殊的商业性质相关的jar文件,比如oracle的驱动包,ojdbc.jar并不支持远程下载,这时候可以将我们本地下载好的jar包上传到私服。

注意GAV设置要与你pom.xml中一致,上传后添加到Artifacts点击上传即可:

5.由于私服仓库数量过多,导致配置复杂度提高,所以需要用到上述的group类型仓库:

切记点击刷新,刷新后点击唯一的一个group仓库,点击配置Configuration就可以看到刚才我们手动添加的代理仓库,然后将代理仓库添加到组仓库,这样依赖,项目中之需要配置组仓库的url就可以访问多个私服仓库。

值得注意的是:左侧的仓库列表是有序的,以前在pom.xml中配置自定义仓库的时候都会把速度快的仓库放在前面(因为maven是在找不到下载jar包才会去下一个仓库下载,然后下载慢的并不会跳过)所以在左侧的列表中把下载快的放在前面,直接拖动即可,下面是两个比较快的仓库:


    nexus
    local private nexus            开源中国的
    http://maven.oschina.net/content/groups/public/


    alimaven
    aliyun maven                   阿里巴巴的
    http://maven.aliyun.com/nexus/content/groups/public/

四. 局域网使用maven私服

4.1 单个项目使用maven私服

在上述步骤完成后,即可在项目中引用私服,在pom.xml中改变默认下载仓库url:
指定私服仓库,我的ip是170,不要全盘复制

  
      
        nexus  
        nexus  
        http://192.168.1.170:8081/nexus/content/groups/public/  
          
            true  
          
          
            true  
          
      

 

指定插件仓库

  
      
        nexus  
        nexus  
        http://192.168.1.170:8081/nexus/content/groups/public/  
          
            true  
          
          
            true  
          
      

 

配置好之后就可以从私服下载依赖包了。但是这种方式只能在改项目中起作用,每次配置项目都需要写一遍,为了将懒人模式进行到底,我们还可以指定全局的私有仓库。

4.2 全局指定私服

找到maven文件的中的setting.xml文件

改变setting.xml中的配置:
在以下是配置的

  
      
          central  
          *  
          Central Repository  
          http://192.168.1.170:8081/nexus/content/groups/public/  
      
  

这样一来,这台电脑上所有maven项目下载jar文件时都会先访问局域网170的电脑的中央仓库。
-----------------------------------windows配置私服完毕-----------------------------------
扩展:setting,xml中各标签的意义:

1.servers(服务器)


    
        server001
        my_login
        my_password
        ${usr.home}/.ssh/id_dsa
        some_passphrase
        664
        775
        
    

id与pom.xml中distributionManagement的id保持一致,服务器标识
username和password表示服务器认证需要的用户民和密码
privateKey, passphrase一组密钥 (不常用)
filePermissions, directoryPermissions如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(不常用)
2.mirrors(镜像)


    
        planetmirror.com
        PlanetMirror Australia
        http://downloads.planetmirror.com/pub/maven2
        central
    

 

设置一个中央仓库的镜像,看仓库分类,也是远程仓库的一种配置方式。
3.profiles(构建环境)
这个可能比较难理解,maven权威指南一书中这样说:

  Profile能让你为一个特殊的环境自定义一个特殊的构建;
  构建环境的两个例子是产品环境和开发环境。当你在开发环境中工作时,你的系统可能被配置成访问运行在你本机的开发数据库实例,而在产品环境中,你的系统被配置成从产品数据库读取数据。Maven能让你定义任意数量的构建环境(构建profile),这些定义可以覆盖pom.xml中的任何配置。

简单理解就是你可以先profile中先构件好项目运行的环境,比如预设了A环境实在开发中使用,而实际上线是B环境,那么在上线的时候我们不需要一个个修改pom.xml中的配置,只需要激活改profile即可。
4.activation(激活构建环境 )


    false
    1.5
    
        Windows XP
        Windows
        x86
        5.1.2600
    
    
        mavenVersion
        2.0.3
    

 

指定profile中配置的环境在什么时候开始生效
5.activeProfiles(激活了的profile)


env-test

 

在setting.xml最后的一个标签,表示env-test这个profile已被激活


使用Maven私服


为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。

1.首先确定我们的环境安装好maven,jdk等必须的环境

2.这些都准备好之后,去下载最新版本的nexus    下载地址:http://www.sonatype.org/nexus/go 

    我本地安装的是 nexus-2.2-01-bundle,最新的版本是nexus-2.4.0-09-bundle

3.打开目录nexus-2.4.0-09-bundle\nexus-2.4.0-09\bin\jsw 这个目录下面你会发现有很多系统版本的nexus环境

   我的电脑是win7 (64)为的系统,所以我选择的是windows-x86-64这个版本,当然可以根据个人的电脑系统选择对应的版本

 windows上 maven仓库--搭建局域网私服,使用私服_第1张图片

打开一个版本你会看到如下:

windows上 maven仓库--搭建局域网私服,使用私服_第2张图片

 

我一般都是将nexus安装成windows服务,所以点击install-nexus.bat这个,访问http://localhost:8081/nexus/ 启动后如下页面,在右上角有个Log in 的超链接,点击登录

默认的用户名是 admin 密码是 admin123

 登录后你可以在左侧修改登录信息:

windows上 maven仓库--搭建局域网私服,使用私服_第3张图片

 

4.接下来,我们配置一下maven的代理服务器(前提是你的电脑不能连接外网,如果可以上外网,这里也没有意思,只是介绍一下)

   在左侧菜单找到如图:

   windows上 maven仓库--搭建局域网私服,使用私服_第4张图片

  点击查看右边有很多选项,找到这里

windows上 maven仓库--搭建局域网私服,使用私服_第5张图片

添加你的代理服务器就可以了。

 5:接下来,好像这里都不需要怎么配置的,反正我没有用到很多的功能,可能是技术学得不好,不会用,呵呵....

     对了,这里还有一个可能需要注意一下的,就是3rd party、Snapshots、Releases这三个,分别用来保存第三方jar(典型的oracle数据库的j驱动包),项目组内部的快照、项目组内部的发布版.

     我目前只是用3rd party这个第三方的功能,将maven仓库中没有构件的jar包上传到服务器。如何将第三方的jar上传到nexus上面呢?如下:举例上传oracle的驱动包

    windows上 maven仓库--搭建局域网私服,使用私服_第6张图片

 

windows上 maven仓库--搭建局域网私服,使用私服_第7张图片

 

windows上 maven仓库--搭建局域网私服,使用私服_第8张图片

windows上 maven仓库--搭建局域网私服,使用私服_第9张图片

 

那么现在nexus已经安装好,怎么使用上传的jar包吧,很简单的,前提是你已经建立了一个maven的项目。含有pom.xml这个文件,在这个文件中添加如下:

先去服务器看看jar的maven构件

windows上 maven仓库--搭建局域网私服,使用私服_第10张图片

然后在pom.xml中添加如下的本地仓库地址:

复制代码
 1     <repositories>
 2         <repository>
 3             <id>nexusid>
 4             <name>Team Nexus Repositoryname>
 5             <url>http://localhost:8081/nexus/content/groups/publicurl>
 6         repository>
 7     repositories>
 8     <pluginRepositories>
 9         <pluginRepository>
10             <id>nexusid>
11             <name>Team Nexus Repositoryname>
12             <url>http://localhost:8081/nexus/content/groups/publicurl>
13         pluginRepository>
14     pluginRepositories>
15     <dependencies>
16         <dependency>
17             <groupId>com.oraclegroupId>
18             <artifactId>ojdbcartifactId>
19             <version>10.1.0.2.0version>
20         dependency>
21     dependencies>
复制代码

windows上 maven仓库--搭建局域网私服,使用私服_第11张图片

 

到此,完成了nexus私服的搭建,项目组开发人员开发时,只要在项目的pom.xml文件中,添加如下pom.xml信息即可获取私服的jar.

如果添加其他的构件时,会先在nexus私服下载好,以后才会下载到本地。以后,如果发现私服已经存在某一jar包,则会直接从私服下载,如果没有再去网络上下载。这就是搭建私服的好处。哈哈........

所以很有必要搭建maven私服。

搭建多模块企业级项目

首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目。

好了,废话不多说,具体如下:

首先新建一个maven项目,pom.xml的文件如下:

windows上 maven仓库--搭建局域网私服,使用私服_第12张图片

搭建多模块项目,必须要有一个packaging为pom的根目录。创建好这个maven项目后,我们对着项目右键-->new

windows上 maven仓库--搭建局域网私服,使用私服_第13张图片

输入你的项目名称

windows上 maven仓库--搭建局域网私服,使用私服_第14张图片

这里就不重复说创建项目了,创建好的目录结构在eclipse中如下:

windows上 maven仓库--搭建局域网私服,使用私服_第15张图片

说明一下这些项目具体都是干嘛的:

easyframework-model:数据模型,与数据库表字段对应的实体类

easyframework-core:核心业务项目。主要是Service处理业务逻辑

easyframework-persist:数据持久层,操作低层数据库。

easyframework-utils:工具类,所有工具类都提取出来写在这个项目中。

easyframework-web :这个就是整个项目的web层了,页面的显示以及控制层

备注:创建这些项目的时候,只有easyframework-web是web项目即maven的:maven-archetype-webapp,其他的都是java项目:maven-archetype-quicktart

打开easyframework-root的pom.xml文件,你会看到模块化是这样的:

windows上 maven仓库--搭建局域网私服,使用私服_第16张图片

接下来是配置各个模块的依赖关系,我个人认为的项目是这样依赖的,不知道对不对,呵呵....

windows上 maven仓库--搭建局域网私服,使用私服_第17张图片

举个例子easyframework-web这个项目依赖easyframework-core(业务核心)和easyframework-model(实体类),easyframework-utils(公共的工具类)这个三个模块。

那么在怎么在easyframework-web的pom.xml中体现呢,具体如下:

 windows上 maven仓库--搭建局域网私服,使用私服_第18张图片

打开项目的maven依赖你会发现,已经依赖了这三个项目

windows上 maven仓库--搭建局域网私服,使用私服_第19张图片

但是你应该会感觉到奇怪,为什么会有那么jar包,明明只引用了这三个项目,哪来的那么多jar包。

你会发现,我再pom.xml文件中,有个parent节点,继承了根节点的pom,这就是maven的项目继承依赖,会从父POM中继承一些值。这对构建一个大型的系统来说很有必要

这样的话你就不需要一遍又一遍的重复添加同样的依赖元素,当然,如果你在子项目中也有同样的依赖,则会覆盖父POM中的值。

父POM的的依赖如下:

复制代码
  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3     <modelVersion>4.0.0modelVersion>
  4     <groupId>com.easyframeworkgroupId>
  5     <artifactId>easyframework-rootartifactId>
  6     <packaging>pompackaging>
  7     <version>1.0version>
  8     <name>easyframework-rootname>
  9     <url>http://maven.apache.orgurl>
 10     <modules>
 11         <module>easyframework-webmodule>
 12         <module>easyframework-persistmodule>
 13         <module>easyframework-coremodule>
 14         <module>easyframework-utilsmodule>
 15         <module>easyframework-modelmodule>
 16     modules>
 17     <properties>
 18         
 19         <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
 20         
 21         <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
 22         <mysql.version>5.1.25mysql.version>
 23         <hibernate.version>4.2.2.Finalhibernate.version>
 24         <spring.version>3.2.3.RELEASEspring.version>
 25         <aspectj.version>1.7.2aspectj.version>
 26     properties>
 27     <repositories>
 28         <repository>
 29             <id>springsource-repoid>
 30             <name>SpringSource Repositoryname>
 31             <url>http://repo.springsource.org/releaseurl>
 32         repository>
 33     repositories>
 34     <dependencies>
 35     
 36         
 37         <dependency>
 38             <groupId>log4jgroupId>
 39             <artifactId>log4jartifactId>
 40             <version>1.2.17version>
 41         dependency>
 42         
 43         <dependency>
 44             <groupId>junitgroupId>
 45             <artifactId>junitartifactId>
 46             <version>4.11version>
 47             <scope>testscope>
 48         dependency>
 49         
 50         <dependency>
 51             <groupId>mysqlgroupId>
 52             <artifactId>mysql-connector-javaartifactId>
 53             <version>${mysql.version}version>
 54         dependency>
 55         
 56         <dependency>
 57             <groupId>org.hibernategroupId>
 58             <artifactId>hibernate-coreartifactId>
 59             <version>${hibernate.version}version>
 60         dependency>
 61         
 62         <dependency>
 63             <groupId>org.aspectjgroupId>
 64             <artifactId>aspectjweaverartifactId>
 65             <version>${aspectj.version}version>
 66         dependency>
 67         
 68         <dependency>
 69             <groupId>org.springframeworkgroupId>
 70             <artifactId>spring-coreartifactId>
 71             <version>${spring.version}version>
 72         dependency>
 73         <dependency>
 74             <groupId>org.springframeworkgroupId>
 75             <artifactId>spring-contextartifactId>
 76             <version>${spring.version}version>
 77         dependency>
 78         <dependency>
 79             <groupId>org.springframeworkgroupId>
 80             <artifactId>spring-jdbcartifactId>
 81             <version>${spring.version}version>
 82         dependency>
 83         <dependency>
 84             <groupId>org.springframeworkgroupId>
 85             <artifactId>spring-beansartifactId>
 86             <version>${spring.version}version>
 87         dependency>
 88         <dependency>
 89             <groupId>org.springframeworkgroupId>
 90             <artifactId>spring-webartifactId>
 91             <version>${spring.version}version>
 92         dependency>
 93         <dependency>
 94             <groupId>org.springframeworkgroupId>
 95             <artifactId>spring-expressionartifactId>
 96             <version>${spring.version}version>
 97         dependency>
 98         <dependency>
 99             <groupId>org.springframeworkgroupId>
100             <artifactId>spring-ormartifactId>
101             <version>${spring.version}version>
102         dependency>
103     dependencies>
104     <build>
105         <finalName>easyframework-rootfinalName>
106         <plugins>
107             <plugin>
108                 <artifactId>maven-compiler-pluginartifactId>
109                 <configuration>
110                     <source>1.6source>
111                     <target>1.6target>
112                 configuration>
113             plugin>
114         plugins>
115     build>
116 project>
复制代码

当然这个父POM只是一个例子,你可以根据自己的配置添加相关的依赖,这里给一个我认为是最好用的仓库:

http://mvnrepository.com/ 相信地球人都知道这个!哈哈.....

到此就搭建好了企业级多模块的项目环境了。

你可能感兴趣的:(Maven)