当前位置: 首页 > 知识库问答 >
问题:

如何在具有多个模块的库(sdk)中指定依赖关系

申屠泉
2023-03-14

我有一个具有多个模块的库项目,因此我将其依赖项集中在项目级build.gradle中,如下所示

ext {
    compileSdkVersion = 23
    minSdkVersion = 9
    targetSdkVersion = 24
    buildToolsVersion = '23.0.3'
    junit = 'junit:junit:4.12'
    mockito = 'org.mockito:mockito-core:1.10.19'
    testRunner = 'com.android.support.test:runner:0.5'
    appcompat = 'com.android.support:appcompat-v7:24.1.0'
    retrofit2 = 'com.squareup.retrofit2:retrofit:2.1.0'
    gsonConverter = 'com.squareup.retrofit2:converter-gson:2.1.0'
    httpLogInterceptor = 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    design = 'com.android.support:design:24.1.0'
    cardview = 'com.android.support:cardview-v7:24.1.1'
    universalImageLoader = 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
}

我在模块中使用它作为

dependencies {
    compile project(':module1')
    compile rootProject.appcompat
    compile rootProject.retrofit2
    compile rootProject.gsonConverter
    compile rootProject.httpLogInterceptor
    compile rootProject.design
    compile rootProject.cardview
    compile rootProject.universalImageLoader
    testCompile rootProject.junit
    testCompile rootProject.mockito
    androidTestCompile rootProject.junit
    androidTestCompile rootProject.testRunner
}

在我的示例应用程序(同一项目中的另一个模块)中,我将库模块作为编译项目(':module2')包含在内

我试着像这样包含依赖关系

compile ('com.github.xxx:module2:1.0.0@aar') {
    transitive=true
}

compile 'com.github.xxx:module2:1.0.0'

compile ('com.github.xxx:module2:1.0.0') {
    transitive=true
}

我已经试过了

如何在aar库中指定依赖项?

AAR可以包括传递依赖项吗?

如果我错过了任何信息,请发表评论

提前致谢

共有1个答案

韩寂离
2023-03-14

回答我自己的问题,这样对任何人都可能有用。谢谢@Gabriele Mariotti,我检查了生成的pom,因为没有可用的依赖项标签,所以搜索

但是他们在< code>publications中添加了它,在我的例子中,一个模块依赖于另一个尚未发布的模块,这种依赖关系在module2的build.gradle中被称为< code > compile project(':module 1 '),它生成了不包含名称、描述等的新pom。,出版物文件夹中的标记。

所以我把它添加到之前的pom字段创建区域

以下是gradle-mvn-push.gradle的更新部分

if (project.getPlugins().hasPlugin('com.android.application') ||
          project.getPlugins().hasPlugin('com.android.library')) {
    task install(type: Upload, dependsOn: assemble) {
      repositories.mavenInstaller {
        configuration = configurations.archives

        pom.groupId = GROUP
        pom.artifactId = POM_ARTIFACT_ID
        pom.version = VERSION_NAME

        pom.project {
          name POM_NAME
          packaging POM_PACKAGING
          description POM_DESCRIPTION
          url POM_URL

          scm {
            url POM_SCM_URL
            connection POM_SCM_CONNECTION
            developerConnection POM_SCM_DEV_CONNECTION
          }

          licenses {
            license {
              name POM_LICENCE_NAME
              url POM_LICENCE_URL
              distribution POM_LICENCE_DIST
            }
          }

          developers {
            developer {
              id pom_developer_id
              name pom_developer_name
            }
          }

        }

        //Updated part which adds dependencies in pom
        pom.withXml {
          def dependenciesNode = asNode().appendNode('dependencies')

          //Iterate over the compile dependencies (we don't want the test ones), adding a <dependency> node for each
          configurations.compile.allDependencies.each {
            def dependencyNode = dependenciesNode.appendNode('dependency')
            dependencyNode.appendNode('groupId', it.group)
            dependencyNode.appendNode('artifactId', it.name)
            dependencyNode.appendNode('version', it.version)
          }
        }
      }
    }
 类似资料:
  • 如何在node.js中卸载与dev相关的npm模块?

  • 在使用Maven一段时间后,我对Maven在构建体系结构中带来的许多特性感到兴奋,尤其是依赖项管理。然而,我一次又一次地遇到了一个问题--Maven如何解决多模块项目之间的依赖关系。我想知道这是否是当前Maven实现的大缺陷和/或是否有任何令人满意的解决方案。 假设我有一个多模块的Maven项目。父pom包含三个模块--moduleA(jar)、moduleB(jar)和moduleC(war)。

  • 我有一个带有多个模块的gradle(Android)库,有些模块依赖于其他模块(与这里的答案非常相似)https://stackoverflow.com/a/41761846/906362) 这对开发很有用,因为我可以对任何模块进行更改,并看到它们反映在其他模块上。但是要将构建发布到,我需要依赖项作为它们的在线版本。比如: 因此,当它被添加到项目中时,它正确地引用了在上找到的版本,而不是在使用时添

  • 问题内容: 我有一个简单的节点应用程序,它对github上另一个应用程序具有单一依赖性。使用可以很好地安装依赖项,但是当我尝试在其中安装某些东西时,它说不可用。例如,github应用程序将Mongoose安装为依赖项。我认为该父应用程序可以访问该模块,因为它位于子模块中: 结构看起来像这样: 我是否只需要在父级应用程序中同时包含猫鼬作为依赖项,还是可以通过子级方式访问该模块? 问题答案: 我是否只

  • 我有一个多模块Maven项目,其中包含子模块ModuleA和ModuleB等。ModuleA将ModuleB列为依赖项。但是,当仅构建模块A时,Maven不会解决模块B的依赖关系-导致。我想避免构建整个父级以使构建更快。目前我发现让它工作的唯一方法是使用exec插件和脚本,将父项目称为“ModuleB, ModuleA”,这意味着我必须在每次依赖项更改时更改脚本(例如添加ModuleC)。 是否有