【问题标题】:Excluding unmanaged dependencies from universal:packageBin in sbt-native-packager?从 sbt-native-packager 中的 Universal:packageBin 中排除非托管依赖项?
【发布时间】:2014-05-01 17:15:40
【问题描述】:

我有一个带有 jar 的外部 lib 目录。我需要将这些包含在我的类路径中以编译和测试我的项目,但我不想将它们包含在通过universal:packageBin(在sbt-native-packager)(或dist,如果你'重新使用playframework

我尝试通过使用provided 范围来做到这一点,如下所示:

unmanagedBase in Provided := new java.io.File("/external/lib")

但这似乎不像宣传的那样工作 - 罐子似乎没有包含在 Compile 范围内。

我正在使用 sbt 0.13.1

【问题讨论】:

  • 试试unmanageBase in packageBin := file("/external/lib")
  • 不幸的是,@laughedelic,从编译范围中删除了 deps - 我仍然需要它们:(
  • unmanageBase in Compile := file("/external/lib")Compile 范围和packageBin 任务都没有帮助吗?如果没有,您可以单独设置。
  • 抱歉,您误会了 - 我希望在编译(和测试)中使用非托管 jar,但我希望它们包含在二进制分发中。我基本上是在尝试复制 Provided 范围在 Maven 中的作用。
  • 有人知道怎么做吗?

标签: playframework-2.0 sbt sbt-native-packager


【解决方案1】:

这很有效(感谢@jacek-laskowski 对我的回答的改进):

mappings in Universal :=  (mappings in Universal).value.filter { case(jar, _) => jar.getParentFile != unmanagedBase.value }

但是,它仍然感觉像是一个杂物,如果 sbt(和 sbt-native-packager)能够正确支持 Provided 范围,我会更喜欢它,因为这种情况正是它的意思。

【讨论】:

  • 我会避免使用!_._1 并将filter 中的谓词替换为{ case (x,y) if ... => ... }
【解决方案2】:

我建议以下解决方案:

mappings in Universal := (mappings in Universal).value filter { case (jar, path) => 
  jar.getParentFile != (unmanagedBase in Compile).value
}

它重复了mappings in Universal,这可以通过~= 避免,但是没有提供.value 宏支持。

我认为该解决方案是类型安全的,因为它使用 unmanagedBase in Compile 设置的值 java.io.File(而不是容易出现拼写错误的 java.lang.String)。

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 1970-01-01
    • 2016-02-14
    • 2018-11-28
    • 2015-02-22
    • 2016-12-24
    • 2015-06-21
    • 2013-10-09
    • 2016-09-28
    相关资源
    最近更新 更多