1. 程式人生 > >搭建區域網Maven私服並結合Android Studio實現程式碼複用

搭建區域網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

是我的zip解壓路徑,注意斜槓方向。其他的配置項我還沒有研究,可自行研究下。

-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
圖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,dockermaven專案整合

目錄 實現功能: 通過nexus管理jar包 通過nexus管理docker映象 開發端機器遠端打包上傳jar 通過maven-docker外掛編譯為docker映象,部署到測試環境,並上傳的nexus私服 搭建環境 ubantu17

關於android studiomaven搭建

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搭建Androidmaven

前言 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搭建mavenjar包上傳和下載

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