gpt4 book ai didi

gradle - 获取JavaDoc jar以获取Gradle中的依赖项

转载 作者:行者123 更新时间:2023-12-03 04:00:57 25 4
gpt4 key购买 nike

我正在执行Gradle任务,为基于Eclipse的IDE创建项目。这需要同时生成.project.classpath文件。这部分绝对没有问题,我可以通过apply plugin: 'eclipse'使用Gradle Eclipse插件,让我的任务依赖于更改了配置的eclipseProjecteclipseClasspath。但是还有一个附加要求,那就是整个项目必须是可移植的(即使没有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。在使用本地副本之前,我可以简单地使用 this Eclipse plugin feature:
eclipse {
classpath {
downloadJavadoc = true
downloadSources = true
}
}

但是现在我的项目使用文件作为依赖项,因此Eclipse插件也不能只是简单地请求Javadoc文件。如何在每次使用 javadoc分类器后缀添加而不添加第二个依赖项的情况下,请求下载 :javadoc -jars ?下载后,我可以自己在缓存中搜索它,也可以按预期方式将其添加到.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 - 获取JavaDoc jar以获取Gradle中的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42439818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com