【问题标题】:How to change the naming structure of the dependent libraries in the zip produced by sbt-native-packager?如何更改sbt-native-packager生成的zip中依赖库的命名结构?
【发布时间】:2017-04-07 01:46:51
【问题描述】:

我正在使用 sbt-native-packager 的通用插件来创建一个 zip 包。我正在使用以下设置来创建默认结构:

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.4")

enablePlugins(JavaAppPackaging)

目前我在 zip 中的所有项目依赖项都在 lib 文件夹下,例如

lib/
    ch.qos.logback.logback-classic-1.1.3.jar
    dom4j.dom4j-1.6.1.jar

如何将所有库的名称更改为仅包含 jar 的 artifactId 和版本而不包含完整名称。例如,对于上述内容,我想要这样的东西:

lib/
    logback-classic-1.1.3.jar
    dom4j-1.6.1.jar

【问题讨论】:

    标签: scala sbt sbt-native-packager


    【解决方案1】:

    此逻辑在JavaAppPackaging 原型中硬编码。但是,您可以重新映射库依赖项。

    mappings in Universal := (mappings in Universal).value.map {
      case (file, dest) if dest.startsWith("lib/") =>
            file -> changeDestination(dest)
      case mapping => mapping
    }
    
    def changeDestination(dest: String): String = ???
    

    接下来您需要更改负责BashStartScriptPlugin 中定义的app_classpathscriptClasspathOrdering

    scriptClasspathOrdering := scriptClasspathOrdering.value.map {
       case (file, dest) if dest.startsWith("lib/") =>
             file -> changeDestination(dest)
       case mapping => mapping
    }
    

    目标文件夹应该是 lib/,因为 bash 脚本假定了这一点。

    请注意,我没有对此进行测试,因为这是一个非常罕见的用例。但是主要思想应该很清楚:)

    干杯, 渚

    【讨论】:

      猜你喜欢
      • 2014-09-13
      • 2022-06-22
      • 2016-02-15
      • 2014-02-28
      • 2016-02-15
      • 2016-09-15
      • 2019-02-27
      • 2015-06-21
      • 2014-05-01
      相关资源
      最近更新 更多