搭建區域網Maven私服並結合Android Studio實現程式碼複用
每一種技術,每一個框架都不是憑空產生,都是為了解決特定需求.因此使用什麼技術取決於我們的需求,作為一個研發人員,我們不僅僅要懂得編碼,更要有洞察真實需求的能力.
首先介紹一下我們公司的現狀:我們公司有很多APP,每年會優化或者開發5個以上的APP,而這些APP有很多共同的部分,比如一些工具類,自定義UI,視訊播放功能等甚至是框架.為了提高整體團隊的開發效率,帶領大家走出重複造車輪的困局,我設想把這些可以複用的程式碼通過一種特殊的方式進行管理.
1.實現模組化,不同功能模組可以單獨引入,符合類似單一原則;
2.團隊成員可以對各個模組進行版本迭代更新,優化實現方式;
3.引用模組要方面;
綜合以上需求,我嘗試過使用元件化/模組化開發,但是這些都用於一個大專案的開發,而我的需求更類似於模版開發,如同Gradle中依賴.基於這樣的認識,我便想到了Maven專案構建方式.
一、Nexus的環境搭建
1.Nexus下載
Nexus下載地址:https://blog.sonatype.com/
本人使用的是最新版本:Nexus Repository Manager OSS 3.x - Windows
NEXUS REPOSITORY OSS [開源軟體——免費]
NEXUS REPOSITORY Pro [專業版本——收費]
所以我們選擇OSS即可 [點選GET REPOSITORY OSS]
選擇Nexus的版本,進行下載,下載完畢之後解壓檔案.[這裡我選擇的是Nexus Repository Manager OSS 3.x - Windows
這個根據自己的作業系統進行選擇,本人電腦是window系統,接下來的配置和使用都是基於window系統
2.Nexus安裝和配置
(1).解壓之後的檔案目錄結構:得到兩個資料夾nexus-3.9.0-01和sonatype-work,其中第一個資料夾根據下載的版本不同而不同。
(2)配置Nexus路徑:
將nexus-3.9.0-01目錄下的bin新增到環境變數的Path中
(3)編輯nexus.vmoptions
開啟bin資料夾下的nexus.vmoptions,配置Dkaraf.data和Djava.io.tmpdir兩項,圖中N:/nexus-3.9.0-01-win64/sonatype-work/nexus3
-Xms1200M
-Xmx1200M
-XX:MaxDirectMemorySize=2G
-XX:+UnlockDiagnosticVMOptions
-XX:+UnsyncloadClass
-XX:+LogVMOutput
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
-Dkaraf.data=N:/nexus-3.9.0-01-win64/sonatype-work/nexus3
-Djava.io.tmpdir=N:/nexus-3.9.0-01-win64/sonatype-work/nexus3/tmp
-Dkaraf.startLocalConsole=false
(4)編輯nexus-default.properties
另外在資料夾N:\nexus-3.9.0-01-win64\nexus-3.9.0-01\etc
下還有一個配置檔案nexus-default.properties,有需要的也可以自行修改nexus-context-path這個引數,這個是nexus啟動時的根路徑,預設是“/”。
## DO NOT EDIT - CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties
##
# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/
# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
nexus-pro-feature
(5)啟動
開啟CMD,接下來執行命令:nexus.exe /run。 如果列印Started Sonatype Nexus OSS 3.9.0-01
[不同版本Nexus的版本號不同],說明啟動成功
(6)檢視網站
啟動成功後,訪問:localhost:8081。
預設的使用者名稱和密碼:admin/admin123
二.Maven使用
1.倉庫建立介紹
component name的一些說明:
maven-central:maven中央庫,預設從https://repo1.maven.org/maven2/拉取jar maven-releases:私庫發行版jar maven-snapshots:私庫快照(除錯版本)jar maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地maven基礎配置settings.xml中使用。
component type的一些說明:
hosted:型別的倉庫,內部專案的釋出倉庫 releases:內部的模組中release模組的釋出倉庫 snapshots:釋出內部的SNAPSHOT模組的倉庫 3rd party:第三方依賴的倉庫,這個資料通常是由內部人員自行下載之後釋出上去 proxy:型別的倉庫,從遠端中央倉庫中尋找資料的倉庫
(1)建立一個私有倉庫
- 點選設定【Repository administration】按鈕,進入倉庫管理配置介面;
- 點選Repositories,進入倉庫管理介面;
- 點選Create repository,開始建立倉庫,如圖1
- 點選Blob Stores,建立Blob儲存,就是我們倉庫檔案的存放位置。當然一般我們可以不建立倉庫,Nexus已經為我們建立了預設倉庫default,如圖2、圖3
- 選擇倉庫型別,這裡我們是要建立Maven私有倉庫,所以我們要選擇maven2(hosted),如果是建立代理倉庫選擇 maven2 (proxy),如果是建立倉庫組,選擇maven2 (group),如圖4
6.建立私有倉庫:如圖5 - 輸入倉庫名
- 配置版本策略
- 配置倉庫存放地址
- 配置部署策略
圖1
圖2
圖3
圖4
圖5
(2)新建一個代理倉庫
- 選擇倉庫型別為maven2 (proxy);
如圖6,選擇被代理倉庫地址,其他選項在建立私有倉庫時候已經介紹,沒有介紹的一律預設
圖6
(3)建立group
選擇要放在本分組的倉庫名,點選>即可加入該分組。<從本分組中移除倉庫,如下圖
在引用的時候可以直接引用group倉庫
2.Android Studio中配置Maven倉庫並上傳程式碼到Maven中
(1)建立gradle_maven_push.gradle
因為,Module比較多,我在專案根目錄裡寫了一個 gradle 檔案gradle_maven_push.gradle
來上傳。程式碼如下:
apply plugin: 'maven'
//release 地址
def RELEASE_REPOSITORY_URL = "http://localhost:8081/repository/tdk_release/"
//snapshots 地址
def SNAPSHOT_REPOSITORY_URL = "http://localhost:8081/repository/tdk_Snapshot/"
//判斷 VERSION_NAME 如果以`-SHAPSHOT`結尾,則上傳地址為 snapshot 地址
def REPOSITORY_URL = VERSION_NAME.endsWith("-SNAPSHOT") ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL;
def NEXUS_USERNAME = "admin"
def NEXUS_PASSWORD = "admin123"
logger.info("groupId = %s\t\nartifactId = %s\t\nversion = %s\t\nrepository = %s\t\n", GROUP, POM_ARTIFACT_ID, VERSION_NAME, REPOSITORY_URL)
afterEvaluate { project ->
uploadArchives {
repositories.mavenDeployer {
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
repository(url: REPOSITORY_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
}
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
artifacts {
archives androidSourcesJar
}
}
(2)然後在你要上傳 module 的build.gradle 檔案引入。
如下圖是我們baseutilslib Module 的 build.gradle:
apply plugin: 'com.android.library'
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
ext.GROUP="com.tdk.baseutilslib"
ext.VERSION_NAME="1.1.0-SNAPSHOT"
ext.POM_ARTIFACT_ID="baseutilslib"
//引用gradle_maven_push.gradle
apply from: "${project.rootDir}/gradle_maven_push.gradle"
這裡請關注下面的程式碼,GROUP,VERSION_NAME,POM_ARTIFACT_ID
和最後一行引入我們前面寫的gradle_maven_push.gradle
。
GROUP
一般代表了你的組織名稱,例如我的com.tdk.baseutilslib
POM_ARTIFACT_ID
:Library 的簡稱。
VERSION_NAME版本號,如果有-SNAPSHOT表示是快照版。
上面這三個也就組成了我們平常看見的引依賴 com.tdk.baseutilslib:baseutilslib:1.1.0-SNAPSHOT
(3)最後在terminal中執行gradle uploadArchives
,上傳檔案
(4)上傳成功之後可以在web端看到你的上傳檔案的Maven形式
3.Android Studio中使用自定義Maven倉庫的工程
(1)在專案的gradle.build中配置maven私服的地址
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.0-alpha09'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
//maven倉庫組地址
maven{
url "http://localhost:8081/repository/tdk_group/"
}
jcenter()
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
(2)在要使用倉庫中元件的Moudle中配置依賴
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation 'com.tdk:baseutilslib:1.1.1-release'
}
(3)在專案中匯入使用,完畢。
注意:我們在編譯專案的時候,有些包在我們自己的maven私服中不存在,這時proxy代理庫會去我們代理的倉庫中去查詢並下載到本地,這樣就可以加快我們的下載架包的速度,提高開發效率。所以有條件的夥伴,都可以在自己的電腦上搭建Maven私服,自己使用,提高效率。當然我們也可以,建立一個代理倉庫去代理公司的倉庫,然後可以共用一些“輪子”。
相關推薦
搭建區域網Maven私服並結合Android Studio實現程式碼複用
每一種技術,每一個框架都不是憑空產生,都是為了解決特定需求.因此使用什麼技術取決於我們的需求,作為一個研發人員,我們不僅僅要懂得編碼,更要有洞察真實需求的能力. 首先介紹一下我們公司的現狀:我們公司有很多APP,每年會優化或者開發5個以上的APP,而
【Maven】3.使用IntelliJ IDEA 使用本地搭建的maven私服,而不是使用默認的maven設置
apply dea rri ref http 而不是 tell .com .html 安裝Idea的教程:http://www.cnblogs.com/sxdcgaq8080/p/7641379.html 搭建maven私服的教程:http://www.cnblogs.co
如何安裝Nexus Repository Manager OSS 3.x,如何搭建管理Maven私服,win10、win7通用安裝詳解,附:錯誤解決方案。
今天搭建一個Maven私服花了不少功夫,查閱了很多安裝的帖子以及百度了很多錯誤解決方案,然後將所有的帖子精華部分,附上我的經驗來帶給大家一個特別詳細的安裝方案,所以該文章大部分可以說是總結別人帖子。話不多說,開始安裝: 1.下載 &nb
離線更新nexus搭建的Maven私服中央倉庫索引
nexus可以線上更新中央倉庫索引,但是更新速度慢,而且很有可能下載的索引不全。下面介紹一種離線更新中央倉庫索引的方式,速度快並且可靠。 1、訪問http://repo.maven.apache.org/maven2/.index/下載中心倉庫最新版
Windows下搭建基於Nexus的Android Maven私服(一)
環境準備 windows10 jdk1.8 maven3.3.9 (上述環境配置過程請自行百度~) 環境檢驗: maven:在cmd下出現如下: C:\Users\hwj>mvn --version Apache Maven 3.3.9 (bb52d8502b132e
nexus搭建maven私服,docker私服並與maven專案整合
目錄 實現功能: 通過nexus管理jar包 通過nexus管理docker映象 開發端機器遠端打包上傳jar 通過maven-docker外掛編譯為docker映象,部署到測試環境,並上傳的nexus私服 搭建環境 ubantu17
關於android studio上maven私服搭建及
1.首先jdk等必須的環境,maven在studio中自帶不需要下載配置 3.開啟目錄nexus-2.4.0-09-bundle\nexus-2.4.0-09\bin\jsw這個目錄下面你會發現有很多系統版本的nexus環境 我的電腦是win7 (64)為的
關於Windows下搭建基於Nexus的Android Maven私服
看了些關於搭建Maven私服的文章,有些是過時的,有些跟著去做卻不行,現在總結下有用的。可以參考:Windows下搭建基於Nexus的Android Maven私服(一)https://blog.csdn.net/huweijian5/article/details/5667
AndroidStudio使用進階二:搭建自己的maven私服,並使用Gradle統一依賴管理
前言: 最近我們老大組織了我們軟體團隊開了一個小會,說了一些存在的問題,平時在技術上的交流還是比較少的,尤其是在不同的專案之間的開發人員,然而經過這次會議我突然發現,我的缺陷不僅是在基礎的能力上,還有一點就是對新的技術,程式設計思想知之甚少,就用low來形容吧
Windows下搭建基於Nexus的Android Maven私服(二)
在Windows下搭建基於Nexus的Android Maven私服(一)文章中已經搭建好了環境,下面就介紹下如何在Android Studio中使用。 一 建立Repositores,如下圖 建立好了把連結copy一下,待會要用到。 二 開啟Androi
利用nexus搭建Android的maven私服
前言 maven是一個構建和管理專案的工具,做java的同學肯定不陌生,在Android中,預設採用的是gradle進行的構建,實際上很多gradle上的三方庫也是放在maven倉庫的。 在日常的android開發中,隨著專案的日益增大,編譯越來越慢,程式碼
Windows下使用Nexus搭建Maven私服(安裝)
支持 blog 試用 prop 解壓 結束 factor repos name 一、下載Nexus 下載OSS最新版:https://www.sonatype.com/download-oss-sonatype 老版本:https://support.sonatype.
Windows 下Nexus搭建Maven私服
4.3 快照 激活 nap cti sha 基本 新增 項目 轉自:http://blog.csdn.net/fanyuna/article/details/40145827 1、 為什麽使用Nexus 如果沒有私服,我們所需的所有構件都需要通過mave
nexus搭建maven私服及私服jar包上傳和下載
ive 校驗 public 我們 賬號 依賴 detail 接下來 triangle nexus搭建maven私服及私服jar包上傳和下載 標簽: nexus管理maven庫snapshot 2017-06-28 13:02 844人閱讀 評論(0) 收
Nexus搭建Maven私服
gem 說明 原因 x86 copy href .com 3.x jar包 公司一般都有個自己的私服來管理各種jar包,原因大概有這麽3個,分別是: 1、有的公司不能訪問外網,只能通過私服來管理jar包和插件; 2、公司網速比較慢,通過公司的私服來獲取jar
搭建Maven私服那點事
文件的 repos 版本控制工具 oracl 手工 apach security 項目 源碼 摘要:本文主要介紹在CentOS7.1下使用nexus3.6.0搭建maven私服,以及maven私服的使用(將自己的Maven項目指定到私服地址、將第三方項目jar上傳到私服供
ubuntu下使用Nexus搭建Maven私服
專業 執行命令 點擊 代理 都是 roo 系統文件 update in 連接 ubuntu下使用Nexus搭建Maven私服 1、私服簡介: 私服是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。有了私服之後,當 Maven 需要下載構件時,直接請求私
Maven 私服搭建
mirror dex 隔離 lan manager 3.1 localhost 拷貝 mirrorof 由於公司研發環境物理隔絕,所以自己搭建了一個 maven 私服,以下是自己搭建私服過程中的一個記錄。 1.準備Maven私服相關文件 1.1 從 sonatype
Windows7下通過Nexus3.13搭建Maven私服
前在一個公司使用過Nexus,那時還不知道這個是個什麼玩意,最近公司要搭建自己的maven庫,才知道以前用的東西叫nexus,日企的鍋,我不背~。~。 本教程基於win7和Nexus3.13版本,因為nexus2.x版本安裝下可能會有不同,不做其他解釋。 1.下載安裝Nexus 下載地址
Java 在Linux下使用nexus3搭建Maven私服並且使用Gradle進行jar包上傳以及依賴下載
今天我們來記錄一下如何通過Nexus3搭建Maven私服以及如何通過Gradle進行Jar包的上傳以及依賴使用 本人此次搭建教程使用的是Centos6.5,之前使用Centos7.3此安裝方法一樣適用,所以各版本的同學都可放心安裝。 1.Maven私服搭建 1.1