2015-01-08 7 views
9

Apache Spark 1.0,1.1,1.2のいずれかと一緒に使用できるユーティリティライブラリを構築しています。sbt - 公開中に特定の依存関係を除外する

これらはすべてバイナリの下位互換性があるので、使用するスパークのバージョンを(私のライブラリとの依存関係として好ましいバージョンを手動でspark-coreに追加することによって)ユーザーに決定させ、図書館のPOMの制限。それ以外の場合は、依存関係の削除の警告をユーザに与えることになります。

コンパイル動作を変更せずに、公開されたPOMにsbtでライブラリの依存関係を省略することはできますか?

答えて

5

はい、providedの構成は、特にそのために設計されています:

libraryDependencies += "org" %% "artifact" % "1.0" % "provided" 

はPOMファイルにコンパイル時にクラスパス上に述べたライブラリを置くが、ありません。

+1

'provided'は' は 'を提供し、POMファイルに依存関係を入れるん。私はPOMの依存関係を完全に省略したいと思っています。 – lyomi

+1

ああ私はそれを認識しませんでした。次に、[pomPostProcess](http://www.scala-sbt.org/0.13.5/docs/Detailed-Topics/Publishing.html#modifying-the-generated-pom)を使用して、「手動」からPOMファイル。ここの例:https://github.com/scala/pickling/blob/03be7e4e41732f5777e1895682d7c44405430ea7/project/Build.scala#L171-L195 – sjrd

5

以下は、sjrdのヘルプを使用して作成したsbt設定です。

import scala.xml.{Node => XmlNode, NodeSeq => XmlNodeSeq, _} 
import scala.xml.transform.{RewriteRule, RuleTransformer} 

pomPostProcess := { (node: XmlNode) => 
    new RuleTransformer(new RewriteRule { 
    override def transform(node: XmlNode): XmlNodeSeq = node match { 
     case e: Elem if e.label == "dependency" && e.child.exists(child => child.label == "scope" && child.text == "provided") => 
     val organization = e.child.filter(_.label == "groupId").flatMap(_.text).mkString 
     val artifact = e.child.filter(_.label == "artifactId").flatMap(_.text).mkString 
     val version = e.child.filter(_.label == "version").flatMap(_.text).mkString 
     Comment(s"provided dependency $organization#$artifact;$version has been omitted") 
     case _ => node 
    } 
    }).transform(node).head 
} 
関連する問題