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

为什么跨建筑约定会将scala版本附加到artifactId?

祁嘉言
2023-03-14

用于指示针对哪个版本编译库的Scala的基本机制是追加_

虽然这是一种简单的方法,但与Maven和其他构建工具的互操作性还有待改进。因为artifactId是不同的(例如scalatest_2.9.0scalatest_2.10.0),Maven将它们视为不同的工件。Maven的依赖项解析机制因此受到了损害,同一工件的多个版本(针对不同的scala版本构建)可能会出现在类路径上。

为什么不把scala版本放在分类器中呢?这似乎是分类器的主要预期用途之一:

分类器允许[Maven]区分由相同的POM构建但内容不同的工件。作为这个元素的动机,例如考虑一个项目,该项目提供了一个针对JRE 1.5的工件,但同时也提供了一个仍然支持JRE 1.4的工件。第一个工件可以配备分类器jdk15,第二个工件可以配备jdk14,这样客户端就可以选择使用哪个。--Maven文档:POM参考

共有1个答案

孙翰墨
2023-03-14

在名称后面添加版本是一个历史性的决定,这是很久以前做出的,所以它很可能不会改变,因为许多库已经按照该约定发布了。

话虽如此,正如赛斯所指出的,几年前,sbt 0.12将“_2.10.0”后缀缩短为“_2.10”,以利用Scala库在次要版本之间的二进制兼容性,讨论了这个话题。以下是[0.12]计划中的标记:

所谓交叉版本控制,我指的是在模块ID中包含Scala版本的某些部分,以区分通过编译相同源代码和不同Scala版本生成的工件。我指的不是使用任务构建多个Scala版本的能力,这将持续下去;我指的是跨版本公约。

[剪报]

在不灵活的pom中对其进行编码一直是一个难题。xml格式,我认为对于基于Scala 2.10及更高版本构建的项目,最好不要使用这种格式。然而,这或许比任何可能取代它的临时解决方案都要好。我没有看到其他构建工具的用户这样做,所以我希望没有什么能取代它。

乔希建议说:

(1)Scala分类器。这些可以是自定义字符串,可以通过依赖项指定。至少,IIRC这应该工作。

以下是马克的回应:

“可以用依赖项指定”是什么意思?所有分类器只有一个pom,对吗?如何为每个分类器声明不同的依赖关系?

下面是杰夫·里德关于量词的一些更有趣的评论

我也认为分类器将是处理这个问题的完美方式,尤其是考虑到maven文档中的建议,即使用分类器java-1.4java-1.5来区分适合各自平台的JAR。致命的缺陷似乎是可传递的依赖关系管理。也就是说,无法根据用于要求模块的分类器来选择可传递依赖集。我们需要能够说,当您将此模块与scala-2.10分类器一起使用时,它会使用scala-2.10分类器带来自己的依赖项,当与2.9分类器一起使用时,它会使用scala-2.9分类器带来自己的DEP。

我认为使用jvm版本可以实现这一点,因为jvm版本控制在配置文件激活中有特殊的支持,可以控制依赖关系。

 类似资料:
  • 在Laravel 5.0中,这样的代码用于名称调整/加载类: 然而,我在Laravel 5.1中看到了这一点 我的问题是:与此相比,此有什么好处,我应该在何时将附加到类名? 有任何地方我可以找到这个PHP留档?

  • 问题内容: 更新: 这是我的maven-compiler-plugin配置: 我使用Maven构建一个多项目应用程序。我们决定添加AspectJ,因此我在顶级项目中添加了以下代码:(来自官方文档) 以及每个下属项目的以下片段: 某种程度上,此修改已覆盖了我使用的Java版本。如果我运行构建,则会收到多个错误,如下所示: 语法错误,仅当源级别为1.5或更高时,注释才可用 这使我怀疑我的Java版本(

  • 问题内容: 为什么Guido(或其他任何人)决定打印到stderr而不是stdout?只是好奇用例是什么,它使标准错误比标准错误更合适。 问题答案: Python 3.4已修改为输出到,这是预期的行为。此处将其列为Python的错误:http : //bugs.python.org/issue18338。错误报告中的注释表明,尽管这是一个合理的选择,但它会破坏向后兼容性。Python 2.7.9在

  • 我在VSTS中发布了一个版本,可以将我的Web应用程序部署到azure应用程序服务。为此,我使用Azure应用程序服务部署步骤。在正常部署webapp之后,我想从另一个构建结果中添加一个额外的zip工件。我只想将这些文件复制到azure上web应用程序的特定路径。我该怎么做?

  • 我只是想给我的*添加一行新的文本。txt文件,但什么也没发生。文件里装着一本书。war,所以我使用类加载器来访问文件。此外,我的EclipseIDE和文件内容都使用UTF-8编码。 我用这些来获得灵感: 如何在Java中向现有文件添加新的文本行? 带有utf-8的Java BufferedWriter对象 现在我的代码主要基于上一篇文章,如下所示: 我已经确认文件确实找到了,而且读起来很好。我已经

  • 在maven存储库http://mvnrepository.com/artifact/org.apache.spark中,apache-spark版本1.4.1有两种版本。 SPARK-*2.10和SPARK-*2.11 这些似乎是Scala版本。如果我使用java发行版部署apache-spark,那么哪一个是首选?