Gradle 额外属性在子项目中定义的自定义任务中不可见

2024-04-09

我正在尝试在多个 Gradle 任务之间重用通用逻辑,类似于中建议的内容这个答案 https://stackoverflow.com/a/13072481,但我遇到了额外项目属性不可见的问题。

归根结底,问题就在这里。假设我有一个根 Gradle 构建脚本,build.gradle设置额外的项目属性,

project.ext.myProp = 'myValue'

我有一个子项目定义在settings.gradle,

include 'subproject'

并且子项目定义并使用引用该额外项目属性的自定义任务,

class CustomTask extends DefaultTask {
    CustomTask() {
        doFirst {
            println project.ext.myProp
        }
    }
}

task custom(type: CustomTask) {
    println 'custom task'
}

执行这个给我这个:

FAILURE: Build failed with an exception.
...
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':subproject'.
...
Caused by: org.gradle.api.tasks.TaskInstantiationException: Could not create task of type 'CustomTask'.
...
Caused by: groovy.lang.MissingPropertyException: cannot get property 'myProp' on extra properties extension as it does not exist
...

BUILD FAILED

请注意,如果满足以下条件,这似乎有效:

  • 自定义任务在根项目中与额外属性一起定义
  • 如果您使用动态属性而不是额外的属性,但这些属性已被弃用

读取名为的额外属性的推荐语法foo在构建脚本中是foo or project.foo(而不是ext.foo),这还将搜索父项目的(额外)属性。编辑:在任务类中,您可以使用project.foo.

需要注意的是,额外的属性仅适用于构建脚本中的临时脚本;任务类和插件应该not使用它们。任务类根本不应该触及 Gradle 对象模型;相反,它应该声明属性(以及,如果需要的话,方法),允许构建脚本和/或插件为其提供所需的所有信息。这使得理解、重用和记录任务类变得更容易,并且可以通过以下方式声明输入和输出:@Input... and @Output...注释。

PS:而不是打电话doFirst在构造函数中,任务类通常有一个带有注释的方法@TaskAction.

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

