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


在上一章《實戰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.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;
}

 

服務啟動后,在瀏覽器輸入地址: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.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倉庫的搭建;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM