gpt4 book ai didi

gradle - 对子项目和依赖项进行评分

转载 作者:行者123 更新时间:2023-12-03 03:56:18 25 4
gpt4 key购买 nike

这绝对是一个初学者的 gradle 问题,但我无法让它发挥作用。

我有一个库和一个依赖于该库的应用程序。

.
/ library
/ application

我可以通过 gradle install 安装库在 ./library ,然后通过组/名称/版本让应用程序依赖于库,并通过 mavenLocal()获取库应用程序中的存储库 build.gradle ,然后在 application 中构建应用程序文件夹。那行得通。

但我想要一个项目,我可以有一个命令来构建应用程序,如果需要,也可以构建库(类似于 maven -am 标志)。

这是我现在拥有的,在父文件夹中, build.gradle :
subprojects {
apply plugin: "java"
repositories {
mavenCentral()
}
}

project(':application') {
dependencies {
compile project(':library')
}
}

在同一个文件夹中,我有 settings.gradle :
include ':library', ':application'

同样,如果我进入库文件夹并运行 gradle install , 有用。我在我的 ~/.m2 中得到了这个神器.

但是现在使用我描述的配置,如果我进入根文件夹并运行 gradle shadowJar .. 并且 shadowJar 任务仅存在于 application ,然后 gradle 尝试编译库但失败,显然是因为它没有获取库依赖项。
* What went wrong:
Execution failed for task ':library:compileJava'.
> Compilation failed; see the compiler error output for details.

例如,错误是这样的:

Task :library:compileJava FAILED .../DateTimeAdapter.java:5: error: package javax.xml.bind.annotation.adapters does not exist import javax.xml.bind.annotation.adapters.XmlAdapter;



果然这些是 library/build.gradle => 中的依赖项
    implementation 'com.fasterxml.jackson.core:jackson-core:2.8.8'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.8.8'

所以我的问题是如何指定应用程序对库的依赖关系,以便我可以运行单个命令并在需要时让 maven 构建库,然后构建应用程序。我以为我所做的会通过第一部分,但是它失败了,显然是由于库的传递依赖。我实际上希望在那之后我需要处理第二部分,即如何在应用程序 build.json 中指定依赖项。我可能不得不从指定 maven 组/名称/版本坐标切换到项目名称,但我还没有做到这一点。

我绝对不想在根 gradle 文件中列出库依赖项:我希望库处理它的依赖项,并应用它的依赖项,我想保持根 gradle 文件很小。

最佳答案

application无法查看 library 的依赖关系因为您已将 Jackson 依赖项声明为 实现 library 的详细信息.

你打算做的是暴露你的library它的依赖关系为 接口(interface) 为消费者。

中声明的依赖关系实现 配置可以被认为是“私有(private)的”,这意味着您的 library 的消费者不应访问使用这些依赖项的方法/类,否则它们将面临像您一样的错误。 接口(interface) 基本相反实现 .

接口(interface) 可通过 java-library 获得配置插入。

您要实现的目标的完整工作示例(Kotlin DSL):

├── application
│   └── build.gradle.kts
├── build.gradle.kts
├── gradle
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── library
│   └── build.gradle.kts
└── settings.gradle.kts

根项目 build.gradle.kts :
subprojects {
apply {
plugin("java-library")
}

repositories {
jcenter()
}
}
settings.gradle.kts :
rootProject.name = "example-proj"

include("application")
include("library")

图书馆 build.gradle.kts :
dependencies {
api("com.fasterxml.jackson.core:jackson-core:2.10.0")
api("com.fasterxml.jackson.core:jackson-databind:2.10.0")
}

申请 build.gradle.kts :
dependencies {
implementation(project(":library"))

}

关于gradle - 对子项目和依赖项进行评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58764472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com