Gradle 额外属性在子项目中定义的自定义任务中不可见 的相关文章

  • Spring Boot如何读取jar外部的属性文件

    在我的目标文件夹中 有 2 个文件夹 lib 和 conf 所有的属性文件都放在conf文件夹中 jar放在lib Folder中 在 Spring Boot 之前 我们在 spring xml 中使用以下配置来使用 value
  • 使用 @abstractproperty 和 @abstractmethod 实现/覆盖的实际差异

    考虑一个抽象基类 它具有您希望每个后续子类重写的函数 使用 abc 模块和 ABCMeta 装饰有 abstractproperty or abstractmethod实际上强制子类 开发人员实现创建装饰器指定的函数类型 根据我的实验 您可
  • WPF 图像控件源绑定

    我是 WPF 和 C 的新手 我尝试实现以下功能 但在多次尝试后失败了 谁能帮我吗 我有一个图像控件
  • 所有任务完成后继续任务

    在某些类中 我想使用 Task 异步加载 2 个集合并停止 busyindicator 我尝试这样的事情 var uiScheduler TaskScheduler FromCurrentSynchronizationContext Wai
  • Intellij Idea:导入Gradle项目-尚未定义JAVA_HOME

    Intellij 理念 14 1 4 Mac OS X Yosemite 10 10 3 及更高版本 从 IDE Import Project gt Chosen directory to import gt Import project
  • 在特定时间启动应用程序

    我想知道是否有可能 以及如何 在特定时间启动我的应用程序 就像在特定时间响起的闹钟一样 假设我希望我的应用程序在早上 8 点启动 这可行吗 您可以使用 AlarmManager 来完成此操作 这是一个简短的示例 首先你需要设置闹钟 Alar
  • 如何在android studio中使用maven

    我想用底部栏 https github com roughike BottomBar我的项目中的库 当我添加正确的gradle命令在build gradle文件和sync 我收到此错误 Failed to resolve com rough
  • 访问注释中的属性值

    我想访问注释中的属性值 作为属性的值 对于前 在我的属性文件中 我有一个条目表达式 3 10 在我的 Scheduler 类中 我使用注释 Scheduled cron VALUE 我想从表达式键对应的属性文件中读取这个值 尝试这样做 Va
  • Ionic Cordova Build Android 未找到已安装的构建工具

    我在 Ubuntu 16 04 上的 Android 上构建 ionic 应用程序时遇到问题 这是我为了实现这一目标所做的一步 下载Android Studio 下载Android SDK 在 bashrc 和 bash profile 中
  • 元标记内的属性 property="og:title" 是什么?

    我有网站源代码的摘录 这是做什么的属性属性代表什么 其目的是什么 og title是开放图元标签之一 og 属性定义社交图中的对象 例如 Facebook 使用它们 og title代表对象的标题 因为它应该出现在图表中 请参阅此处了解更多
  • 无需测试即可构建 Gradle

    我想执行gradle build不执行单元测试 我试过 gradle Dskip tests build 这似乎没有什么作用 我还可以使用其他命令吗 您应该使用 x排除任何任务的命令行参数 Try gradle build x test U
  • 春季启动大战

    我倾向于在开发过程中使用可运行的 JAR 但我需要 WAR 来进行部署 我已经关注了this http spring io guides gs convert jar to war 有关从 JAR 转换为 WAR Spring Boot G
  • C# WPF 如何动态设置属性设置方法?

    我一直在四处寻找 但似乎找不到我要找的东西 所以我会在这里尝试一下 情况 我有 MainWindow 和 MainWindowData 类 MainWindowData 中只有使用 UpdateGUI 属性定义的公共属性 public cl
  • 使用 Gradle 运行单元测试时,最大堆大小在哪里设置?

    我有一个失败的 OOM 单元测试 并想知道为什么我需要手动允许更大的maxHeapSize像这样 test maxHeapSize 4G 我认为最大堆没有上限 并且在 gradle api 源中找不到任何东西来证明我错了 但是 运行 gra
  • 如何将 openapi-generator 中的客户端包含在 gradle java 应用程序中?

    我想创建一个 gradle java 应用程序 它从 openAPI 规范文件生成客户端并使用该客户端 所以我创建了一个java应用程序gradle init 类型 应用程序 语言 Java DSL groovy 测试框架 Junit Ju
  • AAR 可以包含传递依赖吗? [复制]

    这个问题在这里已经有答案了 现在我有一个库项目 比如项目 Foo 它依赖于像 OkHttp 这样的库 现在 Foo 有一个 Maven 构建步骤 可以生成 AAR 并将其推送到公共位置 现在假设我有项目 B 我们将其称为 Bar Bar是一
  • 读取文件并获取 key=value 而不使用 java.util.Properties

    我正在构建一个 RMI 游戏 客户端将加载一个包含一些键和值的文件 这些键和值将用于多个不同的对象 它是一个保存游戏文件 但我不能为此使用 java util Properties 它符合规范 我必须读取整个文件并忽略注释行和与某些类不相关
  • 为什么 gradle Exec 任务不运行我的命令?

    我已经阅读了 stackoverflow 和 gradle 表单 但我仍然感到困惑 这里的最终目标是 在我复制一些文件后 我想设置可写标志 因为 复制 不喜欢覆盖 nix 上的只读文件 呵呵 也不能强迫它这样做这样做 哼 这是我所拥有的概要
  • 适用于多应用项目的 Grunt 和 requirejs 优化器

    我在让 Grunt 对具有以下结构的项目执行 requirejs 优化时遇到问题 static js apps app js dash js news js many more app files build collections lib
  • ASP.NET Web API 客户端 ProgressMessageHandler Post 任务卡在 WinForm 应用程序中

    我在用着HttpClient and ProgressMessageHandler来自MS ASP NET Web API 客户端库 http nuget org packages Microsoft AspNet WebApi Clien

