Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you remove the _<scala-version> postfix from artifacts built+published with simple-build-tool?

Tags:

scala

sbt

I'm building a few Java-only projects using simple-build-tool. When I publish the artifacts from the projects using, say, sbt publish-local then the resulting artifacts have the Scala version appended to their name. With a Scala project this would make sense, but since these are Java only projects it doesn't. How would I disable this postfixing of the Scala version? Or can I?

For reference I'm using sbt 0.11.1, Scala 2.9.1 and a .sbt file for build configuration (though moving to a full project config would be no problem).

like image 502
James Avatar asked Nov 27 '11 20:11

James


4 Answers

After looking around how Artifact.artifactName is implemented and ultimately used it seems that the way to turn this off is to specify false for the crossPath setting. This is documented in one of the quick configuration examples on the xsbt wiki.

http://www.scala-sbt.org/release/docs/Examples/Quick-Configuration-Examples

// disable using the Scala version in output paths and artifacts
crossPaths := false
like image 89
James Avatar answered Oct 21 '22 12:10

James


I know this question is old, but I've been asking myself the same question, and there's actually a very simple way to do this now. All you have to do is to declare the dependency using % instead of %%:

%: A method used to construct an Ivy Module ID from the strings you supply.

%%: When used after the groupID, it automatically adds your project’s Scala version (such as _2.10) to the end of the artifact name.

http://alvinalexander.com/scala/sbt-how-to-manage-project-dependencies-in-scala

like image 26
Francis Toth Avatar answered Oct 21 '22 11:10

Francis Toth


This is documented on the xsbt wiki under Modifying default artifacts. From that page:

For example, to produce a minimal name without a classifier or cross path:

artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) =>
  artifact.name + "-" + module.revision + "." + artifact.extension
}
like image 11
Paul Butcher Avatar answered Oct 21 '22 12:10

Paul Butcher


While the accepted answer is strictly correct, you should never set crossVersions to false on publicly published Scala artifacts. The embedded scala version is an important compatibility feature, since different versions of the Scala libraries may not be binary compatible.

Only set crossVersions to false for projects, like those in the question, that are strictly Java only.

like image 6
gregsymons Avatar answered Oct 21 '22 11:10

gregsymons