2011-11-27 11 views
61

シンプルビルドツールを使用して、いくつかのJava専用プロジェクトを構築しています。たとえば、sbt publish-localを使用してプロジェクトからアーティファクトをパブリッシュすると、結果のアーティファクトには名前にScalaバージョンが追加されます。 Scalaプロジェクトではこれは理にかなっていますが、これらはJavaのみのプロジェクトなので意味がありません。 Scalaバージョンのこの修正をどうやって無効にするのですか?または私はできますか?シンプルビルドツールでビルド+公開された成果物から_ <scala-version>ポストフィックスを削除するにはどうすればよいですか?

私はsbt 0.11.1、Scala 2.9.1とビルド設定用の.sbtファイルを使用しています(しかしフルプロジェクト設定に移行することは問題ありません)。

答えて

80

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 
8

これはxsbt wikiでModifying default artifactsの下に文書化されています。そのページから:たとえば

、分類器やクロスパスせず、最小限の名前を生成する:

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

おかげでポール。残念ながら、公開されたアーティファクト名には、目に見える影響はありません。公開されたアーティファクトには、名前の末尾にScalaバージョンがあります。私は結果の文字列にジャンクを追加し、それも表示されませんでした。私のbuild.scala:http://pastie.org/2931253 – James

+1

また、あなたが参照したページには、artifactNameの設定が公開された名前に影響しないことが記載されています。 "リポジトリパターンと組み合わされたアーティファクト定義によって決定される公開名に影響を与えずに、アーティファクトの異なるローカル名を生成するように関数を変更することができます。" 私はアーティファクト設定を変更して新しいアーティファクトを提供しようとしましたが、それは直接スケーラバージョンの後置を取り除くことはできません。sbtのようにLOOKSはscalaVersionをArtifactのartifactNameメソッドに渡します。その方法を私の唯一の選択肢よりも優先させていますか? – James

+0

ああ、申し訳ありません、私が以前に試したことではありません。そのページはまるで一見必要なものだったようです。とにかくあなたがそれを見つけたように見える - カーボールを残念に思う。 –

2

受け入れ答えは厳密には正しくですが、あなたは決しては公に公表Scalaの成果物にfalsecrossVersionsを設定するべきではありません。埋め込まれたスカラバージョンは重要な互換性のある機能です。異なるバージョンのScalaライブラリはバイナリ互換性がない可能性があるためです。

厳密にJavaのみである質問のプロジェクトのように、crossVersionsfalseのみを設定してください。

+0

2つの成果物を公開することは可能ですか? 1つはスカラー版で、もう1つは無しですか? –

+0

私はあなたができると思いますが、私はなぜあなたが理解するか分からないのですか?あなたが実際に複数のコンパイラバージョンのためにあなたのスカラーをクロスコンパイルしたらどうしますか? – gregsymons

5

私はこの質問が古いことを知っていますが、私は自分自身に同じ質問をしてきましたが、今実際これを行う簡単な方法があります。

%:あなた 電源文字列からアイビーモジュールIDを構築するために使用する方法をあなたがしなければならないのは、%代わりの%%を使用して依存関係を宣言することです。

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

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

+1

この解決策は、Scalaのバージョン番号が問題となる依存関係を変更するだけでよいので、受け入れられた方法よりも優れています。 'crosspaths'をfalseに設定すると、すべての依存関係を変更して、Scalaバージョンを手動で追加する必要があります。 – Victor

関連する問題