获取javadoc罐子的依赖性



我正在处理Gradle任务,以创建基于Eclipse的IDE项目。这需要同时生成.project.classpath文件。这部分绝对没有问题,我可以通过apply plugin: 'eclipse'使用Gradle Eclipse插件,以使我的任务取决于eclipseProjecteclipseClasspath,并具有更改的配置。但是另一个要求说,整个项目必须是便携式的(即使是在没有Gradle的环境中),因此不可能仅定义外部依赖项,因为类Path将参考缓存。我通过使用定义依赖项的主要项目解决了这个问题:

// 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="libhamcrest-core-1.3.jar"/>
     <classpathentry kind="lib" path="libjunit-4.12.jar"/>
</classpath>

现在,我想包括依赖项的 javadoc -jars。在使用本地副本之前,我可以简单地使用此Eclipse插件功能:

eclipse {
    classpath {
         downloadJavadoc = true
         downloadSources = true
    }
}

但是现在我的项目将文件用作依赖项,因此Eclipse插件也不能仅仅请求Javadoc文件。如何请求下载javadoc -JARS 没有每次使用:javadoc分类器后缀添加第二个依赖项的下载?下载后,我可以自己在缓存中搜索它,并以预期的方式将其添加到.classpath

<classpathentry kind="lib" path="libjunit-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,它可以解决其他必要的罐子(Javadoc和来源),因此我也写了一项任务以复制这些罐子。

// 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"
}

相关内容

  • 没有找到相关文章

最新更新