在上一章《实战maven私有仓库三部曲之一:搭建和使用》我们搭建了maven私有仓库,并体验了私有仓库缓存jar包的能力,避免了局域网内开发人员去远程中央仓库下载的痛苦等待,本章我们再来体验私有仓库的另一个功能:保存二方库;

原文地址:http://blog.csdn.net/boling_cavalry/article/details/79070744

使用场景

    • mvndemoserver是个web应用,提供http接口getuserinfo,返回用户信息;
    • mvnDemoClient是个java应用,调用mvndemoserver的getuserinfo接口查用户信息;
    • 用户信息对应的java类:UserInfo.java,代码如下:
public class UserInfo {

    /**
* 用户名
*/
private String name; /**
* 用户年龄
*/
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
  • mvndemoserver的getuserinfo接口,返回的数据是将UserInfo对象序列化成的json对象;
  • mvnDemoClient收到mvndemoserver返回的json字符串后,反序列化成UserInfo对象;

UserInfo.java放在哪里合适?

mvnDemoClient和mvndemoserver两个应用都要用UserInfo类,所以我们创建一个maven工程:mvnDemoLib,此工程中将UserInfo类做成jar包,放到私有maven仓库(这就是二方库了),这样mvnDemoClient和mvndemoserver在各自的pom.xml中依赖mvnDemoLib就都能使用UserInfo类了;

实战步骤梳理

本次实战先在maven私有仓库发布jar包,再在应用中使用jar包,所有的步骤列举如下: 
1. 修改私有仓库的配置信息,允许上传jar包; 
2. 修改当前电脑的maven配置文件apache-maven-3.3.3\conf\settings.xml; 
3. 创建mvnDemoLib工程,里面有UserInfo.java,执行mvn命令打包并上传到maven私有仓库; 
4. 创建mvndemoserver工程,pom.xml中添加mvnDemoLib的依赖,开发http服务的controller; 
5. 创建mvnDemoClient工程,pom.xml中添加mvnDemoLib的依赖,发起http请求,将得到的响应转成UserInfo对象;

接下来实战每个步骤:

实战源码下载

本次实战创建的三个maven工程,源码的git地址是:git@github.com:zq2599/blog_demos.git,用浏览器访问的地址是:https://github.com/zq2599/blog_demos,这里面有多个工程,本次用到的工程如下图红框所示: 

修改私有仓库的配置信息,允许上传jar包

  1. 登录nexus,我搭建私有仓库的机器IP是192.168.119.155,所以访问地址是http://192.168.119.155:8081/nexus,然后点击右上角的”Log In”登录;
  2. 设置好deploy用户的密码,操作如下图所示: 

    我这里设置的密码是admin123;
  3. 设置为允许上传release的jar包,操作如下图: 
  4. 设置为允许上传snapshots的jar包,操作如下图: 

修改当前电脑的maven配置文件

打开当前电脑的maven配置文件apache-maven-3.3.3\conf\settings.xml,添加如下信息: 
1. 找到servers节点,添加如下两个子节点:

<server>
<id>bolingcavalry-nexus-releases</id>
<username>deployment</username>
<password>admin123</password>
</server>
<server>
<id>bolingcavalry-nexus-snapshots</id>
<username>deployment</username>
<password>admin123</password>
</server>

以上配置了两个server的用户名和密码信息 ,接下来需要身份验证的时候,都可以通过bolingcavalry-nexus-releases和bolingcavalry-nexus-snapshots这两个id来使用对应的用户名和密码; 
2. 找到mirrors节点,添加如下两个子节点:

<mirror>
<id>bolingcavalry-nexus-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.119.155:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>bolingcavalry-nexus-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.119.155:8081/nexus/content/groups/public-snapshots</url>
</mirror>

以上配置了不同的仓库地址; 
3. 找到profile节点下面的repositories节点,添加如下两个子节点:

<repository>
<id>bolingcavalry-nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>bolingcavalry-nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>

以上配置release和snapshots的部署时,使用哪个仓库和server的配置信息; 
4. 找到profile节点下面的pluginRepositories节点,添加如下两个子节点:

<pluginRepository>
<id>bolingcavalry-nexus-releases</id>
<url>http://nexus-releases</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
<pluginRepository>
<id>bolingcavalry-nexus-snapshots</id>
<url>http://nexus-snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>

以上配置release和snapshots的部署时的插件仓库配置;

至此,本地maven配置就完成了,接下来我们开始创建三个maven工程;

创建mvnDemoLib工程

