加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何使sbt-native-packager避免将我的资源放入jar文件

发布时间:2020-12-16 18:30:53 所属栏目:安全 来源:网络整理
导读:我正在使用 sbt-native-packager插件为我的应用程序生成一个启动脚本,这非常方便,因为这个插件生成了包含所有库依赖项的正确类路径规范.我没有分发这个应用程序,因此我没有把整个东西打包成一个tarball.我只使用sbt-native-packager生成的lib目录,它包含我的
我正在使用 sbt-native-packager插件为我的应用程序生成一个启动脚本,这非常方便,因为这个插件生成了包含所有库依赖项的正确类路径规范.我没有分发这个应用程序,因此我没有把整个东西打包成一个tarball.我只使用sbt-native-packager生成的lib目录,它包含我的项目所依赖的所有jar文件,包括第三方库以及包含我自己的类和资源文件的jar文件.

在我的项目的src / main / resources目录中,我有一些文件,我希望能够编辑而无需使用sbt-native-packager重新生成整个安装,例如配置文件.这很困难,因为这些文件在我的所有类的jar文件中都被压缩了.

问题:如何告诉sbt-native-packager不要将我的资源文件放入jar文件中,同时仍然生成具有正确类路径的启动脚本,以便我的应用程序找到并读取这些资源文件,因为它们现在是从jar文件中?如果这意味着将所有类文件保留在一个很好的jar文件中,只要src / main / resources中的文件保留为我可以更改的文件,而无需重新调用sbt stage并且只要start-script工作.

解决方法

虽然可以过滤这些资源,但我建议将它们放入不同的目录并将它们添加到类路径中.

修改sbt-native-packager生成的启动脚本有点麻烦,因为生成类路径的类com.typesafe.sbt.packager.archetypes.JavaAppBashScript使用$lib_dir /为所有路径添加前缀.最干净的方法可能是提供您自己的实现并使用它来生成bashScriptDefines.

一个更简单但更hacky的方法是将以下行添加到build.sbt:

packageArchetype.java_server

// add your config files to the classpath for running inside sbt
unmanagedClasspath in Compile += Attributed.blank(sourceDirectory.value/"main"/"config")

// map all files in src/main/config to config in the packaged app
mappings in Universal ++= {
  val configDir = sourceDirectory.value/"main"/"config"
  for {
    file <- (configDir ** AllPassFilter).get
    relative <- file.relativeTo(configDir.getParentFile)
    mapping = file -> relative.getPath
  } yield mapping
}

scriptClasspath ~= (cp => "../config" +: cp)

这将在您的启动脚本的类路径中添加$lib_dir /../ config.如果您的应用必须在Windows上运行,则必须为batScriptDefines提供类似的设置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读