web-dev-qa-db-ja.com

simple-build-toolでビルド+パブリッシュされたアーティファクトから_ <scala-version>接尾辞をどのように削除しますか?

Simple-build-toolを使用して、Javaのみのプロジェクトをいくつか構築しています。たとえばsbt publish-localを使用してプロジェクトからアーティファクトを公開すると、結果のアーティファクトにはScalaバージョンが名前に追加されます。Scalaこれは理にかなっていますが、これらはJavaプロジェクトのみであるため、そうではありません。このScalaバージョンのポストフィックスを無効にするにはどうすればよいですか? ?

参考までに、sbt 0.11.1、Scala 2.9.1、およびビルド構成用の.sbtファイルを使用しています(完全なプロジェクト構成に移動しても問題ありません)。

64
James

Artifact.artifactNameがどのように実装され、最終的に使用されるかを見回した後、これをオフにする方法は、crossPath設定にfalseを指定することです。これは、xsbt wikiのクイック構成例の1つに記載されています。

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

私はこの質問が古いことを知っていますが、私自身も同じ質問をしてきましたが、実際にはこれを行う非常に簡単な方法があります。 %の代わりに%%を使用して依存関係を宣言するだけです。

%:指定した文字列からIvy Module IDを構築するために使用されるメソッド。

%%:groupIDの後に使用すると、プロジェクトのScalaバージョン(_2.10など))がアーティファクト名の最後に自動的に追加されます。

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

9
Francis Toth

これは、xsbt wikiの Modifying default Artifacts に記載されています。そのページから:

たとえば、分類子やクロスパスなしで最小限の名前を生成するには、次のようにします。

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

受け入れられた回答は厳密に正しいですが、公開するScalaアーティファクトでcrossVersionsfalseに設定するneverを設定する必要があります。埋め込み= scalaバージョンは重要な互換性機能です。これは、Scalaライブラリの異なるバージョンはバイナリ互換性がない可能性があるためです。

問題のプロジェクトのように、厳密にJavaのみである)プロジェクトのcrossVersionsfalseに設定するだけです。

5
gregsymons