  1. 创建一个maven工程mvnDemoLib,pom.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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.</modelVersion> <groupId>com.bolingcavalry</groupId>
<artifactId>mvndemolib</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <distributionManagement>
<repository>
<id>bolingcavalry-nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.119.155:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>bolingcavalry-nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.119.155:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement> </project>

如上所示,mvnDemoLib是个普通的java工程,repository和snapshotRepository定义了deploy的时候用到的服务器信息,id和我们前面在maven配置信息中增加的id一致; 
2. 工程的源码只有一个文件:UserInfo.java; 
3. 在pom.xml所在文件夹下执行命令:

mvn clean deploy -U

看到类似如下的输出信息:

.....
http://192.168.119.155:8081/nexus/content/repositories/snapshots/com/bolingcavalry/mvndemolib/1.0-SNAPSHOT/mvndemolib-1.0-20180119.044938-1.jar
Uploaded: http://192.168.119.155:8081/nexus/content/repositories/snapshots/com/bolingcavalry/mvndemolib/1.0-SNAPSHOT/mvndemolib-1.0-20180119.044938-1.jar (3 KB at 30.4 KB/sec)
Uploading: http://192.168.119.155:8081/nexus/content/repositories/snapshots/com/bolingcavalry/mvndemolib/1.0-SNAPSHOT/mvndemolib-1.0-20180119.044938-1.pom
Uploaded: http://192.168.119.155:8081/nexus/content/repositories/snapshots/com/bolingcavalry/mvndemolib/1.0-SNAPSHOT/mvndemolib-1.0-20180119.044938-1.pom (1000 B at 17.4 KB/sec)
Downloading: http://192.168.119.155:8081/nexus/content/repositories/snapshots/com/bolingcavalry/mvndemolib/maven-metadata.xml
Uploading: http://192.168.119.155:8081/nexus/content/repositories/snapshots/com/bolingcavalry/mvndemolib/1.0-SNAPSHOT/maven-metadata.xml
Uploaded: http://192.168.119.155:8081/nexus/content/repositories/snapshots/com/bolingcavalry/mvndemolib/1.0-SNAPSHOT/maven-metadata.xml (771 B at 17.1 KB/sec)
Uploading: http://192.168.119.155:8081/nexus/content/repositories/snapshots/com/bolingcavalry/mvndemolib/maven-metadata.xml
Uploaded: http://192.168.119.155:8081/nexus/content/repositories/snapshots/com/bolingcavalry/mvndemolib/maven-metadata.xml (285 B at 9.6 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 28.919 s
[INFO] Finished at: --19T12::+:
[INFO] Final Memory: 18M/211M
[INFO] ------------------------------------------------------------------------

如果提示失败,请看具体的错误码,我之前由于在settings.xml中将密码填写错误,导致此处返回的错误码为401; 
4. 在nexus的网页上已经可以上传成功的jar包了,如下图: 

至此,我们上传二方库到maven私有仓库的操作已经完成,使用私有仓库的开发和构建环境都可以使用这个二方库了,接下来试试如何在工程中使用此二方库;

创建mvndemoserver工程

  • 创建一个springboot的web工程mvndemoserver,里面有个controller,提供一个http接口服务,pom.xml中添加二方库的依赖,如下:
<dependency>
<groupId>com.bolingcavalry</groupId>
<artifactId>mvndemolib</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

创建一个controller,提供http服务,会用到UserInfo类,代码如下:

@RequestMapping(value = "/getuserinfo/{name}", method = RequestMethod.GET)
@ResponseBody
public UserInfo getuserinfo(@PathVariable("name") final String name) {
UserInfo userInfo = new UserInfo();
userInfo.setName(name);
userInfo.setAge(name.length());
return userInfo;
}

服务启动后,在浏览器输入地址:http://localhost:8080/getuserinfo/tom,可以看到以下json返回: 

创建mvnDemoClient工程

  • 我们再创建mvnDemoClient工程,访问http://localhost:8080/getuserinfo/tom,将取得的json转成UserInfo对象;
  • mvnDemoClinet工程的pom.xml如下,除了mvndemolib,还依赖了httpclient和fastjson:
<?xml version="1.0" encoding="UTF-8"?>
<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.</modelVersion> <groupId>com.bolingcavalry</groupId>
<artifactId>mvnDemoClient</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>com.bolingcavalry</groupId>
<artifactId>mvndemolib</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.</version>
</dependency>
</dependencies> </project>

发起http请求,将字符串转成UserInfo对象的代码如下:

 public static void main(String[] args) throws Exception{
CloseableHttpClient httpclient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet("http://localhost:8080/getuserinfo/jerry");
//response
HttpResponse response = httpclient.execute(httpGet);
HttpEntity entity = response.getEntity();
//收到原始的响应
String rawStr = EntityUtils.toString(entity,"UTF-8");
//打印原始的字符串
System.out.println("raw string : " + rawStr);
//将字符串转成UserInfo对象
UserInfo userInfo = JSONObject.parseObject(rawStr, UserInfo.class);
System.out.println("userName : " + userInfo.getName() + ", userAge : " + userInfo.getAge());
}

直接运行这个类,得到的结果如下:

raw string : {"name":"jerry","age":}
userName : jerry, userAge :

以上就是将二方库工程上传到maven私有仓库、并在其他工程中使用此二方库的全部过程,希望能对您的开发有所帮助,接下来的实战,我们将在Docker下简单快捷的完成maven仓库的搭建;

实战maven私有仓库三部曲之二:上传到私有仓库的更多相关文章

