在 Gradle 中获取依赖项的 JavaDoc jar
Get JavaDoc jars for dependencies in Gradle
我正在执行 Gradle 任务,为基于 Eclipse 的 IDE 创建一个项目。这需要同时生成 .project
和 .classpath
文件。这部分绝对没问题,我可以通过 apply plugin: 'eclipse'
使用 Gradle Eclipse 插件,让我的任务依赖于 eclipseProject
和 eclipseClasspath
并更改配置。但是一个额外的要求是,整个项目必须是可移植的(即使是没有 Gradle 的环境),所以不可能只定义外部依赖项,因为类路径将引用缓存。我通过使用定义依赖项的主项目解决了这个问题:
// Define configurations
configurations {
libs
}
// Define repositories
repositories {
mavenCentral()
}
// Include dependencies via 'groupID:artifactID:version[:classifier]'
dependencies {
libs 'junit:junit:4.12'
}
这些依赖项将被下载到缓存中,一个简单的复制任务将它们复制到我的项目'lib'
文件夹中:
// Copies the dependencies to project 'lib' folder
task copyLibs(type: Copy) {
from configurations.libs
into "$projectDir/$projectName/lib"
}
子项目现在使用那些复制的库作为依赖项,只需使用:
dependencies {
compile fileTree(dir: 'lib', include: ['*.jar'])
}
子项目中的一项附加任务使路径相对化,因此我可以移动我的项目并在我想要的任何地方调用 gradle build
。这是类路径的样子:
<classpath>
<classpathentry path="bin" kind="output"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="lib\hamcrest-core-1.3.jar"/>
<classpathentry kind="lib" path="lib\junit-4.12.jar"/>
</classpath>
现在我想包含依赖项的 javadoc
-jars。在使用本地副本之前,我可以简单地使用 :
eclipse {
classpath {
downloadJavadoc = true
downloadSources = true
}
}
但是现在我的项目使用文件作为依赖项,所以 Eclipse 插件也不能简单地请求 Javadoc 文件。我如何请求下载 javadoc
-jars 而无需 每次使用 :javadoc
分类器后缀添加第二个依赖项?下载后,我可以自己在缓存中搜索它,并以预期的方式将其添加到 .classpath
:
<classpathentry kind="lib" path="lib\junit-4.12.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/path/to/javadoc/junit-4.12-javadoc.jar"/>
</attributes>
</classpathentry>
但目前,仅下载 javadoc
-jars,如果 a) 具有 :javadoc
分类器后缀的依赖项的定义就像常规依赖项一样,或者 b) 依赖项不是已复制,但由带有 Eclipse 插件的项目直接引用(downloadJavadoc = true
)。
即使我认为我需要更改我的构建文件的结构,我也找到了针对这个特定案例的解决方案,所以我想将它提供给可能遇到同样问题的其他人。
我找到了 ArtifactResolutionQuery
,它可以解析其他所需的 JAR(Javadoc 和源代码),所以我也编写了一个任务来复制这些 JAR。
// Copies the javadoc files to project 'lib/javadoc' folder
task copyJavadocs(type: Copy) {
from {
dependencies.createArtifactResolutionQuery()
.forComponents(
configurations.compile.incoming.resolutionResult
.allDependencies.collect { it.selected.id }
)
.withArtifacts(JvmLibrary, JavadocArtifact)
.execute()
.resolvedComponents
.collectMany {
it.artifactResults
.collect { it.file.path }
}
}
into "$projectDir/$sunriseProjectName/lib/javadoc"
}
我正在执行 Gradle 任务,为基于 Eclipse 的 IDE 创建一个项目。这需要同时生成 .project
和 .classpath
文件。这部分绝对没问题,我可以通过 apply plugin: 'eclipse'
使用 Gradle Eclipse 插件,让我的任务依赖于 eclipseProject
和 eclipseClasspath
并更改配置。但是一个额外的要求是,整个项目必须是可移植的(即使是没有 Gradle 的环境),所以不可能只定义外部依赖项,因为类路径将引用缓存。我通过使用定义依赖项的主项目解决了这个问题:
// Define configurations
configurations {
libs
}
// Define repositories
repositories {
mavenCentral()
}
// Include dependencies via 'groupID:artifactID:version[:classifier]'
dependencies {
libs 'junit:junit:4.12'
}
这些依赖项将被下载到缓存中,一个简单的复制任务将它们复制到我的项目'lib'
文件夹中:
// Copies the dependencies to project 'lib' folder
task copyLibs(type: Copy) {
from configurations.libs
into "$projectDir/$projectName/lib"
}
子项目现在使用那些复制的库作为依赖项,只需使用:
dependencies {
compile fileTree(dir: 'lib', include: ['*.jar'])
}
子项目中的一项附加任务使路径相对化,因此我可以移动我的项目并在我想要的任何地方调用 gradle build
。这是类路径的样子:
<classpath>
<classpathentry path="bin" kind="output"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="lib\hamcrest-core-1.3.jar"/>
<classpathentry kind="lib" path="lib\junit-4.12.jar"/>
</classpath>
现在我想包含依赖项的 javadoc
-jars。在使用本地副本之前,我可以简单地使用
eclipse {
classpath {
downloadJavadoc = true
downloadSources = true
}
}
但是现在我的项目使用文件作为依赖项,所以 Eclipse 插件也不能简单地请求 Javadoc 文件。我如何请求下载 javadoc
-jars 而无需 每次使用 :javadoc
分类器后缀添加第二个依赖项?下载后,我可以自己在缓存中搜索它,并以预期的方式将其添加到 .classpath
:
<classpathentry kind="lib" path="lib\junit-4.12.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/path/to/javadoc/junit-4.12-javadoc.jar"/>
</attributes>
</classpathentry>
但目前,仅下载 javadoc
-jars,如果 a) 具有 :javadoc
分类器后缀的依赖项的定义就像常规依赖项一样,或者 b) 依赖项不是已复制,但由带有 Eclipse 插件的项目直接引用(downloadJavadoc = true
)。
即使我认为我需要更改我的构建文件的结构,我也找到了针对这个特定案例的解决方案,所以我想将它提供给可能遇到同样问题的其他人。
我找到了 ArtifactResolutionQuery
,它可以解析其他所需的 JAR(Javadoc 和源代码),所以我也编写了一个任务来复制这些 JAR。
// Copies the javadoc files to project 'lib/javadoc' folder
task copyJavadocs(type: Copy) {
from {
dependencies.createArtifactResolutionQuery()
.forComponents(
configurations.compile.incoming.resolutionResult
.allDependencies.collect { it.selected.id }
)
.withArtifacts(JvmLibrary, JavadocArtifact)
.execute()
.resolvedComponents
.collectMany {
it.artifactResults
.collect { it.file.path }
}
}
into "$projectDir/$sunriseProjectName/lib/javadoc"
}