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

2023-12-10

TL;DR 我希望将模块的依赖项内置到其 .jar 中,但事实似乎并非如此。

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

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

应用程序/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)“org.json 包不存在”。但是,如果我将tests/build.gradle更新为

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

(See here)然后测试就可以正确运行。

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


我遇到了“fatJar”的概念here and here,这似乎是“具有依赖项的 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.main.java)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

依赖项未复制到 jar 中(在 Gradle 中) 的相关文章

随机推荐

  • 如何从仅标头库构建静态库

    我正在尝试构建项目的静态库stb 所以我可以将它链接到另一个项目 不是用 C C 编写的 我已经创建了 CMakeLists txt 文件来使用 CMake 构建它 但是构建的静态库文件是空的 我怀疑这是因为机顶盒似乎是仅标头图书馆 我尝试
  • 将函数应用于 DataFrame 中的每个单元格,该单元格取决于 pandas 中的列名称

    如何将函数应用于 DataFrame 中取决于列名称的每个单元格 我知道pandas DataFrame applymap但它似乎不允许依赖于列名称 import numpy as np import pandas as pd np ran
  • ggplot2 中稳健的标准错误

    我想用 ggplot2 绘制一个模型 我估计了一个稳健的方差 协方差矩阵 我想在估计置信区间时使用它 我可以告诉 ggplot2 使用我的 VCOV 或者 我可以以某种方式强制 Predict lm 使用我的 VCOV 矩阵吗 一个虚拟示例
  • 查找多个字符串匹配的算法

    我正在寻找一种有效算法的建议 用于在大量文本中查找所有匹配项 要搜索的术语将包含在列表中 并且可以有 1000 多种可能性 搜索词可以是 1 个或多个单词 显然 我可以多次遍历文本并与每个搜索词进行比较 效率不太高 我考虑过对搜索词进行排序
  • Rails 3.1 中的图像 - 转向生产

    我的文章有图片 我将图像放在 app assests images 中 并将它们的位置存储在数据库的字段中 然后我可以使用以下方式显示它们 但是当我转移到生产服务器时 我的图像都没有显示 服务器正在寻找 asset blank d5dd6e
  • 将文本添加到 grid.table 图中

    我最近开始使用grid table函数从gridExtra包将表格数据转换为 png 图像文件以在网络上使用 到目前为止 我对它很满意 因为它默认产生非常漂亮的输出 有点像ggplot2对于桌子 就像那个人asked对于这个问题 我希望看到
  • PHP URL 编码保留无效的 url 字符

    我需要将 url 无效字符替换为 url 有效字符 然后再次将其转换回来 这是一个带有类似 url 的搜索页面http my site search this is a search 搜索表单 POSTS 然后用户重定向到新的 url Ph
  • 从 IIS 部署恢复 ASP.NET 项目

    我是 ASP NET Web 开发的真正新手 具有 Java 背景 一位朋友有一个在 IIS 上运行的 ASP NET 3 0 部署 他找不到在 Visual Studio 2008 中创建的原始项目文件 并请求我帮助他 是否可以从 IIS
  • 我应该如何处理 WP7 的 Bing 地图控件中图钉上的单击事件

    我要添加模板
  • MPMoviePlayerController 在后台播放音频流

    当应用程序进入后台时 我在播放音频流时遇到麻烦 我使用代码来启动流 NSURL mediaURL NSURL URLWithString http url to my stream MPMoviePlayerController mp MP
  • 可靠地重定向到 symfony2 中上次访问的页面

    我将 FosUserBundle 登录嵌入到我的主页中 我已经覆盖了 fos 的安全控制器并更改了 renderLogin 操作 我必须放置一个if使用以下条件重定向到上次访问的页面referers that was一切都很好 但我现在意识
  • EF6 不延迟加载导航属性

    我遇到了 EF6 延迟加载问题 我搜索了 StackOverflow 但我发现的其他问题不适合我的情况 我正在使用virtual关键字和我的课程是public LazyLoadingEnabled and ProxyCreationEnab
  • 计算校验和时出现问题:将 int 转换为signed int32

    我需要将以下 c 代码 计算文件的校验和 转换为 python 我已经用python编写了相应的代码 但结果与c版本不匹配 问题在于 只要发生溢出 Python 就会自动将 int 提升为 long 这会导致错误的校验和 知道如何克服这个问
  • 水晶报告中的线程被中止异常

    将报告导出为 PDF 时 我们收到 线程正在中止 异常 我们使用以下代码将报告导出为 PDF Response Buffer true Response ClearContent Response ClearHeaders Response
  • 如何正确使用AES_ENCRYPT?

    我正在尝试使用 AES 加密 AES 加密在 MySQL 中 用于用户密码 但我遇到了一堆不同的问题 这是我用来将新用户存储到数据库中的 SQL 查询 INSERT INTO user VALUES 15 John Doe 123 Fake
  • Python Mysql TypeError:“NoneType”对象不可下标

    conn MySQLdb connect host localhost user root passwd xxxx db xxxxx cursor conn cursor cursor execute SELECT FROM pin WHE
  • 如何制作一个图像按钮,当鼠标悬停在按钮WPF上时改变图像?

    我正在尝试制作一个图像按钮 当鼠标悬停在按钮上时会更改图像 我尝试了一些方法 这是我尝试的最后一件事 但它不起作用
  • 将 system.collections.bitarray 划分为每个 32 位的子位数组

    我在网上搜索过但没有得到我需要的东西 我有一个大小为 15 936 的位数组 我需要将此位数组划分为位数组列表 每个位数组有 32 位 15936 32 498 位数组列表 无法准确找到如何划分位数组 请帮忙 Thanks 第一个您想要 3
  • SQL 确定多个日期范围 (SQL Server 2000)

    我有一个表 其中包含一个ID and a Date为一个事件 每一行代表一个日期 我正在尝试确定连续的日期范围并合并输出以显示ID StartDate EndDate ID Date 200236 2011 01 02 00 00 00 0
  • 依赖项未复制到 jar 中(在 Gradle 中)

    TL DR 我希望将模块的依赖项内置到其 jar 中 但事实似乎并非如此 我正在使用 Gradle 构建一个项目 我有两个子项目 app Android 模块 和tests Java 模块 由 IntelliJ 创建 因为我想使用中定义的类