1. 程式人生 > >實戰maven私有倉庫三部曲之二:上傳到私有倉庫

實戰maven私有倉庫三部曲之二:上傳到私有倉庫

在上一章《實戰maven私有倉庫三部曲之一:搭建和使用》我們搭建了maven私有倉庫,並體驗了私有倉庫快取jar包的能力,避免了局域網內開發人員去遠端中央倉庫下載的痛苦等待,本章我們再來體驗私有倉庫的另一個功能:儲存二方庫;

使用場景

  • 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地址是:[email protected]: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.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: 2018-01-19T12:49:38+08:00
[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;
}

建立mvnDemoClient工程

  • 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.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.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.23</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":5}
userName : jerry, userAge : 5

以上就是將二方庫工程上傳到maven私有倉庫、並在其他工程中使用此二方庫的全部過程,希望能對您的開發有所幫助,接下來的實戰,我們將在Docker下簡單快捷的完成maven倉庫的搭建;

相關推薦

實戰maven私有倉庫三部曲私有倉庫

在上一章《實戰maven私有倉庫三部曲之一:搭建和使用》我們搭建了maven私有倉庫,並體驗了私有倉庫快取jar包的能力,避免了局域網內開發人員去遠端中央倉庫下載的痛苦等待,本章我們再來體驗私有倉庫的另一個功能:儲存二方庫; 使用場景 mvndemos

自定義spring boot starter三部曲實戰開發

本文是《自定義spring boot starter三部曲》的第二篇,上一篇中我們通過學習spring cloud的starter,對spring boot的starter有了初步瞭解,也設計好了實戰內容,今天就來一起實現; 三部曲文章連結 《自定義spring boot

maven構建docker映象三部曲編碼和構建映象

在《maven構建docker映象三部曲之一:準備環境》中,我們在vmware上準備好了ubuntu16虛擬機器,並且裝好了docker、jdk8、maven等必備工具,現在我們來開發一個java web工程,再用docker-maven-plugin外掛來

elasticsearch實戰三部曲文件操作

本文是《elasticsearch實戰三部曲》系列的第二篇,上一篇文章我們動手熟悉了索引相關的基本操作,現在一起來熟悉文件相關的操作; 系列文章連結 《elasticsearch實戰三部曲之一:索引操作》; 《elasticsearch實戰三部曲之二:文件操作》;

Docker下實戰zabbix三部曲監控其他機器

在上一章《Docker下實戰zabbix三部曲之一:極速體驗》中,我們快速安裝了zabbix server,並登入管理頁面查看了zabbix server所在機器的監控資訊,但是在實際場景中,應該是對應用伺服器做監控,所以今天我們來實戰將應用伺服器的監控加入到zabbix server中。 全系列文章連結:

CoProcessFunction實戰三部曲狀態處理

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ###

spring4.1.8初始化原始碼學習三部曲setConfigLocations方法

本章是學習spring4.1.8初始化原始碼的第二篇,前一章《spring4.1.8初始化原始碼學習三部曲之一:AbstractApplicationContext構造方法》對AbstractApplicationContext的初始化做了分析,本章我們聚焦

Docker下Java檔案服務三部曲服務端開發

本章是《Docker下Java檔案上傳服務三部曲》的第二篇,上一章《Docker下Java檔案上傳服務三部曲之一:準備環境》我們把客戶端準備好了,Tomcat容器也部署好了,今天就來開發和部署檔案服務的後臺應用吧; 本章實戰內容概要 本章要建立三個w

Docker下的Spring Cloud三部曲細說Spring Cloud開發

本文是《Docker下的Spring Cloud三部曲》系列的第二篇,詳細講解上一篇例項中用到的eureka、provider、consumer等三個應用的開發過程; 環境資訊 回顧一下實戰環境,如下圖: 原始碼地址 上圖的eureka、

kubernetes下的Nginx加Tomcat三部曲細說開發

本文是《kubernetes下的Nginx加Tomcat三部曲》的第二章,在《kubernetes下的Nginx加Tomcat三部曲之一:極速體驗》一文我們快速部署了Nginx和Tomcat,達到以下效果: 本文我會詳細說明在kubernetes部署上述網

Docker下dubbo開發,三部曲本地環境搭建

在上一篇文章《Docker下dubbo開發,三部曲之一:極速體驗》中,我們快速體驗了dubbo服務的註冊、發現、呼叫,今天我們一起在本地製作一套這樣的環境,經過這次實戰,大家就可以根據實際需求對自己的環境量身定製了。 基礎架構 整個環境由四個容器組成,梳

CDH5部署三部曲部署和設定

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 本

Flink on Yarn三部曲部署和設定

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; 本文是《

CDH+Kylin三部曲部署和設定

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ###

功能文件功能的基本實現

tro enc 舉例 二進制 存儲 multipart file 瀏覽器 實現   使用表單實現文件上傳: <form action="upload_file.php" method="post" enctype="multipart/form-data">

maven構建docker映象三部曲推送到遠端倉庫(內網和阿里雲)

在上一章《maven構建docker映象三部曲之二:編碼和構建映象》的實戰中,我們將spring boot的web工程構建成docker映象並在本地啟動容器成功,今天我們把docker-maven-plugin外掛的推送功能也用上,這樣編譯、構建、推送都能一

Android列表用法實戰ListView高階用法

在我們的專案中,並不是所有列表都是簡單的使用。類似於新聞列表、QQ聊天列表等,具有圖文並排的列表,每個item都有它不同的佈局型別,都有其不同的實現方式。這類複雜的列表表現形式,在各類知名應用當中,不可或缺的存在著。今天我們就來看看,使用ListView能不能實現此類複雜佈局。 今天的例

spring4.1.8擴充套件實戰Aware介面揭祕

接下來通過分析spring原始碼,我們來看看典型的Aware子類有哪些,使用場景是什麼? 在spring容器初始化過程中,會執行AbstractApplicationContext類的prepareBeanFactory方法,這裡面會建立一個bean後置處理器

Docker下MySQL主從三部曲binlog日誌引數實戰

本章是《Docker下MySQL主從三部曲》的終篇,前面的章節我們能夠製作映象來搭建主從同步環境,本章我們來觀察binlog引數MASTER_LOG_POS;關於從庫同步的設定在設定從庫同步的時候一般會使用以下SQL:CHANGE MASTER TO MASTER_HOST=

elasticsearch實戰三部曲搜尋操作

本文是《elasticsearch實戰三部曲》的終篇,作為elasticsearch的核心功能,搜尋的重要性不言而喻,今天的實戰都會圍繞搜尋展開; 系列文章連結 《elasticsearch實戰三部曲之一:索引操作》; 《elasticsearch實戰三部曲之二:文