序文
コンポーネント化については、私たち全員がある程度理解しています。基本的に、一部の大規模なインターネットアプリでは、コンポーネント化が開発に使用されます。これは、インタビューの最優先事項でもあります。このコラムでは、プロジェクトの知識システム全体を、実際のプロジェクト。
次の図は、後で説明する必要がある実際のプロジェクトフレームワークです。
今日は、最初にプロジェクトフレームワークについて説明しません。コンポーネント化されたフレームワークプロジェクトへの道を開くために、Mavenプライベートサーバーを作成しましょう。
序章
maven
プライベートサーバーは、実際には部門、LANにウェアハウスをセットアップするためのものmaven
であり、LAN内のすべての開発者はウェアハウスを使用できます。
中央仓库
PS:プライベートサーバーに独自のローカルウェアハウスを追加することも、パッケージをプロキシすることもできます。結局のところ、ネットワークが貧弱な一部の環境では、中央ウェアハウスからデータを取得するのは時間のかかる操作です。
アドバンテージ
1.独自の外部帯域幅を節約します。
2.ビルドプロセスをスピードアップします
3.サードパーティコンポーネントを展開できます
4.安定性を向上させ、制御を強化します
5.中央倉庫の負荷を軽減します
Mavenプライベートサーバーを構築する方法
1. 官网下载
Mavenプライベートサーバーランチャー に移動しますnexus
:
2.ダウンロード後、構成後环境变量
:
コマンドラインで入力します。nexus /run
3.ネクサスが正常に開始した後:ブラウザに次のように入力します。
http://localhost:8081/
- 起動インターフェイスは次のとおりです。
sign in
右上隅のボタンをクリックします。
入力用户名和密码
:
ユーザー名とパスワードシステムは、どのディレクトリでプロンプトを表示します
4.ログインに成功した後:
- ナビゲーションバーの[設定]ボタン->[リポジトリ]をクリックして、リポジトリリストに入ります
- クリック
create Repository
して、新しいローカルエリアネットワークリポジトリを作成します。
Androidプロジェクト用に作成されたMavenリポジトリにmaven2を選択したため:
ここには3つのmaven2タイプのリポジトリがあります。
*hosted*
:ローカルLANプライベートサーバーは、公式倉庫と同様に、ローカルプライベートライブラリ機能を提供します
*proxy*
:他のウェアハウスをプロキシする機能を提供します。これは、このリポジトリがリモートウェアハウス(次のようなjcenter
google
リモートセントラルウェアハウスなど)をプロキシできることを示します。
*group*
:组合多个仓库为一个地址使用
这里我们选择
hosted
仓库即可,大家可以根据自己需求选取
1.输入仓库名称
2.设置maven类型:
*release*
:表示是一个该仓库存储的是一个release版本的第三方库
*snapshot*
:表示存储的是一个不稳定第三方库,需要进程去私服或者中央仓库拉数据:
<repositorys>
<repository>
<id>****</id>
<url>***</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>(always/ daliy/ interval/ never)</updatePolicy>
</snapshot>
</repository>
</repository>
updatePolicy
:表示更新的频率:
always
:每次都需要拉去 daliy
:表示每天需要拉取 interval
:按分钟拉取 nerver
:和release版本一样,不需要重复拉取
点击确定后就创建的一个maven私服:
点击该仓库就可以看到对应的url,这个url就是我们私服的地址。需要在项目中引用:
经过上面的步骤后,我们就搭建好了一个maven
私服,局域网内
用户都可以拉取使用
实战中maven私服接入:
1.第三方lib库的上传操作
使用as创建一个新的项目,在新建项目下创建一个lib库,命名为:lib_vedio:并在lib_vedio
的build.gradle
工程文件下面,引入maven
库:
实现uploadArchives
的task方法:这个方法用于上传lib库:
plugins {
id 'com.android.library'
id 'maven'
}
//上传的类库名称
def _artifactId = this.getName()
//类库版本
def pomVersionName = '1.0.1'
def pomName = this.getName()
//类库描述
def pomDescription = 'the vedio library for all project'
uploadArchives {
repositories {
mavenDeployer {
repository(url:NEXUS_REPOSITORY_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
pom.project {
name pomName
version pomVersionName
description pomDescription
artifactId _artifactId
groupId POM_GROUPID
packaging POM_PACKAGING
}
}
}
}
里面一些变量是在gradle.properties中设置的全局变量:
NEXUS_REPOSITORY_URL=http://localhost:8081/repository/anna_release/
POM_GROUPID=com.anna.android
POM_PACKAGING=aar
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123456
设置好后,执行uploadArchives
任务,这个时候我们本地的lib_vedio
库就会上传到我们之前搭建的maven
私服上:
这里因为我们上传了两个版本1.0.0和1.0.1
切记:
如果当前仓库选择的是release属性:则每次上传的版本不能一致,需要在原版本基础上增加
如果选择的是snapshot属性:则可以在不增加版本号的前提下,修改同一版本的代码并上传。
maven私服仓库的接入:
我们在项目的build.gradle
文件中引入maven库:
buildscript {
repositories {
google()
jcenter()
maven {
url = 'http://localhost:8081/repository/anna_release/'
credentials {
username = 'admin'
password = 'admin123456'
}
}
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.1"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven {
url = 'http://localhost:8081/repository/anna_release/'
credentials {
username = 'admin'
password = 'admin123456'
}
}
}
}
并在app模块引入lib库文件:
implementation 'com.anna.android:lib_video:1.0.1'
这样就可以在我们项目中愉快使用类库啦。
总结
Mavenリポジトリについては以上です。将来的には、コンポーネント化された開発における各コンポーネントのカプセル化機能と、コンポーネントの直接的な事前依存関係の分離、つまり、Alibabaのオープンソースフレームワークの使用方法と実装方法を紹介します。コンポーネントの個別のテスト。