微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多模块 gradle 项目 - 在父项下对子项目进行分组

如何解决多模块 gradle 项目 - 在父项下对子项目进行分组

我一直在尝试创建一个多模块 gradle 项目,除了其他一些链接之外,我还提到了这些链接

我能够使用根级 gradle 包装器为所有模块和特定模块创建多个模块并执行多个命令,例如 ./gradlew :java-libs:payment-lib:build 有效。

我还将这些库发布到充当内部 maven 存储库的 nexus 存储库。 这是我的根 build.gradle 的样子:

apply plugin: 'base'

subprojects {
    apply plugin: 'java'
    apply plugin: 'maven-publish'

    publishing {
        publications {
            maven(MavenPublication) {
                artifact("build/libs/$project.name-$version" + ".jar") {
                    extension 'jar'
                }
            }
            mavenJava(MavenPublication) {
                from components.java
            }
        }

        repositories {
            maven {
                name 'nexus'
                url "<nexus_url>/repository/maven-snapshots/"
                credentials {
                    username nexusUsername
                    password nexusPassword
                }
            }
        }
    }
}

这使我能够将任何或所有模块从根 gradlew 发布到 nexus,而且我不必一次又一次地在每个模块中编写发布部分。

我想要达到的目标

截至目前,每个模块在 nexus 中都被视为一个单独的项目,具有自己的版本控制、自己的文件夹,并且当需要将其中 2 个模块导入到不同的项目中时,我需要包含 2 个不相关的语句彼此。

compile("com.something.payment-lib:0.3-SNAPSHOT")
compile("com.something.refund-lib:0.2-SNAPSHOT")

我一直在使用一些外部库,我可以在其中执行以下操作:

compile("org.apache.httpcomponents:httpclient:4.5.12"){
    exclude(module: 'commons-logging')
}

这表明多模块 gradle 项目中的所有模块都在一个org.apache.httpcomponents:httpclient 下,该组也有自己的版本。我可以在该组中包含/排除特定模块。
我尝试查看它的代码,但它使用的是 maven 并且配置看起来完全不同。

我也不知道即使我能够实现这样的分组,nexus 存储库中的文件夹结构会是什么样子。是否会有项目的文件夹,然后会有包含相应模块的 jar 的子文件夹?

解决方法

我认为您缺少的是对根 build.gradle 中子项目的声明依赖项。看看这里https://docs.gradle.org/current/userguide/declaring_dependencies_between_subprojects.html#declaring_dependencies_between_subprojects

添加

dependencies {
    api(project(":payment-lib"))
    api(project(":refund-lib"))
}

到根 build.gradle

应该允许您访问这两个模块,只需声明对根项目的依赖即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。