gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:40:14 34 4
gpt4 key购买 nike

我正在使用 sbt-native-packager为我的应用程序生成启动脚本的插件,这非常方便,因为该插件使用我的所有库依赖项生成正确的类路径规范。我不会分发这个应用程序,因此我不会将整个内容打包到一个 tarball 中。我只是使用 lib由 sbt-native-packager 生成的目录,其中包含我的项目所依赖的所有 jar 文件,包括第三方库以及包含我自己的类和资源文件的 jar 文件。

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

问题:如何告诉 sbt-native-packager 不要将我的资源文件放入 jar 文件,同时仍然生成具有正确类路径的启动脚本,这些资源文件将被我的应用程序定位和读取,就像它们现在一样从 jar 文件中?如果这意味着将我所有的类文件从一个很好的 jar 文件中删除,只要来自 src/main/resources 的文件。保留为无需重新调用即可更改的文件 sbt stage并且只要启动脚本有效。

最佳答案

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

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

一种更简单但很笨的方法是将以下几行添加到您的 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 提供类似的设置。 .

关于scala - 如何让 sbt-native-packager 避免将我的资源放入 jar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25559626/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com