实施Maven项目的内部依赖关系

时间:2019-02-12 06:09:44

标签: android maven gradle

我已经创建了一个库,可以在我们的大多数项目中使用。到目前为止,我们一直在将Github与Jitpack一起使用,但我们的Jitpack订阅已过期,我们已经找到了一种将项目上传到其他地方的替代方法。我们正在使用 myMavenRepo 。我可以从this answer上传项目。但是,存在一个问题(没有答案来包含项目本身的依赖关系。)

该项目包含依赖项,并且当我们将该项目添加到另一个项目时,不会添加依赖项。我想弄清楚该怎么做。

这是我的代码:

apply plugin: 'com.android.library'
apply plugin: 'maven-publish'

task sourceJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier "sources"
}

publishing {
    publications {
        Repo(MavenPublication) {
            groupId 'com.example.repo'
            artifactId 'Repo'
            version '1.3.7'
            artifact(sourceJar)
            artifact("$buildDir/outputs/aar/repo-release.aar")
        }
    }
    repositories {
        maven {
            url "https://mymavenrepo.com/repo/repo_url/"
        }
    }
}

android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 137
        versionName "1.3.7"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation ("com.kochava.base:tracker:3.5.0") {
        exclude group: "com.android.support"
    }
    implementation ("com.google.firebase:firebase-core:16.0.6") {
        exclude group: "com.android.support"
    }
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    // Required: Install Referrer (If publishing to Google Play)
    implementation 'com.android.installreferrer:installreferrer:1.0'

    // Optional: Instant App Status Collection
    implementation 'com.google.android.instantapps:instantapps:1.1.0'

    // Required for Flurry Analytics integration
    implementation 'com.flurry.android:analytics:11.4.0@aar'

    // Crashlytics implementation.
    implementation('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
        transitive = true
    }
}

发布过程是使用./gradlew clean build publish(我正在使用ubuntu)进行的,发布成功。从存储库的读取端来看,我们是这样实现的(将Maven URL放入allprojects部分之后):

implementation 'com.example.repo:Repo:1.3.7'

虽然添加了项目本身,但未添加内部依赖项,例如Crashlytics,Flurry,Firebase Core等。我应该怎么做才能使该库也实现自己的依赖关系?谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

所有依赖项都在implementation配置中声明。这意味着它们不会作为您的库API的一部分公开。它们不是 compile 时间依赖性。

这将反映在已发布的Maven POM中,它们将出现在Maven runtime范围内。 因此,对于消费者而言,它们只会添加到 runtime 类路径中,而不是编译路径中。

如果希望库的依赖项在使用者的编译类路径上直接可见,则需要将它们添加到api配置中。因为这将使它们暴露于Maven compile范围,并且对使用者的编译类路径可见。