如何解决多模块 gradle 项目 - 在父项下对子项目进行分组
我一直在尝试创建一个多模块 gradle 项目,除了其他一些链接之外,我还提到了这些链接
- https://docs.gradle.org/current/userguide/multi_project_builds.html
- https://docs.gradle.org/current/userguide/intro_multi_project_builds.html
我能够使用根级 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 举报,一经查实,本站将立刻删除。