编写 Gradle 插件时的 Gradle Api Sources 和 Doc
Posted
技术标签:
【中文标题】编写 Gradle 插件时的 Gradle Api Sources 和 Doc【英文标题】:Gradle Api Sources and Doc when writing Gradle Plugins 【发布时间】:2014-05-06 19:33:43 【问题描述】:问题:
如何获取集成到 Eclipse 项目中的 gradle-api 代码的源代码和 javadoc/groovydoc?
背景:
我正在使用 Gradle 构建我正在编写的 Gradle 插件。我使用 Eclipse 作为这个项目的 IDE,而我用于构建这个插件的 Gradle 脚本正在使用“Eclipse”插件来生成我的 Eclipse 项目。另外,我正在使用 Spring 的 Gradle Eclipse 插件,它从我的 build.gradle 文件中获取我所有的依赖项。
这个 Gradle 脚本的依赖块有
dependencies
compile localGroovy()
compile gradleApi()
// I want something like: 'compile gradleApiSources()' here
// I want something like: 'compile gradleApiDoc()' here as well
理由:
在我学习编写 Gradle 插件的过程中,如果能够查看 Gradle 的文档甚至是实现,以帮助我了解自己在做什么,将会很有帮助。
【问题讨论】:
相关buggithub.com/gradle/gradle/issues/1003 【参考方案1】:这在 Eclipse 中对我有用:
plugins.withType(EclipsePlugin)
plugins.withType(JavaBasePlugin)
eclipse
classpath
file
whenMerged classpath ->
String gradleHome = gradle.getGradleHomeDir()
.absolutePath
.replace(File.separator, '/')
String gradleSourceDirectory = "$gradleHome/src"
classpath.entries.each entry ->
if (entry in org.gradle.plugins.ide.eclipse.model.AbstractLibrary
&& entry.library.path.contains('generated-gradle-jars'))
entry.sourcePath =
new org.gradle.plugins.ide.eclipse.model.internal.FileReferenceFactory()
.fromPath(gradleSourceDirectory)
确保您的 Gradle Home 包含源目录。如果您使用包装器,可以通过在包装器任务中将distributionUrl
更新为-all
版本来完成。
您还需要停止正在运行 otherwise they will keep their own "home":./gradlew --stop
的 Gradle 守护程序,然后您可以继续运行任务:./gradlew eclipse
见GRADLE-2133(此答案改编自)
【讨论】:
如果我用 gradleSrc 替换 sourcePath 那么它适用于我的分发services.gradle.org/distributions/gradle-4.3-all.zip【参考方案2】:我没有关于 eclipse 的答案,但我可以告诉你我是如何为 intellij 做到这一点的,这可能会给你一些启发。如果这个更容易获得就好了。
private void addGradleSourceDeps()
PathFactory pf = new PathFactory()
pf.addPathVariable('GRADLE_HOME', project.gradle.gradleHomeDir)
project.extensions.idea.module.iml.whenMerged Module module ->
module.dependencies.grep
it instanceof ModuleLibrary && ((ModuleLibrary) it).classes.grep Path path ->
path.relPath.substring(path.relPath.lastIndexOf('/') + 1).startsWith('gradle-')
.each ModuleLibrary lib ->
// TODO this needs to be fixed for gradle 1.9 which now includes separate sub directory for each jar
// for now a workaround is to execute the following
// cd $GRADLE_HOME
// for each in $(find . -mindepth 2 -maxdepth 2 -type d ! -name META\-INF); do cp -a $each .;done
lib.sources.add(pf.path('file://$GRADLE_HOME$/src'))
module.dependencies.grep
it instanceof ModuleLibrary && ((ModuleLibrary) it).classes.grep Path path ->
path.relPath.substring(path.relPath.lastIndexOf('/') + 1).startsWith('groovy-all')
.each ModuleLibrary lib -> lib.sources.add(pf.path('file://$GROOVY_SRC_HOME$'))
这依赖于我已将 gradle src 发行版安装到通过 intellij 中的 GRADLE_HOME 路径变量可用的位置(对于 GROOVY_SRC_HOME 类似)。您还可以看到我的插件当前使用 gradle 1.8,src 布局在 1.9 中发生了变化,所以我需要在升级时修复这个问题。
【讨论】:
以上是关于编写 Gradle 插件时的 Gradle Api Sources 和 Doc的主要内容,如果未能解决你的问题,请参考以下文章
Gradle 与 AGP 构建 API: 进一步完善您的插件!
Android Gradle 插件Gradle 依赖管理 ① ( org.gradle.api.Project 配置 | Android Gradle 插件配置与 Gradle 配置关联 ) ★
如何解决安装 warp10-ext-influxdb 插件时的 gradle shadowJar 问题?
Android Gradle 插件Gradle 依赖管理 ④ ( Android Gradle 插件中注册的依赖分组 | implementation | api | compileOnly )