  1. git将本地仓库中的文件上传到远程仓库

    现在我们开始创建本地git仓库(版本库又叫仓库) (本地仓库:$ git init之后的目录): 1.任意地方新建文件夹aaa,右击git bash here, 2.弹出一个对话框, 3. 首先配置你 ...

  2. 【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)

    写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...

  3. 【maven】如何将一个已有的jar文件,生成maven坐标,并上传至远程仓库

    [一]如何将一个已有的jar文件,生成maven坐标 使用maven构建项目需要在项目中引入自定义的一些包,也像maven一样在工程的pom.xml中引入相应的坐标,这时候我们就要自己把包上传到本地仓 ...

  4. nexus搭建maven私服及私服jar包上传和下载

    nexus搭建maven私服及私服jar包上传和下载 标签: nexus管理maven库snapshot 2017-06-28 13:02 844人阅读 评论(0) 收藏 举报 分类: Maven(1 ...

  5. 分布式版本控制系统Git-----2.上传至远程仓库之基础版

    好,之前已经将文档下载下来了,但是我感觉还是将自己之前截的图放出来比较好,自己整理的,但是总不能放桌面上,时间久了也会忘得,索性放到博客上吧,也便于其他人查看,简直是百利而无一害啊.哈哈.来吧. 注意 ...

  6. 如何将本地git仓库中的代码上传到github

    1,  在github上新建一个仓库,比如为:CSS3Test,仓库地址为:https://github.com/hyuanyuanlisiwei/CSS3Test 2,本地git仓库中的文件项目为C ...

  7. 把本地git仓库的项目上传到远程仓库

    之前在学校实验室服务器上建了一个git远程仓库,存放我写的express项目代码.后来由于出去实习,就无法访问那个远程仓库了,因为它在校园网内. 还好我的笔记本中有这个项目完整的本地仓库,于是我就试着 ...

  8. 在 github 中新建仓库后,如何上传文件到这个仓库里面。

    在 github 中新建仓库后,如何上传文件到这个仓库里面. libin@hglibin MINGW64 /e/github.io (master) $ git remote libin@hglibi ...

  9. (转)如何将本地git仓库中的代码上传到github

    1,  在github上新建一个仓库,比如为:CSS3Test,仓库地址为:https://github.com/hyuanyuanlisiwei/CSS3Test 2,本地git仓库中的文件项目为C ...

  10. git将本地项目上传到远程仓库

    1.cd mygit 打开项目文件夹 2.git init 初始化git 3.git remote add origin xxx(远程仓库地址)  添加远程库   git remote -v 查看远程 ...

随机推荐

  1. Servlet3.0整合Springmvc(注解版)

    在创建maven的web工程时候,如果报错缺少web.xml 则在pom添加如下配置 : <build> <plugins> <plugin> <groupI ...

  2. 素数分布 - nefu 117

    素数个数的位数 - nefu 117 普及一个公式: 位数公式:要求一个数x的位数,用公式:lg(x)+1 素数分布:n/ln(n) 所以直接求解n/ln(n)的位数就可以了 代码如下: #inclu ...

  3. xshell5使用ssh连接阿里云服务器

    这里有两种方式,一种是在阿里云的控制台里面进行,另一种是在Xshell里面生成密钥. 阿里云控制台密钥对 点击右上方的创建密钥对 在阿里云里面生成较为简单,点击该页面右上方的“创建密钥对”,在另一个页 ...

  4. 在 Ubuntu 里如何下载、安装和配置 Plank Dock

    一个众所周知的事实就是,Linux 是一个用户可以高度自定义的系统,有很多选项可以选择 —— 作为操作系统,有各种各样的发行版,而对于单个发行版来说,又有很多桌面环境可以选择.与其他操作系统的用户一样 ...

  5. Mysql之select

    SELECT {*|<字段列表>}   [   FROM <表1>,<表2>,…,<表n>   WHERE <表达式>   GROUP BY ...

  6. c# Middleware impl

    using NUnit.Framework; using System; using System.Collections.Generic; using System.Linq; using Syst ...

  7. Python内置函数详解-总结篇

    参考链接:http://www.cnblogs.com/sesshoumaru/p/6140987.html

  8. 【Error】:10061由于目标计算机积极拒绝,无法连接

    之前Windows上连接mongodb的时候首先用mongod.exe启动程序之后,用mongo.exe来连接数据库.但是在连接的时候,出现如下错误: error:10061 由于目标计算机积极拒绝, ...

  9. Arison [JS]window.location获取url各项参数详解

    https://www.cnblogs.com/Arison/p/5286368.html 对于这样一个URL代码如下 复制代码 http://www.php230.com :80/fisker/po ...

  10. PHP实现登录功能DEMO

    PHP实现登录的原理是什么呢?就是利用Session实现的,用户访问网站,系统会自动在服务器生成一个Session文件,这个Session可以用来存储用户的登录信息.好了,这是基本储备,我们下面来实现 ...