我正在尝试理解Gradle 文档中关于版本目录的“类型安全访问器”的概念。文档指出,Gradle 从目录中生成类型安全访问器,然后在添加依赖项时启用 IDE 自动完成。
但是,我对以下几点感到有点困惑:
定义:在这种情况下类型安全访问器到底是什么?
使用时间:这些访问器是作为编译时数据生成的,还是主要由 IDE 使用来提供自动完成建议?
在依赖管理中的作用:类型安全访问器如何与依赖管理交互?例如,与手动输入依赖字符串相比,它们如何防止错误?
我正在寻找有关类型安全访问器是什么、如何生成它们以及它们如何在 Gradle 的依赖管理工作流中发挥作用的详细解释。
如能提供任何澄清或示例,我们将不胜感激!
在 Gradle 构建期间,在执行
plugins
Kotlin 构建文件中的块之后,在编译该构建文件的主要部分之前,Gradle 会创建模型访问器,这些访问器会添加到构建文件的编译类路径中。创建的模型访问器取决于应用的插件添加的模型元素。这些是已编译的 JVM 字节码文件(文件)中的函数和/或属性
.class
,允许以类型安全的方式访问模型的某些元素。例如,插件添加的每个任务都会创建一个有用的访问器。这意味着我们可以这样写:
这里我们调用访问器
TaskContainer.compileJava: TaskProvider<JavaCompile>
,它是 Java 插件添加的任务的结果,而不必这样写:另一个常见的应用是项目扩展,我们可以在其中写入例如:
这样就可以调用访问器了
Project.java(configure: Action<JavaPluginExtension>)
,这也是 Java 插件添加的扩展所提供的,而不必这样写(我认为下面是最直接的等价形式):这些访问器是真实的可执行代码。它们是构建脚本编译的一部分,除了便于 IDE 自动完成建议之外,它们还允许在编写构建脚本时轻松访问模型元素的类型。
在您的 IDE 中单击它们以查看
.class
包含它们的文件。我们在构建文件中看到访问器的一种常见方式是它们创建依赖项配置的访问器。这意味着我们可以编写:
DependencyHandler.implementation(dependencyNotation: Any): Dependency?
这里使用由 Java 插件添加的配置提供的函数: ,而不是:我们必须在不使用访问器的情况下编写该代码,使用
implementation
不会在 IDE 中突出显示的字符串,并且更容易出错,因为名称可能拼写错误。这里有关于它们的进一步文献资料。