gpt4 book ai didi

java - 依赖项未复制到 jar 中(在 Gradle 中)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:15 24 4
gpt4 key购买 nike

TL;DR 我希望模块的依赖项内置到它的 .jar 中,但它们似乎没有。

我正在使用 Gradle 构建项目。我有两个子项目,app(一个 Android 模块)和 tests(一个 Java 模块),由 IntelliJ 创建。

因为我想在 tests 的内容中使用 app 中定义的类,所以我添加了适当的依赖项。灵感来自 this answer ,我有以下设置:

应用程序/build.gradle:

...
task jarTask(type: Jar) {
baseName ="${project.archivesBaseName}"
from android.sourceSets.main.java
}

configurations {
jarConfiguration
}

artifacts {
jarConfiguration jarTask
}

测试/build.gradle

...
dependencies {
...
testCompile project(path: ':app', configuration: 'jarConfiguration')
}

但是,app 中的一个类导入了 org.json.JSONObject。由于这是由 Android SDK 提供的,app 可以很好地找到它 - 但是当我尝试运行测试时,我得到(在 :tests:compileTestJava 中)“package org. json 不存在”。但是,如果我将 tests/build.gradle 更新为

...
dependencies {
...
testCompile project(path: ':app', configuration: 'jarConfiguration')
testCompile 'org.json:json:20090211'
}

(参见 here)然后测试会正确运行。

这不是我所期望的 - 如果 .jar 不打包它的依赖项,那么依赖于该 .jar 的任何项目也必须显式依赖传递依赖项 - 这不会导致依赖项定义迅速增加?

最佳答案

我遇到了“fatJar”的概念 herehere ,这似乎是“具有依赖关系的 jar”的同义词 - 但将我的 app/build.gradle 更改为读取

...
task jarTask(type: Jar) {
baseName ="test-${project.archivesBaseName}"
from android.sourceSets.main.java
}

task fatJar(type: Jar) {
baseName = project.name + "-all"
from {configurations.compile.collect {it.isDirectory() ? it : zipTree(it)}}
with jarTask
}

configurations {
jarConfiguration
}

artifacts {
jarConfiguration fatJar
}

仍然报错package org.json does not exist。这似乎是因为 org.json 没有在 app/build.gradle 文件中作为依赖项被明确调用。使用以下 app/build.gradle,我的项目按预期构建并运行了测试:

...
dependencies {
...
compile 'org.json:json:20090211'
}

task jarTask(type: Jar) {
baseName ="${project.archivesBaseName}"
from android.sourceSets.main.java
}

task fatJar(type: Jar) {
baseName = project.name + "-all"
from {configurations.compile.collect {it.isDirectory() ? it : zipTree(it)}}
with jarTask
}

configurations {
jarConfiguration
}

artifacts {
jarConfiguration fatJar
}

(请注意,如果您只想要 fatJar 任务,您可以简单地设置 from files({configurations.compile.collect {it.isDirector() ? it : zipTree(it)}}, android.sourceSets。主.java)

关于java - 依赖项未复制到 jar 中(在 Gradle 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25095067/

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