一、安装 Nexus Maven 私服仓库
[root@localhost lib]# pwd
/usr/lib
[root@localhost lib]# tar zxvf nexus-3.28.1-01-unix.tar.gz解压出来的结果
drwxr-xr-x. 9 root root 4096 9月 14 07:50 nexus-3.28.1-01进入bin 目录之后 执行 ./nexus start
然后在浏览器上输入 http://192.168.0.74:8081/ 就可以看到nexus 已经启动了
登录默认账户/密码 admin/admin123
二、创建仓库并使用依赖
1. 点击齿轮,就会看到已经创建好的仓库列表,我们需要创建自己的仓库,点击 Create repository
2. 选择 mavne hosted
3. Name 可以任意,我们这里写 imooc-snapshot, Version policy 我们选择 Snapshot
4. 点击Create repository, 我们就可以在仓库列表上发现我们创建好的仓库
5. 点击 copy 按钮,就可以获取仓库的地址
6. 基于同样的步骤,我们创建好 imooc-release 仓库
7. nexus 还有其他命令可以学习,这里看下
[root@localhost bin]# ./nexus -h
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Usage: ./nexus {start|stop|run|run-redirect|status|restart|force-reload}
[root@localhost bin]# ./nexus status
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
nexus is running.
[root@localhost bin]#
8. 我们现在已经创建好 imooc-snapshot 和 imooc-release 仓库,准备开始创建Android Library。
9. 创建 名为 lib_music 的 Android Library,并编写相关代码
package com.luckyboy.music;
public interface IPlayer {
void prepare();
void setDataSource(String url);
void play();
void pause();
void stop();
void release();
}
package com.luckyboy.music;
import android.util.Log;
public class MusicPlayer implements IPlayer{
private static final String TAG = "MusicPlayer";
@Override
public void prepare() {
Log.d(TAG, "prepare: ");
}
@Override
public void setDataSource(String url) {
Log.d(TAG, "setDataSource: ");
}
@Override
public void play() {
Log.d(TAG, "play: ");
}
@Override
public void pause() {
Log.d(TAG, "pause: ");
}
@Override
public void stop() {
Log.d(TAG, "stop: ");
}
@Override
public void release() {
Log.d(TAG, "release: ");
}
}
10. 在创建完成AndroidLibrary之后,首先在 gradle.properties 文件配置参数
NEXUS_REPOSITORY_URL=http://192.168.0.74:8081/repository/imooc-snapshot/
POM_GROUPID=com.imooc.android
POM_PACKAGING=aar
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123
1. NEXUS_REPOSITORY_URL 是maven服务器的仓库地址
2. POM_GROUPID 是组的ID
3. POM_PACKAGING是打包的方式
4. NEXUS_USERNAME是Maven服务的访问账号名
5. NEXUS_PASSWORD是Maven服务器的访问账号名密码
11. 在 lib_music Android库的 build.gradle 文件中添加如下代码
apply plugin: 'com.android.library'
apply plugin: 'maven' //因为要上传Maven私服,所以需要有maven插件
def pomName = this.getName()
def pomVersion = '1.0.0-SNAPSHOT'
def pomDescription = 'the music library for all projects'
android {
compileSdkVersion 30
defaultConfig {
minSdkVersion 22
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
//只有配置了 maven 插件 才能使用uploadArchives
//注意:下面的内容千万不要写错,否则很难查清问题,一般有错都是拼写问题
uploadArchives {
repositories {
mavenDeployer {
repository(url: NEXUS_REPOSITORY_URL){
authentication(
userName: NEXUS_USERNAME,
password: NEXUS_PASSWORD
)
pom.project {
name pomName
version pomVersion
description pomDescription
artifactId pomVersion
groupId POM_GROUPID
packaging POM_PACKAGING
}
}
}
}
}
afterEvaluate { project->
println 'lib_music AfterEvaluate...'
}
12. 在AndroidStudio 右侧栏找到 uploadArchives Task,然后点击执行该任务
13. 在上传成功之后,在 maven 服务器就可以查找到上传的库,如下图右下角就是Gradle 依赖
14. 我们可以在本地尝试使用Gradle依赖来下载并使用 lib_music 的库,在项目的根目录build.gradle文件中做如下配置
buildscript {
repositories {
google()
jcenter()
mavenCentral()
//此处添加是为了添加插件
//添加自己创建的仓库地址
maven {
//拷贝粘贴对应的
url 'http://192.168.0.74:8081/repository/imooc-release/'
credentials{
username 'admin'
password 'admin123'
}
}
maven {
//拷贝粘贴对应的
url 'http://192.168.0.74:8081/repository/imooc-snapshot/'
credentials{
username 'admin'
password 'admin123'
}
}
}
dependencies {
//classpath "com.android.tools.build:gradle:4.2.1"
classpath "com.android.tools.build:gradle:3.1.2"
}
}
allprojects {
repositories {
google()
mavenCentral()
jcenter() // Warning: this repository is going to shut down soon
maven {
//拷贝粘贴对应的
url 'http://192.168.0.74:8081/repository/imooc-release/'
credentials{
username 'admin'
password 'admin123'
}
}
maven {
//拷贝粘贴对应的
url 'http://192.168.0.74:8081/repository/imooc-snapshot/'
credentials{
username 'admin'
password 'admin123'
}
}
//为源码工程提供依赖
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
15. 修改 app/build.gradle文件中的 lib_music 的依赖
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
//implementation project(':lib_music')
implementation 'com.imooc.android:1.0.0-SNAPSHOT:1.0.0-20210914.114647-1'
}
16. 查看是否添加依赖正常,如下可以看到添加成功