提问者:小点点

使用Gradle从Amazon S3私有存储库下载依赖项


我希望将Groovy支持添加到现有的java项目中,这样我就可以使用invokedynamic轻松地编译java和Groovy的混合代码,这样我就可以获得类似java的执行速度,而无需在冗长的java语法上浪费过多的时间

在读到gmaven插件不再支持编译,groovy eclipse编译器插件还不支持invokedynamic之后,我问自己,如果Maven编译的groovy代码速度太慢了,为什么还要继续使用它?

因此,我决定尝试取消maven for Gradle,这样我可以获得更快的代码,同时也可以将一些python部署脚本移植到Gradle任务,以便只需要一个代码库。

我有一些库存储在一个简单的受密码保护的s3 maven存储库中(以避免需要像artifactory这样的企业过度杀戮)。在做了一些基础研究之后,我发现Gradle没有内置的对添加自定义依赖关系管理的支持,这是由堆栈覆盖问题和支持论坛帖子决定的。

我确实设法为gradle找到了一个s3插件——但它不处理依赖关系的管理。

如果Gradle的整体目标是比Maven更灵活,如果依赖关系管理/构建系统的核心目的是有效管理来自各种来源的依赖关系,那么缺乏对自定义存储库的支持似乎是一个相当重要的设计缺陷,这使得我在Maven遇到的任何问题相比之下都相形见绌。

然而,很可能我遗漏了一些东西,我已经花了几个小时学习Gradle——所以我想,在Gradle开发人员解决这个关键问题之前,我会看看是否有一些合理的方法来模拟这些s3依赖项的依赖项管理。否则,我将不得不得出结论,在编译器插件支持invokedynamic之前,我最好使用Maven并容忍较慢的Groovy代码。

基本上,我需要一个解决方案,可以实现以下功能:

  1. 将依赖项和可传递依赖项下载到gradle缓存

然而,我在文档中找不到任何东西可以给我一个从哪里开始的线索:


共3个答案

匿名用户

Gradle 2.4对S3存储库有本机支持。下载依赖项和发布工件。

要使用IAM凭据下载(从上面的链接中转述):

repositories {
    maven {
        url "s3://someS3Bucket/path/to/repo/root"
        credentials(AwsCredentials) {
            accessKey 'access key'
            secretKey 'secret key'
        }
    }
}

然后像往常一样指定依赖项。

匿名用户

您不需要任何自定义存储库支持即可完成此操作。只需使用正确的URL声明maven存储库。如果存储库在Maven中使用时可以工作,那么它也可以与Gradle一起工作。(上传可能是另一回事。)

匿名用户

您可以使用S3和http

repositories {
    mavenCentral()
    ivy {
        url "https://s3-eu-west-1.amazonaws.com/my-bucket"
        layout "pattern", {
            artifact "[artifact]-[revision].[ext]"
            m2compatible = true
        }
    }
}

将S3中的jar命名为Name rev。罐子(joda-time-3.2.jar)放在我的桶里。同时上载pom文件。在S3中,授予下载jar和pom的所有权限。