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

hs1ihplo  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(107)

(note:我知道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()

}

这似乎工作。在编译/构建任务中检查二进制文件是否存在,如果丢失或陈旧,则下载,但它“闻起来不对劲”。虽然我是Gradle的新手,但似乎我应该创建一个下载 * 任务 *,而不仅仅是一个函数,或者完全做其他事情。
我知道不使用Maven会牺牲很多内置的版本控制支持,但我更感兴趣的是a)在一个地方声明/显示项目依赖关系,b)允许我的模板的消费者尽可能多地进行一键设置。
有更好的办法吗?

eh57zj3b

eh57zj3b1#

您可能希望定义一个任务并将其作为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)

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

相关问题