Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 正确替换编译依赖项_Scala_Gradle - Fatal编程技术网

Scala 正确替换编译依赖项

Scala 正确替换编译依赖项,scala,gradle,Scala,Gradle,这是我关于gradle驱动的纯scala项目的小问题系列的第一部分。接下来几天会有更多。编辑:考虑到我对这个问题的不好理解,我至少要在发布之前对它们进行修改 几周前,我开始了一个新的私人scala项目,我想与gradle一起构建这个项目。IDE往往在我的系统上有大量的启动时间,如果我只想做一些小的编辑,就无法扩展。所以我选择了gradle,因为我已经知道了(sbt也是我的一个选择)。这也让我可以使用IDE,以防我真的需要一套更大的工具,但大多数时候我只需要一个命令行 我安装的最新版本是一些2.x

这是我关于gradle驱动的纯scala项目的小问题系列的第一部分。接下来几天会有更多。编辑:考虑到我对这个问题的不好理解,我至少要在发布之前对它们进行修改

几周前,我开始了一个新的私人scala项目,我想与gradle一起构建这个项目。IDE往往在我的系统上有大量的启动时间,如果我只想做一些小的编辑,就无法扩展。所以我选择了gradle,因为我已经知道了(sbt也是我的一个选择)。这也让我可以使用IDE,以防我真的需要一套更大的工具,但大多数时候我只需要一个命令行

我安装的最新版本是一些2.x版本(在一段时间内仍然运行良好),然后我迅速升级到更新的5.x版本,部分是为了测试新的插件语法,最后几天我还查看了6.0。由于生成脚本中的编译依赖关系,此最新版本向我发出了弃用警告。使用版本6.0或多或少使我的构建时间增加了一倍,所以除非我真的需要一些新功能,否则我不会使用它,但在使用gradle 5.x时,弃用警告仍然适用(即使不是更多)

没问题,我想,因为gradle运行时已经建议了如何修复它们。但是,用实现简单地替换compile是行不通的,因为我(ab-)在代码中使用了编译依赖项的传递性。然后我希望其他人也有同样的问题。他们中有很多人提供了大量的指南来解决这个问题。不幸的是,它们都不适用于纯scala项目。对于android,似乎是一个具有api依赖性的明显解决方案。Java项目可以利用Java库插件(这可能也是上述android项目解决方案的基础)和api依赖性。但是对于scala来说没有这样的方法,或者至少我还没有找到

因此,需要明确的是:我在这里有一个多项目的设置,我只与其他子项目的依赖性作斗争。不依赖于外部源。替换运行时(对于外部libs)和testCompile依赖项根本没有问题

所以,我的问题是:在纯scala项目中有没有合适的/规范的方法来替换编译依赖项?(虽然我对几个小时前在自己的评论中使用“官方”并不特别满意,但这一观点如何:不管谁最初创建了scala插件(scala团队、scala社区、gradle团队或gradle社区),gradle团队当时决定将其包含在发行版中,现在gradle团队决定将编译依赖项标记为已弃用。那么gradle团队是否也应该对如何继续维护scala项目有一个官方的意见呢?)或者没有共同的建议,我只能在这些选项中选择,无论出于何种原因,这些选项都不是最优的:

  • 坚持编译依赖项。从长远来看,肯定不是经得起未来考验的
  • 展开所有可传递的依赖项并添加新的(技术上不必要的)依赖项。如果A依赖于B,B依赖于C(并且A实际上使用了C中的定义),那么也将依赖关系从A添加到C扩展依赖关系图和构建脚本
  • 应用java库(非应用程序项目),尽管我管理scala项目只是为了拥有api依赖关系。java库和scala都扩展了java插件,因此我认为这不会造成任何实际伤害。可能是最好的解决方案,尽管我不确定为单一依赖类型添加一个全新的插件是否是正确的选择。而且将任何“java”东西添加到“scala”项目似乎很奇怪
  • 以某种方式重新发明轮子,并定义自己的api依赖关系。这似乎是最丑陋的方式,因为我必须将一些代码从gradle存储库复制到我自己的项目中。这就是插件的用途,不是吗

  • 提前感谢。

    只需应用
    java库
    插件并使用
    api
    。将该插件视为Java平台库插件,而不是Java语言库插件


    请注意,要充分发挥功能,您至少需要Gradle 5.6,否则某些接线不完整。

    请参阅为什么此类主观问题不合适。我承认,我以前没有阅读过此特定指南,但您能否详细说明,为什么您认为这是主观的?当然,我提出了一些建议,但只是为了帮助其他人理解我已经考虑到了什么。这不是一个选择题测验,我不想看到哪个答案给出的最多。我的问题必须有正式的答案/解决办法,不是吗?这就是我想要的答案。这里的问题是什么?所有这些都是非常主观的,因为这些选择取决于您在
    .gradle
    文件中所做的选择。Gradle允许如此高的灵活性,以至于大多数真实世界的Gradle项目都不可能做出客观的陈述。对于同一个问题,对你的gradle构建有效的东西对于另一个gradle构建可能不起作用(甚至被认为是荒谬的)。更重要的是,我不喜欢提供的每一个“选项”(至少部分),并且我清楚地说明了每一个选项的原因。所以我特别想寻找一些完全不同的方法。或者有证据表明,没有这样“合适”的解决方案,gradle对待scala程序员不像android开发者那样受欢迎。gradle没有让任何开发者感到受欢迎。android插件(和指南)是由android开发者和谷歌开发的。因此,如果Scala开发者社区选择,他们可以花2-3年时间创建插件和指南生态系统。这正是安卓社区所做的。。。这并不容易,2013-2014年,android+gradle曾经是一个脆弱的拼图,经过多年的改进,它变得同样好。这是我所期待的,