2017-01-04 158 views
0

我与这个挣扎了很长一段时间,所以任何帮助,将不胜感激。
我有具有相关性,我需要树荫sbt-assembly公用库myCommonLib
当我将它发布到我的地方常春藤回购,我得到2个版本,一个“正常”的一个(像往常一样),和一个阴凉的一个(使用捆绑的所有依赖),用“ - 装配”追加,当然。SBT组装,常春藤,类路径

问题是,当我用我的“正常”的依赖,我得到NoClassDefFoundError,指的阴影版本!

我试图从classpath中像这样完全删除:

dependencyClasspath in Runtime := { 
    val allFiles: Seq[Attributed[File]] = (dependencyClasspath in Runtime).value 
    allFiles.filterNot(_.data.getName.toLowerCase.contains("-assembly")) 
} 

,但它不工作,还是同样的错误。

<artifact name="myCommonLib_2.11" type="jar" ext="jar" conf="compile,runtime,test,provided,optional,sources,docs,pom" e:classifier="assembly"/> 

我缺少什么:

然而,当我从常春藤XML它的工作将其删除(注释掉)?

回答

0

我已经成功地使其工作,现在...
看来当我指定确切的神器,这样的工作:

val myCommonLibArtifact = Artifact(
    name="myCommonLib", `type`="jar", extension="jar", classifier=None, 
    configurations=Seq(Compile), url=None, extraAttributes=Map()) 

libraryDependencies ++= Seq(
    "ba.sake" %% "myCommonLib" % "0.0.1" artifacts (myCommonLibArtifact)  
) 
0

你可以在你的构建做这个

libraryDependencies ++= Seq(
    "some" % "myCommonLib" % "1.0" excludeAll(
     ExclusionRule(organization = "yourOrganisation", name = "dependency name"), 
     ... 
) 

这里必要的文件SBT排除:http://www.scala-sbt.org/0.12.2/api/sbt/ExclusionRule.html

+0

谢谢,但[SBT文档(http://www.scala-sbt.org/0.13/docs/Library-Management.html#E xclude +传递+依赖性)说,“要排除某些**传递依赖**的依赖关系,请使用EXCLUDEALL或排除方法”。这不是传递依赖,它是模块本身的一部分..(只是另一个工件) –