Gradle:“克隆”原始 jar 任务,为包含依赖项的 jar 创建新任务

2024-04-29

我想在我的项目中创建一个新任务,该任务使用我的项目的类文件和依赖项的类文件(也称为“shaded jar”或“fat jar”)创建一个 jar 存档。

Gradle Cookbook 提出的解决方案修改了 JavaPlugin 的标准 jar 任务:

jar {
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

但是,我想保留原始的 jar 任务,并为 shaeded jar 执行一个附加任务,即一个行为与 jar 任务完全相同的任务,但包含根据的附加文件

from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }

并且有另一个分类器(“阴影”)。

我尝试通过复制如下属性来接管 jar 任务的配置:

task shadedJar(type: Jar, dependsOn: configurations.compile) {
    dependencies = tasks.jar.taskDependencies
    source = tasks.jar.source
    manifest = tasks.jar.manifest
    includes = tasks.jar.includes
    classifier = 'shaded'

    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

但生成的任务不会接管“jar”的依赖关系,并且生成的 jar 不包含项目的类文件。此外,作为使用现有任务作为新任务模板的推荐方法,这种方法似乎很麻烦。

对于我的特定需求(单独的阴影 Jar 任务)以及“克隆”任务以将它们用作一般其他任务的模板,推荐的方法是什么?

(我目前仍在使用 Gradle 1.3,但也欢迎当前 Gradle 版本的解决方案)


没有内置的方法来克隆任务。不过,配置起来很容易fatJar任务包含相同的文件java插件的jar task:

task fatJar(type: Jar) {
    appendix = "fat"
    from sourceSets.main.output // that's it
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

任务自动装配将自动建立必要的任务依赖关系。

如果构建脚本继续自定义jar任务,您可以同时将自定义应用于这两个任务:

configure([jar, fatJar]) {
    version = "2.0"
    entryCompression = "STORED"
}

如果,不像在jar任务的情况下,您自己定义“模板”,您可以使用工厂方法“实例化”它:

def getMeAnotherOne(String name) {
    task(name, type: Jar) {
       version = "2.0"
       entryCompression = "STORED"
    }
}

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

Gradle:“克隆”原始 jar 任务,为包含依赖项的 jar 创建新任务 的相关文章

随机推荐

  • Azure:MissingRegistrationForLocation:未在位置“YYYY”中为资源类型“XXXX”注册订阅

    这最初是作为未找到订阅 https stackoverflow com questions 35071797 subscriptionnotfound the subscription resourcegroups could not be
  • 使用 Java 8 时间将时间从一个时区转换为另一时区

    我正在尝试将日期转换为GMT 5 30 to EST与java 8ZonedDateTime String inputDate 2015 04 30 13 00 DateTimeFormatter sourceFormatter DateT
  • 显式调用静态构造函数

    我想为下面的课程编写单元测试 如果名称不是 MyEntity 则 mgr 应为空 消极的单元测试 使用 Manager 私有访问器 我想将名称更改为 Test 以便 mgr 应该为空 然后会验证 mgr 值 为了实现这一点 我想显式调用静态
  • 使用 Web API 服务作为中央身份验证点

    我对身份管理领域非常陌生 所以请饶恕我 我想要做的是让多个客户端 MVC 应用程序与单个 Web API 应用程序通信 以对其用户进行身份验证 在该 Web API 应用程序中 我想使用 ASP NET Identity 与用户与数据库进行
  • .NET File.Exists 在 Windows\System32\Drivers 文件夹中不起作用?

    该过程已提升 并且我确保 VS 调试器中的路径是正确的 我使用 Environment GetFolderPath Environment SpecialFolder System 而不是对其进行硬编码 但 File Exists 仍然返回
  • 从 ASP.NET Core 2.1 应用程序中删除“Server”标头

    是否可以删除ServerASP NET Core 2 1 应用程序中的响应标头 在带有 IIS 10 的 Server 2016 上运行 我尝试将以下内容放入 web config 中
  • 线程/进程/任务之间有什么区别?

    线程 进程 任务之间有什么区别 Process 进程是正在执行的计算机程序的实例 它包含程序代码及其当前活动 根据操作系统 OS 进程可能由同时执行指令的多个执行线程组成 基于进程的多任务处理使您能够在使用文本编辑器的同时运行 Java 编
  • [“03C0”]如何匹配附件P中的语法?

    我正在编写一个工具来使用 2005 年附录 P 中提供的语法来解析 Ada 源文件 通过下面的代码 我知道 03C0 代表 希腊字母Pi 但它是合法的变量名吗 01 package Ada Numerics is 02 Pi constan
  • 如何使我的滚动到顶部按钮动画流畅

    我的页面上有一个滚动到顶部按钮 但是当我单击它时 它不会滚动到顶部 它只是直接带我到顶部 就像我加载了一个新页面一样 但我需要的是滚动动画 javascript window onscroll function scrollFunction
  • 如何修复 iOS 11 和 macOS V10.12 Safari 上损坏的变换原点?

    我正在尝试使用 svg 来实现 CSS 动画 我期望 2 个 svg 盒子正在旋转 旋转 transform origin center center 360度 看起来它在 Chrome 和 Firefox 上的表现符合我的预期 但在 ma
  • 如何修复“致命:无法创建工作树目录'WSL-Distribution-Switcher':没有这样的文件或目录”

    我目前正在尝试在我的笔记本电脑上安装 kali linux 但我陷入了这个错误 请帮我解决这个问题 谢谢 i typed cd Desktop cd Test Blank folder in Desktop git clone https
  • 使用 ImportXml 在 Google Sheets 中抓取图像

    我正在使用 Google Sheets 尝试从房地产网站上抓取图像 以将其显示在单元格中以及房产详细信息旁边 我已经能够使用一个简单的示例证明这是可能的 但是当我尝试制定 xpath 查询来抓取我需要的特定图像时 我不断收到错误 作为一个工
  • 重定向时需要 SSL 吗?

    我从一位我不擅长的客户那里继承了一种奇怪的情况 该客户端有 3 个域名 主要域名是 例如domain a com 他们还将domain b com 和domain c com 重定向到domain a com 所有域都位于同一服务器上 所以
  • Robotium 和系统对话框

    当我尝试与蓝牙设备配对时 会出现带有 PIN 码的系统确认对话框 有 取消 和 确定 按钮 但我无法使用 Robotium 单击它们 如何在 Robotium 中使用 Android 操作系统对话框 谢谢 这对我有用 solo clickO
  • Google Analytics 测量协议不起作用

    我想跟踪在不同环境中运行的应用程序 音隙构建 节点 webkit 应用程序 website 为了对所有人使用一种跟踪机制 我认为使用 测量协议 https developers google com analytics devguides
  • 如何格式化数字? [复制]

    这个问题在这里已经有答案了 我想使用 JavaScript 格式化数字 例如 10 gt 10 00 100 gt 100 00 1000 gt 1 000 00 10000 gt 10 000 00 100000 gt 100 000 0
  • 拆分为不同的换行符

    现在我正在做一个split在字符串上并假设用户的换行符是 r n像这样 string split r n 我想做的事分为两部分 r n要不就 n 那么正则表达式将如何分割其中的任何一个呢 你试过了吗 r n The 使得 r选修的 用法示例
  • 删除一行中逗号之前的所有内容

    我有多个文件 其中包含以下行 foo 123456 bar 654321 baz 098765 我想删除每行逗号之前 包括 的所有内容 输出将是 123456 654321 098765 在另一个问题上看到类似的内容后 我尝试使用以下内容
  • Autofac:解决对命名实例的特定依赖关系

    使用 Autofac 我想注册一个组件并指定要解析为命名实例的特定依赖项 我使用构造函数注入找到了如下示例 这几乎就是我想要的 builder Register c gt new ObjectContainer ConnectionStri
  • Gradle:“克隆”原始 jar 任务,为包含依赖项的 jar 创建新任务

    我想在我的项目中创建一个新任务 该任务使用我的项目的类文件和依赖项的类文件 也称为 shaded jar 或 fat jar 创建一个 jar 存档 Gradle Cookbook 提出的解决方案修改了 JavaPlugin 的标准 jar