当前位置: 首页 > 知识库问答 >
问题:

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

夹谷弘亮
2023-03-14

我希望将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个答案

田俊爽
2023-03-14

您可以使用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的所有权限。

戚晨
2023-03-14

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

郜谦
2023-03-14

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

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

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

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

 类似资料:
  • 我正在为我的项目使用Gradle,昨天我在构建项目时遇到了问题,因为https://plugins.gradle.org不起作用。那么有没有办法克隆依赖项

  • 我试图从私有Nexus存储库中提取一些内部依赖项。但是当我构建项目时,gradle不会在私有存储库中搜索依赖项,而是在maven存储库中查找它。 我做了一些调查,发现这只发生在一个项目上。依赖关系确实会被拉入其他项目。我仍然不知道为什么会这样。 以下是我添加存储库的方式: 依赖: 这就是gradle所展示的: 它不会在专用存储库中搜索。

  • 我在获取 gradle 时遇到了麻烦,无法找到我放入私有 nexus 存储库中的依赖项。依赖性在maven中,但我似乎也无法让它在那里找到它。我确实把它放进了我的nexus存储库,位置 http://nexus.hq.chris.com/content/repositories/emoji4j/ 建筑格拉德尔·斯尼佩特 有谁知道我如何让 gradle 在 http://nexus.hq.chris

  • 我试图在我的文件系统上为maven和gradle维护相同的存储库。但是我遇到了一些问题。 我的 GRADLE_USER_HOME是 我的gradle主页与我的Maven存储库相同。 但是,当通过gradle下载依赖项时,它们将被下载到gradle\u USER\u HOME\cache中,而不是存储库文件夹中。我缺少什么配置? 编辑我已经查看了《Gradle In Action》一书中关于依赖关系

  • 我对maven是新手,在将pom.xml中定义的依赖项下载到本地存储库时遇到了问题。正确下载pom.xml中定义的所有其他依赖项。此外,跨多个项目的其他依赖关系也运行良好。我使用的是maven 3.5.2和aws sdk 1.11.86 导致问题的依赖项是定义为的aws红移驱动程序- Maven存储库- 我的本地回购协议有以下内容- 我已经删除了本地文件。上次更新的文件,但无法解决此问题<有什么想

  • 我试图在OSGI容器上部署我的java模块。通过karaf“feature”,我能够生成feature.xml,它列出了所有需要的包。 正如我们所知,每个包都是一个依赖项。现在我们确实有一些依赖项可以由maven从其存储库中下载。