将可下载的二进制文件合并为 Gradle 依赖项的正确方法是什么?

Bri*_*HVB 5 java dependency-management gradle maven

(注意:我知道JitPack但它似乎只支持.jar.aar文件,而不是直接的二进制文件或可执行文件)

我正在创建一个项目模板,该模板依赖于许多第三方库,其中大多数库都可以在 Maven Central 上找到。但也有一些命令行二进制文件存在于公共 Git 版本或其他稳定 URL 中。

由于这些二进制文件将直接由我正在编写的 Java 模块使用,因此它们是项目依赖项,但我不确定如何最好地将它们合并到我的 Gradle 构建中。

我不打算通过 Maven 提供项目模板,也不希望将第三方二进制文件上传到 Maven 存储库。相反,我希望模板的使用者在构建或运行时下载二进制文件。

我发现了gradle-download-task插件,并设法通过以下方式将其拼凑成依赖项。

// build.gradle

plugins {...}

def downloadXXX() {
   mkdir 'bin'
   download {
      src 'https://github.com/.../tagged_release/xxx.exe'
      dest 'bin'
      onlyIfModified true      
   }
   return files("bin/xxx.exe")
}

...
dependencies {
    testImplementation ...
    implementation ...

    implementation downloadXXX()

}
Run Code Online (Sandbox Code Playgroud)

这似乎有效。在编译/构建任务中检查二进制文件是否存在,如果丢失或过时则下载,但它闻起来不对。虽然我是 Gradle 新手,但似乎我应该创建一个下载任务而不仅仅是一个函数,或者完全做其他事情。

我知道,如果不使用 Maven,我将牺牲大量内置版本控制支持,但我更感兴趣的是 a) 在一个地方声明/显示项目依赖项,以及 b) 允许我的模板的使用者执行以下操作尽可能多的一键设置。

有没有更好的办法?

lan*_*wen 0

您可能想要定义一个任务并将其下载为对compileJava

task downloadBinaries(type: Download) {
    src 'https://github.com/.../tagged_release/xxx.exe'
    onlyIfModified true
    dest "${sourceSets.main.output.resourcesDir}/bin"
}

tasks.compileJava.dependsOn(tasks.downloadBinaries)
Run Code Online (Sandbox Code Playgroud)

可选目标可以是resources目录,然后二进制文件将立即在类路径中可用。