1.私服簡介
私服是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。有了私服之後,當 Maven 需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠程倉庫,將構件下載到私服,再提供給本地倉庫下載。
我們可以使用專門的 Maven 倉庫管理軟件來搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus。這裏我們使用 Sonatype Nexus。
2.windows上安裝Sonatype Nexus
Nexus Pro專業版是需要付費的,這裏我們下載開源版 Nexus OSS。Nexus 提供兩種安裝包,一種是包含 Jetty 容器的 bundle 包,另一種是不包含容器的 war 包。https://help.sonatype.com/repomanager2/download
2.1 我們下載Nexus Repository Manager 2 OSS,解壓zip文件到一個你喜歡的目錄,
我選擇解壓到D:\Program Files\develop\nexus-2.14.10-01-bundle,結構目錄如下
2.2 安裝
cmd進入bin目錄 D:\Program Files\develop\nexus-2.14.10-01-bundle\nexus-2.14.10-01\bin(爲方便啓動和退出Nexus,可將bin目錄添加到環境變量),
在bin目錄執行
nexus install
將Nexus安裝爲Windows服務。可以通過services.msc命令查看管理window的nexus服務。可將服務啓動方式設爲手動,以後通過 nexus start 即可啓動Nexus ,通過 nexus stop 退出Nexus。爲了方便可將服務啓動方式設爲自動。
修改nexus的配置文件
# Jetty section
application-port=18081 #修改了端口號
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus
# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus #保持默認,爲nexus存放包的地方
runtime=${bundleBasedir}/nexus/WEB-INF
# orientdb buffer size in megabytes
storage.diskCache.bufferSize=4096
2.3 啓動nexus
nexus start
打開瀏覽器,訪問:http://localhost:18081/nexus/:
3.管理Sonatype Nexus
3.1 點擊右上角 Log In,使用用戶名:admin ,密碼:admin123 登錄,可使用更多功能:
點擊左側 Repositories 鏈接,查看 Nexus 內置的倉庫:
Nexus 的倉庫分爲這麼幾類:
- hosted 宿主倉庫:主要用於部署無法從公共倉庫獲取的構件(如 oracle 的 JDBC 驅動)以及自己或第三方的項目構件;
- proxy 代理倉庫:代理公共的遠程倉庫;
- virtual 虛擬倉庫:用於適配 Maven 1;
- group 倉庫組:Nexus 通過倉庫組的概念統一管理多個倉庫,這樣我們在項目中直接請求倉庫組即可請求到倉庫組管理的多個倉庫。
3.2 增加一個倉庫,這裏我們添加一個代理倉庫
以 Sonatype 爲例,添加一個代理倉庫,用於代理 Sonatype 的公共遠程倉庫。點擊菜單 Add - Proxy Repository :
填寫Repository ID - sonatype;Repository Name - Sonatype Repository;
Remote Storage Location - http://repository.sonatype.org/content/groups/public/ ,save 保存:
將添加的 Sonatype 代理倉庫加入 Public Repositories 倉庫組。選中 Public Repositories,在 Configuration 選項卡中,將 Sonatype Repository 從右側 Available Repositories 移到左側 Ordered Group Repositories,save 保存:
3.3 爲了更好的使用 Nexus 的搜索,我們可以設置所有 proxy 倉庫的 Download Remote Indexes 爲 true,即允許下載遠程倉庫索引。
索引下載成功之後,在 Browse Index 選項卡下,可以瀏覽到所有已被索引的構件信息,包括座標、格式、Maven 依賴的 xml 代碼:
有了索引,我們就可以搜索了:
3.4 爲了讓maven重新覆蓋部署之前的版本,把host倉庫的"Deployment Policy"要選擇"Allow Redeploy"
4.安裝maven
4.1 下載maven http://maven.apache.org/download.cgi,把下載的zip包解壓
4.2 配置M2_HOME的環境變量,然後將該變量添加到Path中
5. 在idea上的file--> settings 設置maven目錄
6. 配置maven
maven配置文件D:\Program Files\develop\apache-maven\apache-maven-3.5.0\conf\settings.xml在servers標籤上增加下面內容,以至於部署自己的包到host倉庫能自動取到用戶名和密碼
<server>
<id>snapshots1</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>releases1</id>
<username>admin</username>
<password>admin123</password>
</server>
在mirrors標籤增加以下內容,這樣就能下載到項目裏 <dependencies>標籤下的依賴包了
<mirror>
<id>central1</id>
<mirrorOf>*</mirrorOf> <!-- * 表示讓所有倉庫使用該鏡像-->
<!-- <name>central-mirror</name> -->
<url>http://192.168.1.4:18081/nexus/content/groups/public/</url>
</mirror>
7.idea上新建一個maven工程,pom.xml重要的內容如下
<groupId>com.cmb.com</groupId>
<artifactId>spring-coret</artifactId>
<packaging>jar</packaging>
<version>6.6</version>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams-scala_2.11</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.4.2</version>
</dependency>
</dependencies>
<distributionManagement>
<snapshotRepository>
<id>snapshots1</id>
<url>http://192.168.1.4:18081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>releases1</id>
<url>http://192.168.1.4:18081/nexus/content/repositories/releases</url>
</repository>
</distributionManagement>
說明:
7.1. <groupId>com.cmb.com</groupId> //包名,一般是公司的名字
<artifactId>spring-coret</artifactId>//項目名
<packaging>jar</packaging>//打包方式是jar還是war或者其他的
<version>6.6</version>
|
7.2.java版本1.8和編碼爲UTF-8
<properties>j
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
7.3 你項目要依賴的其他包
<dependencies>
</dependencies>
7.4
<distributionManagement>
<snapshotRepository>
<id>snapshots1</id>
<url>http://192.168.1.4:18081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>releases1</id>
<url>http://192.168.1.4:18081/nexus/content/repositories/releases</url>
</repository>
</distributionManagement>
<id></id>一定要maven的settings.xml一致,以至於才能上傳部署自己的包時能使用密碼,不一定要和nexus的目標庫一致的id,不過最好一致,一遍好理解
<url></url>一定要和nexus庫目錄地址一致
8.mvn deploy就能根據項目pom.xml配置的<version>和<distributionManagement>及maven設置的<servers>
deploy到nenux下的releases庫.
過程:
1.根據pom.xml的設置生成spring-coret-6.6.jar包
<groupId>com.cmb.com</groupId>
<artifactId>spring-coret</artifactId>
<packaging>jar</packaging>
<version>6.6</version>
2.因爲<version>不帶-SNAPSHOT名字,上傳到pom.xml的設置<repository>而不是<snapshotRepository>
<snapshotRepository>
<id>snapshots1</id>
<url>http://192.168.1.4:18081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>releases1</id>
<url>http://192.168.1.4:18081/nexus/content/repositories/releases</url>
</repository>
3.根據 <repository> 的<id>releases1</id>找到maven的servers標籤的設置的密碼和用戶名,用該賬戶上傳打包的jar包到<id>releases1</id>的地址<url>http://192.168.1.4:18081/nexus/content/repositories/releases</url>
<server>
<id>releases1</id>
<username>admin</username>
<password>admin123</password>
</server>
在deploy之前會下載第三方依賴包並編譯成jar包
以下面項目pom.xml的一個依賴爲例子
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.4.2</version>
</dependency>
maven發現本地D:\Program Files\develop\apache-maven\repository(該目錄在idea裏的maven設置裏配置了)有這個包就不會向nexus要,沒有這個包會向根據配置
<mirror>
<id>central1</id>
<mirrorOf>*</mirrorOf> <!-- * 表示讓所有倉庫使用該鏡像-->
<!-- <name>central-mirror</name> -->
<url>http://192.168.1.4:18081/nexus/content/groups/public/</url>
</mirror>
向nexus要,nexus根據配置看本地D:\Program Files\develop\nexus-2.14.10-01-bundle\sonatype-work\nexus有沒有,有的話直接給maven,沒有的話向public repositories配置的所有倉庫要,遠程倉庫就會去下載並且把下載的包放在D:\Program Files\develop\nexus-2.14.10-01-bundle\sonatype-work\nexus下,然後返回給maven。
參考:
https://www.cnblogs.com/yucy/p/7509561.html
https://www.cnblogs.com/ctxsdhy/p/6105805.html
http://www.cnblogs.com/luotaoyeah/p/3791966.html