web-dev-qa-db-fra.com

Comment supprimer le suffixe _ <scala-version> des artefacts construits + publiés avec simple-build-tool?

Je construis quelques projets Java uniquement à l'aide d'un outil de construction simple. Lorsque je publie les artefacts des projets en utilisant, disons, sbt publish-local, les artefacts résultants ont la version Scala ajoutée à leur nom. Avec un Scala projeter cela aurait du sens, mais comme il s'agit de Java ne projette que ce n'est pas le cas. Comment désactiver ce postfixage de la version Scala? Ou puis-je ?

Pour référence, j'utilise sbt 0.11.1, Scala 2.9.1 et un fichier .sbt pour la configuration de la construction (bien que le passage à une configuration de projet complète ne soit pas un problème).

64
James

Après avoir regardé comment Artifact.artifactName est implémenté et finalement utilisé, il semble que la façon de désactiver cette option consiste à spécifier false pour le paramètre crossPath. Ceci est documenté dans l'un des exemples de configuration rapide sur le wiki xsbt.

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

// disable using the Scala version in output paths and artifacts
crossPaths := false
84
James

Je sais que cette question est ancienne, mais je me pose la même question, et il existe en fait un moyen très simple de le faire maintenant. Tout ce que vous avez à faire est de déclarer la dépendance en utilisant % au lieu de %%:

%: Méthode utilisée pour construire un ID de module Ivy à partir des chaînes que vous fournissez.

%%: lorsqu'il est utilisé après l'ID de groupe, il ajoute automatiquement la Scala (comme _2.10) de votre projet à la fin du nom de l'artefact).

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

9
Francis Toth

Ceci est documenté sur le wiki xsbt sous Modification des artefacts par défaut . De cette page:

Par exemple, pour produire un nom minimal sans classificateur ni chemin croisé:

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

Bien que la réponse acceptée soit strictement correcte, vous devez jamais définir crossVersions sur false sur les artefacts publiés publiquement Scala. L'embedded = scala version est une fonctionnalité de compatibilité importante, car les différentes versions des bibliothèques Scala peuvent ne pas être compatibles binaires).

Définissez uniquement crossVersions sur false pour les projets, comme ceux de la question, strictement Java uniquement.

5
gregsymons