使用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 组IDjstl 构建ID ... 其余属性后续介绍
这样做的话,maven能很方便的进行项目依赖版本的控制。简单说maven仓库就是帮我们统一管理项目构件。
1.2 maven仓库分类
项目构建的查询路径:首先查询本地仓库,未找到就会查询中央仓库,没找到就会报错。中央仓库地址有:
- http://www.sonatype.org/nexus/ 私服nexus用
- http://mvnrepository.com/ 推荐使用
- http://repo1.maven.org/maven2
上面三个是较为常见的,也是项目中使用较多的,但是由于下载速度太慢,并且仓库的jar文件不完整,实际企业开发需要我们搭建私服仓库。
二. 安装使用nexus
这里注意搭建maven私服不仅仅只有这一种工具。博主用的版本是nexus-2.12.0。
- 点击下载,密码: 8mel
- 下载完成后解压即可,解压完成到目录nexus-2.12.0-01-bundle\nexus-2.12.0-01\bin\jsw下可以看到:
- 博主电脑是64位所以打开最后一个文件夹:
- 点击第二个bat文件设置为windows服务,开启nexus后访问网址: http://localhost:8081/nexus/启动后打开如下页面,即代表nexus安装并启动成功。
三. 配置maven私服
- 点击右上角Login登陆,初始账号为admin,密码是admin123 登陆成功可修改账号密码,自己找。
- 点击左边的导航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
为什么要搭建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这个版本,当然可以根据个人的电脑系统选择对应的版本
打开一个版本你会看到如下:
我一般都是将nexus安装成windows服务,所以点击install-nexus.bat这个,访问http://localhost:8081/nexus/ 启动后如下页面,在右上角有个Log in 的超链接,点击登录
默认的用户名是 admin 密码是 admin123
登录后你可以在左侧修改登录信息:
4.接下来,我们配置一下maven的代理服务器(前提是你的电脑不能连接外网,如果可以上外网,这里也没有意思,只是介绍一下)
在左侧菜单找到如图:
点击查看右边有很多选项,找到这里
添加你的代理服务器就可以了。
5:接下来,好像这里都不需要怎么配置的,反正我没有用到很多的功能,可能是技术学得不好,不会用,呵呵....
对了,这里还有一个可能需要注意一下的,就是3rd party、Snapshots、Releases这三个,分别用来保存第三方jar(典型的oracle数据库的j驱动包),项目组内部的快照、项目组内部的发布版.
我目前只是用3rd party这个第三方的功能,将maven仓库中没有构件的jar包上传到服务器。如何将第三方的jar上传到nexus上面呢?如下:举例上传oracle的驱动包
那么现在nexus已经安装好,怎么使用上传的jar包吧,很简单的,前提是你已经建立了一个maven的项目。含有pom.xml这个文件,在这个文件中添加如下:
先去服务器看看jar的maven构件
然后在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>
到此,完成了nexus私服的搭建,项目组开发人员开发时,只要在项目的pom.xml文件中,添加如下pom.xml信息即可获取私服的jar.
如果添加其他的构件时,会先在nexus私服下载好,以后才会下载到本地。以后,如果发现私服已经存在某一jar包,则会直接从私服下载,如果没有再去网络上下载。这就是搭建私服的好处。哈哈........
首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目。
好了,废话不多说,具体如下:
首先新建一个maven项目,pom.xml的文件如下:
搭建多模块项目,必须要有一个packaging为pom的根目录。创建好这个maven项目后,我们对着项目右键-->new
输入你的项目名称
这里就不重复说创建项目了,创建好的目录结构在eclipse中如下:
说明一下这些项目具体都是干嘛的:
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文件,你会看到模块化是这样的:
接下来是配置各个模块的依赖关系,我个人认为的项目是这样依赖的,不知道对不对,呵呵....
举个例子easyframework-web这个项目依赖easyframework-core(业务核心)和easyframework-model(实体类),easyframework-utils(公共的工具类)这个三个模块。
那么在怎么在easyframework-web的pom.xml中体现呢,具体如下:
打开项目的maven依赖你会发现,已经依赖了这三个项目
但是你应该会感觉到奇怪,为什么会有那么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/ 相信地球人都知道这个!哈哈.....
到此就搭建好了企业级多模块的项目环境了。