我试图了解 Gradle 依赖配置,在深入研究一些文档(例如,https://docs.gradle.org/current/userguide/java_library_plugin.html)后,我留下了一堆相关的问题*:
在 Gradle 中,jar、工件、依赖项和模块之间有什么区别?有哪些非 jar 的工件、依赖项和模块的示例?不是模块的工件?ETC...
什么是可解析配置?我发现如果配置 x.canBeResolved 那么我可以调用 x.resolve 来获取一组 jar 路径,而 x.resolve 方法不会抛出错误(这就是将配置标记为消耗品的全部内容吗?)。但不是所有的配置集都是模块,所以我不应该能够看到它们是什么吗?如果是这样,怎么办?
什么是消耗品配置?将配置标记为“消耗品”允许您做什么/阻止您做什么?有哪些消耗品配置的好例子?如何利用可消耗/不可消耗的配置?
配置的哪些其他属性很重要以及为什么(例如,属性是否用于除变体之外的任何内容)?
什么是变体,它们是如何创建和使用的,以及为什么要创建/使用它们?(参见https://gradle.github.io/webinar-dep-mgmt-part-1/#/more-definitions)。
java和插件如何java-library利用配置的这些功能?特别是,api在幕后如何与配置进行不同的配置或处理implementation?这与可解析/可消耗有什么关系吗?
此时我还应该问哪些其他问题?
特别感谢具体的示例和代码。
*我意识到其中许多问题都可以单独提出,如果您对某个问题有一个好的答案(或链接),请分享。然而,我试图了解全局,所以我将它们放在一个标题下。另外,我怀疑如果没有其他问题的答案,我将无法理解某些问题的答案——例如 jars、工件、依赖项、模块——并且我正在努力减少问答延迟和一般问题困惑。
以下是您的一些问题的答案。
\nGradle 将这些东西称为“组件”。
\n首先我会回答一个不同的问题:Gradle 如何区分组件?
\n它使用称为“变体属性”的标志来实现这一点。简而言之,这些是字符串键值标志,描述诸如“Maven 坐标为org.junit.jupiter:junit-jupiter:5.8.1”和“该项目包含 Java 文件”之类的内容。
属性可以是任何东西。Gradle 内置了一些标准属性,或者您也可以创建自己的.
\n因此,要回答这个问题,jar、工件、依赖项和模块之间的区别取决于属性。
\n我将在这里引用文档:
\n\n\n配置至少有 3 个不同的角色:
\n\n
\n- \n
声明依赖关系
\n- \n
作为消费者,解决一组对文件的依赖关系
\n- \n
作为生产者,公开工件及其依赖项以供其他项目使用(此类消耗性配置通常代表生产者向其消费者提供的变体)
\n
文档中还有一个表格显示了组合。这是复制品:
\n| 配置角色 | 可以解决 | 可以食用 |
|---|---|---|
| 依赖桶 | 假\xe2\x9d\x8c | 假\xe2\x9d\x8c |
| 解决特定用途 | 真 \xe2\x9c\x85 | 假\xe2\x9d\x8c |
| 暴露给消费者 | 假\xe2\x9d\x8c | 真 \xe2\x9c\x85 |
| 旧版,不要使用\xe2\x80\x99t | 真 \xe2\x9c\x85 | 真 \xe2\x9c\x85 |
旁白:我一直发现“配置”是一个糟糕的词选择。对我来说,它更多地意味着“这是我想要应用于 Gradle 构建的设置”,而 Gradle 意味着它更像是“这是以某种方式组织的项目的集合”。
\n变体是通过在配置上设置不同的属性来创建的。它们由请求组件的消费者使用,并且具有兼容的属性。
\n这样想:您知道儿童形状分类盒玩具吗?有不同形状的木块:圆柱体、三角形、立方体、星形。还有一个带有类似形状孔的盒子。
\n这些块就是 Gradle 所说的模块。它们是 Gradle 项目请求或生成的依赖项。
\n这些块有描述它们的名称。正方形、矩形、圆形……这些都是 Gradle 属性。名称“正方形”可以描述该块,也可以描述该块切入的盒子中相应的孔。
\n有时形状彼此非常相似。也许一个矩形孔比另一个矩形孔稍高。这些都是变种。(这个类比在这个问题上有点不成立 - 但我希望你明白原则:“矩形”的属性仍然适用,但有一点发生了变化,使它成为一个变体矩形。)
\n有时方块有不同的颜色,但洞并不关心方块是红色、黄色还是蓝色。因此,可能存在消费者或生产者不关心的差异变体。
\n该盒子是“消耗品”配置。它消耗块,但仅消耗属性与盒子中孔的属性相匹配的块。我们可以查看盒子内部,找到所有匹配某些属性的模块。
\n“可解析”配置是孩子们玩耍、执行动作、尝试找到匹配的块。他们只能使用他们可以看到的块,但他们的计划不是继续保留这些块,而是将它们提供给消耗的盒子。
\n如果我们愿意,我们可以指导孩子“只寻找圆形块”。这就是我们将“属性”应用到孩子身上。因此,即使盒子可以接受的不仅仅是圆形块,它也只能得到圆形块,因为这就是孩子被指示要做的所有事情。
\nGradle 网站上有一个创建消费/生产配置的示例,但在 7.4 版本中被删除,因为有一个新的 JaCoCo 聚合插件。我认为这有点遗憾,因为该示例仍然与使用变体感知配置的项目之间共享输出相关。
\n幸运的是,它仍然可以直接使用,所以这里是链接:\n https://docs.gradle.org/7.3/samples/sample_jvm_multi_project_with_code_coverage.html
\n| 归档时间: |
|
| 查看次数: |
1505 次 |
| 最近记录: |