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

二. Nexus私服搭建过程
2.1 安装环境概述
1.OS: windows 10
2.JDK: jdk1.7.0_67
2.2 nexus下载
nexus下载地址:http://www.sonatype.org/nexus/go
下载完成后得到zip压缩包,用好压工具解压后如下所示:
nexus-2.12.0-01目录下主要是nexus项目运行依赖的文件。
sonatype-work目录下主要是建立私服后放置jar文件的仓库。
2.3 nexus安装及启动
打开F:\WqProgram\nexus-2.12.0-01-bundle\nexus-2.12.0-01\bin\jsw目录如下:
根据自己的系统版本进入适合的目录,我进入的是目录,如下所示:
打开以“系统管理员”身份打开cmd窗口,切换到该目录下,运行install-nexus.bat
接着,运行start-nexus.bat
这是nexus项目已经安装及启动完毕。
2.4 Nexus测试
打开浏览器,地址栏内输入nexus地址:http://localhost:8081/nexus, 页面打开如下:
出现这个界面说明nexus私服已经搭好。
在首页右上角找到图标,点击后打开登录对话框,输入账户名及密码admin/admin123
进入系统后,可看到页面左侧菜单及右侧数据如下所示:
2.5. Nexus相关概念
2.5.1 类型介绍
登陆Nexus,在左边菜单栏里选择Repositories,然后会出现右边的画面,右边上半部分是列出来的repository,黑体字是类型为group的repository。
这里简单介绍下几种repository的类型:
Ø hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
Ø proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
Ø group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
2.5.2 管理本地仓库
我们前面讲到类型为hosted的为本地仓库,Nexus预定义了3个本地仓库,分别是Releases, Snapshots, 3rd Party. 分别讲一下这三个预置的仓库都是做什么用的:
Releases:
这里存放我们 自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库. 关于符合发布后面会有介绍.
Snapshots:
这个仓库非常 的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本.
3rd Party:
顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库嘛,没错, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rdparty仓库。
2.6 在Nexus为自己的项目手动单独建库
建库,Add-- >HostedRepository, 创建一个本地库
页面底部打开添加界面如下:
表示我们要创建一个id为10002的本地仓库
2.7 Maven仓库组
2.7.1 maven中配置仓库组
通过前面介绍可以了解到, 我们可以建立多个proxy代理仓库,hosted本地仓库, 如果没有仓库组的概念,我们如果需要引用这些仓库的是时候需要一一加入到我们的setting.xml里面去, 有了仓库的组的概念, 我们只需要做一次引用就可以了,把我们需要的仓库加入到仓库组即可。如下图:
<profiles>
<!-- profile
| Specifies a set of introductions to the build process, to be activated using one or more of the
| mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
| or the command line, profiles have to have an ID that is unique.
|
| An encouraged best practice for profile identification is to use a consistent naming convention
| for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
| This will make it more intuitive to understand what the set of introduced profiles is attempting
| to accomplish, particularly when you only have a list of profile id's for debug.
|
| This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
<profile>
<id>jdk-1.4</id>
<activation>
<jdk>1.4</jdk>
</activation>
<repositories>
<repository>
<id>jdk14</id>
<name>Repository for JDK 1.4 builds</name>
<url>http://www.myhost.com/maven/jdk14</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>
</profile>
-->
<!--
| Here is another profile, activated by the system property 'target-env' with a value of 'dev',
| which provides a specific path to the Tomcat instance. To use this, your plugin configuration
| might hypothetically look like:
|
| ...
| <plugin>
| <groupId>org.myco.myplugins</groupId>
| <artifactId>myplugin</artifactId>
|
| <configuration>
| <tomcatLocation>${tomcatPath}</tomcatLocation>
| </configuration>
| </plugin>
| ...
|
| NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
| anything, you could just leave off the <value/> inside the activation-property.
|
<profile>
<id>env-dev</id>
<activation>
<property>
<name>target-env</name>
<value>dev</value>
</property>
</activation>
<properties>
<tomcatPath>/path/to/tomcat/instance</tomcatPath>
</properties>
</profile>
-->
<!-- 这部分便是添加nexus仓库组 start-->
<profile>
<id>nexusProfile</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus Repository</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<!-- 这部分便是添加nexus仓库组 end-->
</profiles>
不要忘了在settings.xml文件中激活:
nexusProfile必须与上面的配置一致。
2.7.2 默认仓库组
仓库组默认包含本地仓库 Releases,snapshots, 3rd party和代理仓库MavenCentral. 你可以在Configuration配置页添加仓库到这个仓库组. 如果需要你还可以创建一个仓库组,在Repositories菜单处选add-->Repository Group即可。仓库组在nexus中如下图所示:
Configuration面板的"Ordered Group Repositories"部分的Releases,Snapshots, 3rd party便是nexus中的3个本地仓库。Central表示Maven中央仓库。
2.8 向nexus发布自己的jar包
2.8.1 新建一个Maven项目
打开eclipse, File->New Project, 打开创建项目对话框如下:
点击"Next"
继续"Next":
这个界面中org.apache.maven.archetypes选择"maven-archetype-quickstart", 继续下一步
点击"Finish"
默认生成pom.xml文件如上图右侧所示。
<groupId>wq.maven.test</groupId> 这个是定义发布包的坐标位置,最后形如maven仓库中目录形式.../wq/maven/test
<artifactId>MavenPro</artifactId> 这个是定义发布包的名称
<version>0.0.1-SNAPSHOT</version> 定义发布包的版本
<packaging>jar</packaging> 定义发布包的后缀, *.jar
根据上面的所有配置,最后发布包形如.../wq/maven/test/MyMavenPro/0.0.1-SNAPSHOT/MyMavenPro-0.0.1-snapshot.jar
2.8.2 配置pom.xml向Nexus发布jar包
现在来改造我们的pom.xml文件, 使我们自己的jar包可以发布在nexus上
在项目的pom.xml文件中加入如下配置:
1 <distributionManagement> 2 <repository> 3 <id>nexus-releases</id> 4 <name>Nexus Release Repository</name> 5 <url>http://localhost:8081/nexus/content/repositories/releases/</url> 6 </repository> 7 <snapshotRepository> 8 <id>nexus-snapshots</id> 9 <name>Nexus Snapshot Repository</name> 10 <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> 11 </snapshotRepository> 12 </distributionManagement>
修改后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>wq.maven.test</groupId> <artifactId>MavenPro</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>MavenPro</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <distributionManagement> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> </project>
上面分2部分, 分别是发布版和快照版,对应于nexus的Releases和snapshots库, 这里需要注意地址是否配置正确, 如下图所示(最后2个库):
2.8.3 编写程序
项目中, 默认生成的App.java如下所示:
1 package wq.pro.test; 2 3 /** 4 * Hello world! 5 * 6 */ 7 public class App 8 { 9 public static void main( String[] args ) 10 { 11 System.out.println( "Hello World!" ); 12 } 13 }
修改后如下所示:
1 package wq.pro.test; 2 3 /** 4 * Hello world! 5 * 6 */ 7 public class App 8 { 9 public static void main( String[] args ) 10 { 11 //简单修改下我们的打印语句为"MavehPro: Hello World!" 12 System.out.println( "MavehPro: Hello World!" ); 13 } 14 }
2.8.4 发布
选中刚才创建的项目"MavenPro"->右键->Run As->Maven build..., 打开窗口如下:
在"Goals"处输入"deploy"->点击Apply->点击Run, 用于发布jar包, 运行后日志如下:
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ MavenPro --- [INFO] Downloading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/maven-metadata.xml [INFO] Uploading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/MavenPro-0.0.1-20160307.032928-1.jar [INFO] Uploaded: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/MavenPro-0.0.1-20160307.032928-1.jar (3 KB at 17.9 KB/sec) [INFO] Uploading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/MavenPro-0.0.1-20160307.032928-1.pom [INFO] Uploaded: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/MavenPro-0.0.1-20160307.032928-1.pom (2 KB at 3.4 KB/sec) [INFO] Downloading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/maven-metadata.xml [INFO] Uploading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/maven-metadata.xml [INFO] Uploaded: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/0.0.1-SNAPSHOT/maven-metadata.xml (771 B at 10.8 KB/sec) [INFO] Uploading: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/maven-metadata.xml [INFO] Uploaded: http://localhost:8081/nexus/content/repositories/snapshots/wq/maven/test/MavenPro/maven-metadata.xml (281 B at 4.2 KB/sec) [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.105 s [INFO] Finished at: 2016-03-07T11:29:29+08:00 [INFO] Final Memory: 13M/31M [INFO] ------------------------------------------------------------------------
注意上述日志中红色部分,表示发布的东西和位置,这时打开nexus的Snapshots仓库:
点击最右侧的链接进入仓库:
顺着目录路径依次点进去:
上面的文件便是我们最终发布的东西,打开本地maven仓库,可以看到我们的发布包如下:
2.9 从Nexus引用自己发布的jar包
2.9.1 创建项目"MavenPro2", 创建过程请参考2.8.1, 为了与第一个项目区分,请设置不一样的groupId,请参考下图:
2.9.2 添加MavenPro.jar依赖
修改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>wq.maven.test2</groupId> <artifactId>MavenPro2</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>MavenPro2</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
修改pom.xml文件(红色字体部分)后:
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/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>wq.test2</groupId> 6 <artifactId>MyMavenPro2</artifactId> 7 <version>0.0.1-SNAPSHOT</version> 8 <packaging>jar</packaging> 9 10 <name>MyMavenPro2</name> 11 <url>http://maven.apache.org</url> 12 13 <properties> 14 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 15 </properties> 16 17 <dependencies> 18 <dependency> 19 <groupId>junit</groupId> 20 <artifactId>junit</artifactId> 21 <version>3.8.1</version> 22 <scope>test</scope> 23 </dependency> 24 <dependency> 25 <groupId>wq.maven.test</groupId> 26 <artifactId>MavenPro</artifactId> 27 <version>0.0.1-SNAPSHOT</version> 28 </dependency> 29 </dependencies> 30 </project>
添加这部分,便是我们常用的添加maven依赖库,这里表示MavenPro2项目中有一个依赖的jar包是MavenPro-0.0.1-SNAPSHOT.jar
2.9.2 编写程序
项目中的App.java修改前:
1 package wq.pro2.test2; 2 3 /** 4 * Hello world! 5 * 6 */ 7 public class App 8 { 9 public static void main( String[] args ) 10 { 11 System.out.println( "Hello World!" ); 12 } 13 }
App.java修改后:
package wq.pro2.test2; import wq.pro.test.App; /** * Hello world! * */ public class App2 { public static void main( String[] args ) { //调用第一个项目中的方法 App.main(args); System.out.println( "Hello World!" ); } }
import的便是我们第一个项目中所编写的java文件。main方法中调用App.main(args)。
2.9.3 测试
运行App2.java中的main方法, run as ->Java Application.
运行后, 打印结果如下:
MavehPro: Hello World! Hello World!
红色字体表明, 引用自己发布的jar包成功。
3 Nexus其他使用
3.1 可重复发布
发布过的jar包,再次发布会报异常, 这时打开仓库的Configuration界面,改变Deployment Policy从Disable Redeploy->Allow Redeploy:
3.2 Nexus端口
nexus默认端口是8081, 如果遇到端口冲突, 可在配置文件中修改默认端口号, 修改后重启即可。
# Jetty section application-port=8081 application-host=0.0.0.0 nexus-webapp=${bundleBasedir}/nexus nexus-webapp-context-path=/nexus # Nexus section nexus-work=${bundleBasedir}/../sonatype-work/nexus runtime=${bundleBasedir}/nexus/WEB-INF
application-port=8081配置nexus端口。
posted on 2016-03-07 12:46 mmylweiqin 阅读(226) 评论(0) 收藏 举报
浙公网安备 33010602011771号