Java Maven專案之Nexus私服搭建和版本管理應用
目錄:
- Nexus介紹
- 環境、軟體準備
- Nexus服務搭建
- Java Maven專案版本管理應用
- FAQ
1、Nexus介紹
Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部倉庫的維護和外部倉庫的訪問。利用Nexus你可以只在一個地方就能夠完全控制訪問 和部署在你所維護倉庫中的每個Artifact。我們可以在區域網搭建一個maven私服,用來部署第三方公共構件或者作為遠端倉庫在該區域網的一個代理。
2、環境、軟體準備
本次演示環境,我是在本機mac上操作,以下是我本地軟體及版本:
- Nexus:nexus-2.14.4-03
- Jdk:1.8.0_91
- Maven:3.3.9
- Git: 2.10.1
- GitLab:8.17.4
注意:Java Maven專案版本管理,這裡我們scm使用git來做版本管理,gitlab作為程式碼儲存,這裡我們忽略Jdk、Maven、Git、GitLab的安裝過程,著重介紹下Nexus的搭建,以及Java Maven專案配置以及版本管理配置。
3、Nexus服務搭建
這裡我們使用Nexus OSS開源版本,官網下載地址:Nexus Repository Manager OSS,這裡我選擇2.x的tag.gz包下載安裝,安裝到我本地/Users/wanyang3目錄下。
1)解壓縮下載包
cd /Users/wanyang3
tar -zxvf nexus-2.14.4-03-bundle.tar.gz
解壓縮後,會在當前目錄nexus-2.14.4-03-bundle下出現兩個目錄:
nexus-2.14.4-03:nexus服務目錄,包括日誌,配置、啟動、應用。
sonatype-work:nexux儲存目錄,下載上傳的各個包存貯在這裡。
2) 修改配置並啟動服務
修改配置:
cd /Users/wanyang3/nexus-2.14.4-03-bundle/nexus-2.14.4-03/conf
vim nexus.properties
說明:該檔案是nexus的配置屬性檔案,application-port預設服務埠8081,因為本地8081 埠已經佔用,所以我們這裡修改為9998,即:application-port=9998,其他配置,如nexus-work、runtime、application-host、nexus-webapp等預設即可。
啟動:
cd /Users/wanyang3/nexus-2.14.4-03-bundle/nexus-2.14.4-03/bin
./Nexus start
Usage: ./nexus { console | start | stop | restart | status | dump }
注意:若啟動報錯,說沒有許可權啟動,或者讓指定USER時,有兩種方法解決:
1. 使用RUN_AS_USER=root ./Nexus start命令啟動
2. 修改Nexus檔案,設定開啟註釋,並設定RUN_AS_USER=root,以後只需要執行./Nexus start即可。
3)設定Nexus
成功啟動Nexus後,我們可以瀏覽器訪問http://127.0.0.1:9998/nexus/,就可以看到Nexus服務Web管理頁面歡迎頁面了。
3.1 建立倉庫
點選右上角Log In,輸入使用者名稱和密碼登入,Nexus預設賬戶使用者名稱為admin,密碼為admin123,登入以後,我們現在可以建立一個個人倉庫了。點選左側Repositories,我們可以看到預設的所有的倉庫列表。
我們可以看到倉庫型別有四種:
- hosted(宿主倉庫):用來部署自己,第三方或者公共倉庫的構件
- proxy(代理倉庫):代理遠端倉庫
- virtual(虛擬倉庫):預設提供了一個Central M1虛擬倉庫,用來將maven 2適配為maven 1
- group(倉庫組):統一管理多個倉庫
這裡我們選擇型別為hosted的建立一個wanyang3的Repositories,注意選擇Deployment Policy時,如果該倉庫多次部署的話,請選擇Allow Redeploy,否則後續部署會報錯。
3.2 設定使用者及許可權
點選左側Security—》Users,設定使用者及許可權。
我們可以看到有三個預設的賬號:
- Admin(管理員賬號):Nexus管理員許可權,最高許可權,什麼操作都可以做。
- Deployment(部署賬號):Nexus部署許可權,以及所有倉庫的CRUDV操作許可權。
- Anonymous(匿名賬號):Nexus匿名許可權,以及所有倉庫只讀許可權。
我們正常訪問倉庫的時候,是不需要這三個賬戶的,一般我們會把Deployment賬戶暴漏出來,方便開發或運維部署專案使用,我們可以直接使用該部署賬號,亦可以新建立一個自己的賬號資訊,通過Add Role Management來控制該賬號的許可權。
注意:這裡要記住設定的使用者名稱和密碼,下邊配置Maven Setting.xml的時候配置使用者名稱和密碼資訊。
Java Maven專案版本管理應用
一、Java Maven專案基本配置
我們先來看一個最基礎的pom.xml檔案,我們要達到的目的是,讓我們依賴的jar包,從我們剛配置的Nexus私服上拉取和儲存。
<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.wanynag3.efp</groupId>
<artifactId>efp_demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>efp_demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<finalName>efp_demo</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
從pom檔案可以看出來,這個Maven專案是一個很常見的SpringMVC專案,我們想讓他依賴剛搭建的Nexus私服,那麼需要修改Maven的setting.xml的mirrors節點。
<mirrors>
<mirror>
<id>default</id>
<mirrorOf>*</mirrorOf>
<name>default maven nexus mirror</name>
<url>http://127.0.0.1:9998/nexus/content/groups/public</url>
</mirror>
</mirrors>
說明:這裡mirror表示映象庫,指定庫的映象,也就是覆蓋中央倉庫的預設地址,這裡<mirrorOf>*</mirrorOf>表示為所有的倉庫做映象,也可以指定某個或某幾個倉庫做映象,如central庫。
修改完成之後,以後我們修改或新增dependency時,都會先從本地私服拉取,如果沒有則去中央倉庫拉取並快取到私服,下次使用就可以直接從本地私服拉取,速度就快的多啦!
二、Java Maven專案版本管理
我們先來了解一下Maven專案從1.0.0-SNAPSHOT到1.0.0(Release)在到1.0.1-SNAPSHOT的過程:
- 更新pom版本從1.0.0-SNAPSHOT到1.0.0
- 對該版本打一個1.0.0 tag推送到Git/SVN
- 針對該tag,執行mvn deploy,釋出1.0.0正式版本,推送Maven倉庫
- 更新pom版本從1.0.0到1.0.1-SNAPSHOT
整個過程,是通過Maven外掛maven-release-plugin來實現,該外掛可以幫我們升級pom版本號,打tag並提交到scm,以及提交到Nexus倉庫,我們需要配置下pom.xml。
1、增加scm配置
<scm>
<connection>scm:git:http://git.xx.xx.com/e_flows/efp_demo.git</connection>
<developerConnection>scm:git:http://git.xx.xx.com/e_flows/efp_demo.git</developerConnection>
<url>scm:git:http://git.xx.xx.com/e_flows/efp_demo.git</url>
</scm>
2、在plugins下增加plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<tagNameFormat>[email protected]{project.version}</tagNameFormat>
</configuration>
</plugin>
說明:
1. scm配置,配置該專案的git或svn地址,maven-release-plugin外掛會幫我們完成一系列git或svn操作,如提交、打tag等,這裡我使用gitlab作為程式碼管理,所以需要提前安裝好git和gitlab,否則maven執行會報錯。
2. maven-release-plugin外掛,tagNameFormat預設取artifactId-version作為tag的名稱,我們也可以指定tag的格式,例如這裡我指定以v開頭+pom中的version欄位(v1.0.0),可以用[email protected]{project.version}。
好了,我們現在開始使用外掛執行版本管理了。
首先,我們來執行命令mvn release:prepare
,執行過程中,我們會看到這樣的輸出提示:
1. What is the release version for "efp_demo"? (com.wanynag3.efp:efp_demo) 1.0.0: :
--意思是你想要將efp_demo釋出為什麼版本,預設是1.0.0(按照pom中version走的),如果想釋出為其他版本號,可以在:後邊輸入其他版本號。
2. What is SCM release tag or label for "efp_demo"? (com.wanynag3.efp:efp_demo) v1.0.0: :
--意思是你想要將efp_demo釋出為什麼tag標籤,預設是v1.0.0(這裡我們在pom中設定tagNameFormat起作用啦!),如果想釋出其他tag標籤,可以在:後邊輸入其他tag。
3. What is the new development version for "efp_demo"? (com.wanynag3.efp:efp_demo) 1.0.1-SNAPSHOT: :
--意思是你想要為efp_demo設定為什麼新的開發版本,預設是1.0.1-SNAPSHOT(預設在原版本+1),如果想設定為其他版本,比如升版本1.1.0,可以在:後邊輸入版本號。
執行完畢之後,在Gitlab中該專案對應倉庫中tag中,就可以看到maven-release-plugin剛剛打的v1.0.0的tag,同時可以看到pom.xml中版本自動升級為1.0.1-SNAPSHOT。
然後,我們需要將efp_demo:1.0.0正式版本釋出到我們私服中,我們還需要修改一下pom.xml以及setting.xml,配置repository和snapshotRepository倉庫地址,Server認證資訊等。
1、Maven setting.xml中設定server
<servers>
<server>
<id>wanyang3.release</id>
<username>wanyang3</username>
<password>******</password>
</server>
<server>
<id>wanyang3.snapshot</id>
<username>wanyang3</username>
<password>******</password>
</server>
</servers>
2、pom.xml中新增distributionManagement
<distributionManagement>
<repository>
<id>wanyang3.release</id>
<name>Internal Release Repository</name>
<url>http://127.0.0.1:9998/nexus/content/repositories/releases</url>
<uniqueVersion>true</uniqueVersion>
</repository>
<snapshotRepository>
<id>wanyang3.snapshot</id>
<name>Internal Snapshot Repository</name>
<url>http://127.0.0.1:9998/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
注意:
1. repository下的id,必須跟Maven setting.xml中server下的id保持一致,我們上邊新增的的Nexus賬號wanyang3,是具有Deployment許可權的,這個地方有許可權驗證,使用者名稱密碼不對,deploy時會認證不通過。
2. repository和snapshotRepository的url一個是正式releases地址,一個是快照snapshots地址,這裡我們用Nexus預設地址,也可以改為自己新建的releases和snapshots地址。
接著,我們執行命令mvn release:perform
,執行過程中,我們看到如下輸出,則說明deploy成功:
[INFO] Uploading: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanynag3/efp/efp_demo/1.0.0/efp_demo-1.0.0.war
......
[INFO] Uploaded: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanynag3/efp/efp_demo/1.0.0/efp_demo-1.0.0.war (6562 KB at 34717.1 KB/sec)
[INFO] Uploading: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanynag3/efp/efp_demo/1.0.0/efp_demo-1.0.0.pom
......
Uploaded: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanynag3/efp/efp_demo/1.0.0/efp_demo-1.0.0.pom (4 KB at 244.6 KB/sec)
......
該過程,maven-release-plugin會自動幫我們簽出剛才打的v1.0.0 tag,然後打包,最後上傳到私服Maven倉庫中指定位置。好了到這裡,整個版本的升級,打標籤,釋出等工作全部完成。我們可以在私服Maven倉庫中看到正式釋出的1.0.0版本啦!
至此,Maven專案版本自動化管理就完成了。
FQA
執行
mvn release:prepare
報錯 [Cannot prepare the release because …]:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project qd_api: Cannot prepare the release because you have local modifications : [ERROR] [pom.xml:modified]
這個報錯,是因為本地有程式碼修改未提交,必須先提交修改之後,在執行該命令。
執行
mvn release:prepare
報錯 [Unable to commit files…]:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project efp_demo: Unable to commit files [ERROR] Provider message: [ERROR] The git-push command failed. [ERROR] Command output: [ERROR] remote: HTTP Basic: Access denied [ERROR] fatal: Authentication failed for 'http://git.xx.xx.com/e_flows/efp_demo.git/'
這個報錯,是因為在執行git相關操作時,Gitlab認證失敗,請檢查一下git使用者名稱和密碼。
執行
mvn release:perform
報錯 [Deployment failed: repository element was …]:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project efp_demo: Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter -> [Help 1]
這個報錯,是因為pom.xm中沒有配置distributionManagement相關資訊,我們可以在pom中增加distributionManagement資訊,或者在命令後追加
-DaltDeploymentRepository=id::layout::url
執行
mvn release:perform
報錯 [Failed to deploy artifacts: Could not transfer …]:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project efp_demo: Failed to deploy artifacts: Could not transfer artifact com.wanyang3.efp:efp_demo:war:1.0.0 from/to wanyang3.default (http://127.0.0.1:9998/nexus/content/repositories/releases): Failed to transfer file: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanyang3/efp/efp_demo/1.0.0/efp_demo-1.0.5.war. Return code is: 401, ReasonPhrase: Unauthorized.
這個報錯,是因為deploy時認證失敗,首先在確保Maven setting.xml中server配置的使用者名稱密碼正確的情況下,檢查server id跟pom.xml中repository id是否一致。
執行
mvn release:perform
報錯 [Request Entity Too Large …]:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project multimedia-web: Failed to deploy artifacts: Could not transfer artifact Return code is: 413, ReasonPhrase: Request Entity Too Large.
這個報錯,是因為我們nginx代理預設客戶端最大允許body的size太小導致(預設2M),需要修改nginx.conf中proxy部分:
client_max_body_size 500M
執行
mvn release:perform
報錯 [MavenReportException: Error while generating …]:[INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.4:jar (attach-javadocs) on project efp_demo: MavenReportException: Error while generating Javadoc: [INFO] [ERROR] Exit code: 1 - /Users/wanyang3/git/e_flows/efp_demo/target/checkout/src/main/java/com/wanyang3/efp/efp_demo/controller/CommonController.java:25: 警告: mailTo沒有 @param
這個報錯,是因為我使用的jdk8,執行
mvn clean install
編譯是能通過,但是執行該命令時一直報Javadoc的錯誤,後來google查詢了下,需要增加一個maven-javadoc-plugin外掛可解決。<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin>
參考資料:
相關推薦
Java Maven專案之Nexus私服搭建和版本管理應用
目錄: Nexus介紹 環境、軟體準備 Nexus服務搭建 Java Maven專案版本管理應用 FAQ 1、Nexus介紹 Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部倉庫的維護和外部倉庫的訪問。利用Nexus你可以只
ava Maven項目之Nexus私服搭建和版本管理應用
max 權限 環境 val 導致 type www. exit frame 目錄: Nexus介紹 環境、軟件準備 Nexus服務搭建 Java Maven項目版本管理應用 FAQ 1、Nexus介紹 Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部
Maven之Nexus私服
Nexus簡介 Nexus 是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫 下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫伺服器,在代理遠端倉庫的同時維護本地倉庫,以節省頻寬和時間,Nexus就可以滿足這樣的需要。
大資料平臺搭建之nexus私服
Steps for installing Nexus repository manager in RedHat machine 1. Downloading Nexus Nexus Open Source distribution was used for this installation tes
MyEclipse 配置maven專案pom.xml設定 上傳專案到nexus私服,通過中轉倉庫下載外掛,以及nexus的配置
1。安裝官方nexus的開源版本 下載安裝可以參照http://www.th7.cn/system/win/201609/179882.shtml 因為不是專業版本,有好多功能限制,不過個人用用夠了。 2。安裝maven 配置相對簡單:官方下載後解壓到安裝目錄即可。再在
Maven學習筆記二:Nexus私服搭建
Nexus是一種流行的Maven遠端倉庫,我們知道Maven一般有兩種倉庫,本地倉庫和遠端倉庫,中央倉庫是Maven自帶的遠端倉庫,除了中央倉庫之外,還存在許多特殊的遠端倉庫,私服便是一種特殊的遠端倉庫,使用私服的好處不言而喻:原本我們直接跟中央倉庫溝通的,現在在中間加入了
Centos7.0下Nexus私服搭建
load 11.2 AD 下載 work tps class ash bundle 1.下載nexus wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.11.2-03-bundl
SuSE之Gitlab私服搭建
admin apache tar fff mar b- option ext chang Gitlab私服搭建 Ps:由於是內網使用不存在郵件派發,不配置郵件,且無需異步服務器代理轉發 直接過程: 1、下載bitnami-gitlab-8.9.6-0-linux-x64-i
Maven 私服搭建和使用
一、下載安裝 1. 私服下載地址 https://www.sonatype.com/download-oss-sonatype 2.下載完成後解壓任意目錄,我的是D:\soft\nexus2\nexus-2.14.8-01 3.安裝 在D:\soft\
Nexus私服搭建及其核心功能
1、私服的使用場景 1)、公司不能連線公網,可以用一個私服務來統一連線 2)、公司內部jar 元件的共享 2、nexus下載與安裝 1)、下載nexus(nexus下載) 2)、解壓並設定環境變數 #解壓 tar -zxvf nexus-2.14.
精簡nexus私服搭建
maven對專案原始碼和依賴管理的好處不言而喻,不過所依賴倉庫都是外網那些常用提供的倉庫地址,基於安全,當外網環境有限制,或私有共通jar需共享時,則會需要搭建內部私服,以下說明基於Linux環境。 1. maven 安裝 安裝很簡單,主要就幾個步驟和設定。 a. w
nexus 私服搭建配置,並將自定義的jar釋出到私服
一、前言 為什麼要在本地開發機器上安裝nexus?首先宣告公司內部是有自己的nexus倉庫,但是對上傳jar包做了限制,不能暢快的上傳自己測試包依賴。於是就自己在本地搭建了一個nexus私服,即可以使用公司nexus私服倉庫中的依賴,也可以上傳和使用自己的測試包依賴。 二、nexus下載
maven私服搭建和使用(初級篇)
為什麼要用遠端倉庫(私服) 如果沒有私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的maven倉庫下載到本地,而一個團隊中的所有人都重複的從maven倉庫下載構件,這樣就加大了中央倉庫
Nexus私服搭建及本地jar管理
環境準備與搭建 本地需要首先搭建好maven環境,在此基礎之上 下載nexus的檔案到本地,解壓後如圖顯示 修改nexus的配置檔案D:\worksoftware\nexus\nexus-2.11.4-01\conf\nexus.properties
Linux nexus 私服搭建
sysconf default 防火墻 pre prope .so zxvf def har 下載nexushttps://www.sonatype.com/download-oss-sonatype 上傳到服務器/opt/ 解壓 tar -zxvf nexus-3.14.
Nexus私服搭建及settings.xml配置詳細教程
配置: centos 7 安裝流程如下: # useradd nexus # passwd nexus $ su nexus $ cd $ wget nexus-3.12.1-01-unix.tar.gz && mkdir nexus3
eclipse中釋出專案到nexus私服
1.根據maven專案pom.xml檔案中 <!-- 配置遠端釋出到私服,mvn deploy --> <distributionManagement> <repository>
配置兩臺電腦maven共用一個nexus私服
雖然最近一直在用maven,但是由於學校網速尚可,所以對私服的需求不不高,所以一直都沒有搭建過nexus。現在新買了一臺筆記本,覺得剛好可以搭建個私服,給兩臺電腦的maven都可以使用到nexus。順便學習下如何搭建nexus。 具體操作如下:
Nexus私服搭建
Maven搭建眾所周知, 是一個很好的專案管理工具,預設情況下,我們下載第三方元件都是從MAVEN官網下載的。但是並不是所有的三方元件都可以在MAVEN官網找到,比如我們專案組自己內部的一些元件,可能要放在一個區域網伺服器上,並且向結合MAVEN使用,這時候我們就要
cnpm私服搭建和發布包
block 郵箱 講解 cnp log 默認 info pos body cnpm 1.cnpm就是淘寶做的一個npm鏡像,定期更新npm包,就是方便墻內的人。此外還可以用它搭建企業內部的npm私服。比如一些企業內部的包不能公開,還有想進行版本管理等等,就很方便。