在上一章《實戰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包
- 登錄nexus,我搭建私有倉庫的機器IP是192.168.119.155,所以訪問地址是http://192.168.119.155:8081/nexus,然后點擊右上角的”Log In”登錄;
- 設置好deploy用戶的密碼,操作如下圖所示:
我這里設置的密碼是admin123; - 設置為允許上傳release的jar包,操作如下圖:
- 設置為允許上傳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工程
- 創建一個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倉庫的搭建;