获取Gradle中依赖项的JavaDoc JAR

获取Gradle中依赖项的JavaDoc JAR,gradle,gradle-eclipse,Gradle,Gradle Eclipse,我正在做一个Gradle任务,为基于Eclipse的IDE创建一个项目。这需要生成.project和.classpath文件。这部分绝对没有问题,我可以通过apply Plugin:“Eclipse”使用Gradle Eclipse插件,让我的任务依赖于eclipseProject和EclipsePasspath,并更改配置。但另一个要求是,整个项目必须是可移植的(即使对于没有Gradle的环境也是如此),因此不可能只定义外部依赖项,因为类路径将引用缓存。我通过使用定义依赖项的主项目解决了这个问

我正在做一个Gradle任务,为基于Eclipse的IDE创建一个项目。这需要生成
.project
.classpath
文件。这部分绝对没有问题,我可以通过
apply Plugin:“Eclipse”
使用Gradle Eclipse插件,让我的任务依赖于
eclipseProject
EclipsePasspath
,并更改配置。但另一个要求是,整个项目必须是可移植的(即使对于没有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>
但是现在我的项目使用文件作为依赖项,所以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>


但目前,只有在a)定义了与
:javadoc
分类器后缀类似的依赖项时,才会下载
javadoc
-jar;或者b)依赖项不会被复制,而是由带有Eclipse插件的项目直接引用(使用
downloadJavadoc=true
).

即使我认为我需要更改构建文件的结构,我还是为这个特定案例找到了解决方案,因此我想为可能遇到相同问题的其他人提供解决方案

我找到了,它可以解析额外的必需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的环境,您不能使用Gradle包装器吗?谢谢您的发帖和解答。我也有同样的问题——基本上是试图从Gradle缓存中取出javadocs。如果其他人正在寻找一种通用方法,一个建议是将
configurations.libs.incoming.resolutionResult
更改为
configurations.compile.incoming.resolutionResult
<代码>编译是java插件下的默认配置。你说得对。我编辑了这个示例以使用
compile
配置。
// 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"
}