随机推荐

  • session.clear() 在 Hibernate 中如何工作

    我参考了很多文章 但我仍然不清楚什么session clear在休眠状态下执行 据我目前了解到的情况来看 当我们使用批量保存 更新时如下图 Session session SessionFactory openSession Transac
  • 由此可以得出 lambda 表达式吗?

    I know from f in list where f bar someVar select f 可以写成 list Where f gt f bar someVar 是否可以创建类似的表达式 from f in foo from b
  • 对对象列表进行排序的最简单方法

    我有一个 A 类型的对象列表 在第一次迭代中 我为每个对象分配一个双精度值 0 目前 我使用一个包装类来存储对象及其 x 值来制作可比较的列表 Scala 是否提供了一种数据类型 允许我执行以下操作 var result new Sorte
  • 附加到条形码应用程序中多个按钮的侦听器中出现异常

    好的 我正在开发一款内部条形码扫描仪 供我的公司在移动计算机和设备时使用 经过一番尝试和错误后 我目前几乎已经通过 Intent 设置了 Zxing 条码扫描仪 这就是我正在尝试做的事情 旁边三个EditText我有三个领域ImageBut
  • android AsyncTask xml解析

    我尝试在 AsyncTask 中解析一个大的 xml 文档 FeinstaubActivity 启动 但我只看到黑屏 然后返回到 RSSReaderActivity 从我启动另一个 Activity 的地方开始 Log DEBUG Sntp
  • 如何在gradle java构建脚本中访问环境变量

    如何在 gradle java 构建脚本中访问环境变量 用户级别或系统级别 我是 gradle 新手 我正在尝试使用 gradle 构建我的项目 目前我已经硬编码了第三方 jar 的路径 如下面的脚本所示 repositories flat
  • 首先在子级的父级上关闭alertDialog Android removeView()

    我想关闭 关闭警报对话框 但是当我单击按钮时valider我遇到了这个错误 我不知道哪些视图给我带来了问题 即使我的视图中没有方法删除视图 layout or v java lang IllegalStateException The sp
  • Imagick PHP 扩展 -- Montage 有帮助吗?

    我在使用 Imagick PHP 扩展生成图像时遇到了一些问题 一切工作正常 除了我的以下 蒙太奇 有白色背景 因此我不能将其覆盖在其他东西之上 如何生成具有透明背景的蒙太奇 Montage Icons gt montageImage ne
  • 如何在多租户系统中的 RabbitMQ 中使队列私有/安全?

    我已阅读开始使用 http www rabbitmq com getstarted htmlRabbitMQ 提供的指南 甚至还贡献了第六个示例暴风雨 amqp https github com paolo losi stormed amq
  • 如何计算不在列表中的日期

    我有一个位于客户的两个日期 date1 date2 之间的数据框以及到达日期 date1 lt 2019 07 29 date2 lt 2019 08 08 clients lt data frame id c 1 10 arrive c
  • 在 Python 中使用多个列表的 For 循环[重复]

    这个问题在这里已经有答案了 我正在寻找解决我的问题的方法 目前我有两个元素列表 column width 3 3 6 8 4 4 4 4 fade 100 200 300 我想要实现的是创建 for 循环 它将给出以下输出 column 3
  • 随机生成密码 Rails 3.1

    为了开发一个新的网络应用程序 我的注册页面 仅限管理员 只需要一个电子邮件字段 问题是我对 Rails 完全陌生 所以即使是像这样的基础知识对我来说也非常困难 我使用 Railscast 270 创建了我的身份验证 它使用有安全密码方法 现
  • Java 中最快的循环同步是什么(ExecutorService、CyclicBarrier、X)?

    哪种 Java 同步结构可能提供最好的 并发 迭代处理场景的性能 像下面概述的那样固定数量的线程 实验后 我自己呆了一段时间 使用 ExecutorService 和 CyclicBarrier 并且 对结果有些惊讶 我会感激一些 专家建议
  • 比较对象 - 单独的侧列

    是否可以显示PowerShell的结果Compare Object在两列中显示参考对象与差异对象的差异 例如使用我当前的命令行 Compare Object Base Test Gives InputObject SideIndicator
  • 在电子邮件中嵌入图片

    我目前有一个程序 可以从列表中随机选择报价并通过电子邮件发送 我现在也尝试在电子邮件中嵌入图像 我遇到了一个问题 我可以附加电子邮件 但我的报价不再有效 我在网上研究过 但解决方案对我不起作用 请注意 我使用的是 Python 3 2 2
  • 发现循环依赖问题

    我正在设计一个系统 其中有两个模块 一个用于管理文件 另一个用于用户 对于某些逻辑运算 它们需要彼此提供的服务 每个模块都由一个单例表示 该单例实现一个相互提供一些服务的接口 并通过抽象工厂来提供它们 如下所示 public class U
  • 如何使 Pinia 商店热重载更改?

    import defineStore acceptHMRUpdate from pinia import v4 as uuidv4 from uuid export const useStoreNotes defineStore store
  • 解耦与 YAGNI

    他们矛盾吗 解耦是一件伟大但很难实现的事情 然而 在大多数应用程序中 我们并不真正需要它 所以我可以设计高度耦合的应用程序 它几乎不会改变任何明显的副作用 例如 你不能分离组件 单元测试是痛苦的 屁股 等 你怎么认为 您是否总是尝试解耦并处
  • 在python中添加小时到unix时间戳

    我需要在某个 UNIX 时间戳上添加 5 小时 就像游戏的开始和停止时间一样 所以我知道比赛的开始时间和持续时间 我需要设置结束时间 这如何在 python 中完成 UNIX 时间戳以秒为单位 end timestamp start tim
  • Gradle 额外属性在子项目中定义的自定义任务中不可见

    我正在尝试在多个 Gradle 任务之间重用通用逻辑 类似于中建议的内容这个答案 https stackoverflow com a 13072481 但我遇到了额外项目属性不可见的问题 归根结底 问题就在这里 假设我有一个根 Gradle