Playframework 2.0 是否从sbt native packager中的universal:packageBin排除非托管依赖项?
我有一个带有JAR的外部lib目录。为了编译和测试我的项目,我需要将它们包含在我的类路径中,但我不想将它们包含在通过Playframework 2.0 是否从sbt native packager中的universal:packageBin排除非托管依赖项?,playframework-2.0,sbt,sbt-native-packager,Playframework 2.0,Sbt,Sbt Native Packager,我有一个带有JAR的外部lib目录。为了编译和测试我的项目,我需要将它们包含在我的类路径中,但我不想将它们包含在通过universal:packageBin(在中)生成的分布式zip文件中(如果您使用的是playframework),或者dist 我试图通过使用提供的范围来实现这一点,如下所示: unmanagedBase in Provided := new java.io.File("/external/lib") 但这似乎不像宣传的那样有效——JAR似乎没有包含在编译范围内 我正在使用s
universal:packageBin
(在中)生成的分布式zip文件中(如果您使用的是playframework
),或者dist
我试图通过使用提供的范围来实现这一点,如下所示:
unmanagedBase in Provided := new java.io.File("/external/lib")
但这似乎不像宣传的那样有效——JAR似乎没有包含在编译范围内
我正在使用sbt0.13.1这很有效(感谢@jacek laskowski对我的答案的改进):
但是,这仍然感觉像是一个难题,如果sbt
(以及sbt原生打包机
)能够正确地支持提供的范围,我更愿意这样做,因为这个场景正是它的目的所在。我将提出以下解决方案:
mappings in Universal := (mappings in Universal).value filter { case (jar, path) =>
jar.getParentFile != (unmanagedBase in Compile).value
}
它复制了Universal
中的映射,这可以通过~=
避免,但是没有提供.value
宏支持
不过,我认为该解决方案是类型安全的,因为它在Compile
设置中使用了unmanagedBase的值,即java.io.File
(而不是java.lang.String
,它容易出现打字错误)。请尝试在packageBin:=File(/external/lib)中使用unmanageBase
不幸的是,@laughedelic,这将DEP从编译范围中删除-我仍然需要它们:(Compile:=file(“/external/lib”)中没有unmanageBase)
Compile
scope和packageBin
任务的帮助?如果没有,您可以分别设置这两个任务。抱歉,您误解了-我希望在编译(和测试)中使用umanaged JAR但我不想让它们包含在二进制发行版中。我基本上是在尝试复制maven中提供的作用域。有人知道怎么做吗?我会避免使用!\uu 1
,并用{case(x,y)if…=>…}
替换过滤器中的谓词。
mappings in Universal := (mappings in Universal).value filter { case (jar, path) =>
jar.getParentFile != (unmanagedBase in Compile).value
}