如何卸下<;scala版本>;来自构建的工件的后缀+;使用简单构建工具发布?

如何卸下<;scala版本>;来自构建的工件的后缀+;使用简单构建工具发布?,scala,sbt,Scala,Sbt,我正在使用简单的构建工具构建一些纯Java的项目。当我使用sbt publish local发布项目中的工件时,结果工件的名称后面会附加Scala版本。对于Scala项目来说,这是有意义的,但因为这些项目都是Java项目,所以它不是。如何禁用Scala版本的此后期修复?或者我可以吗 作为参考,我正在使用sbt 0.11.1、Scala 2.9.1和.sbt文件进行构建配置(尽管移动到完整的项目配置不会有问题)。这在xsbt wiki的下面有文档记录。从该页: 例如,要生成没有分类器或交叉路径的最

我正在使用简单的构建工具构建一些纯Java的项目。当我使用sbt publish local发布项目中的工件时,结果工件的名称后面会附加Scala版本。对于Scala项目来说,这是有意义的,但因为这些项目都是Java项目,所以它不是。如何禁用Scala版本的此后期修复?或者我可以吗


作为参考,我正在使用sbt 0.11.1、Scala 2.9.1和.sbt文件进行构建配置(尽管移动到完整的项目配置不会有问题)。

这在xsbt wiki的下面有文档记录。从该页:

例如,要生成没有分类器或交叉路径的最小名称:

artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) =>
  artifact.name + "-" + module.revision + "." + artifact.extension
}

在了解了Artifact.artifactName是如何实现和最终使用的之后,似乎关闭它的方法是为交叉路径设置指定false。xsbt wiki上的一个快速配置示例中记录了这一点


虽然公认的答案是完全正确的,但在公开发布的Scala工件上,决不应将
crossVersions
设置为
false
。嵌入式scala版本是一个重要的兼容性特性,因为不同版本的scala库可能不兼容二进制文件


只为项目设置
crossVersions
false
,就像问题中的那些项目,这些项目严格来说是纯Java的。

我知道这个问题很老了,但我一直在问自己同样的问题,实际上现在有一个非常简单的方法可以做到这一点。您所要做的就是使用
%
而不是
%
声明依赖项:

%:用于从您输入的字符串构造常春藤模块ID的方法 供应

%%:当在groupID之后使用时,它会自动添加您的 项目的Scala版本(如_2.10)到工件的末尾 名字


谢谢你,保罗。不幸的是,这对已发布的工件名称没有任何可观察的影响。已发布工件的名称末尾仍然有Scala版本。我将垃圾添加到生成的字符串中,结果也没有显示出来。这是我的build.scala:另外,您引用的页面说artifactName设置不会影响发布的名称。“可以修改该函数,以便在不影响已发布名称的情况下为工件生成不同的本地名称,该名称由工件定义和存储库模式共同确定。”。我确实尝试过修改工件设置并提供一个新工件,但这并不能让我直接摆脱scala版本的后缀。看起来sbt将把scalaversation传递给Artifact的artifactName方法。覆盖那个方法是我唯一的选择吗?啊,该死的,对不起,我以前没有尝试过,那个页面看起来正是你第一眼所需要的。看来你已经找到了-对不起,这是曲线球,没问题。它为我指明了正确的方向,如果没有其他东西的话。有可能发布两个工件吗?一个有scala版本,一个没有?我想你可以,但我不知道你为什么会这么做?如果您确实为多个编译器版本交叉编译了scala,您会怎么做?此解决方案比公认的解决方案要好,因为您只需更改scala版本号存在问题的依赖关系。通过将“交叉路径”设置为false,您必须更改所有依赖项并手动添加Scala版本。
// disable using the Scala version in output paths and artifacts
crossPaths := false