我希望将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代码。
基本上,我需要一个解决方案,可以实现以下功能:
然而,我在文档中找不到任何东西可以给我一个从哪里开始的线索:
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的所有权限。