搭建局域网Maven私服并结合Android Studio实现代码复用

 

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26585943/article/details/79771313

每一种技术,每一个框架都不是凭空产生,都是为了解决特定需求.因此使用什么技术取决于我们的需求,作为一个研发人员,我们不仅仅要懂得编码,更要有洞察真实需求的能力. 
首先介绍一下我们公司的现状:我们公司有很多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私服,自己使用,提高效率。当然我们也可以,建立一个代理仓库去代理公司的仓库,然后可以共用一些“轮子”。

参考文档: 
AndroidStudio使用进阶二:搭建自己的maven私服,并使用Gradle统一依赖管理 
Android Studio上使用Nexus搭建Maven私服并上传JCenter 
自建私有 Maven 仓库 
Maven三种仓库的配置 
Android studio Maven仓库使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值