scala – 如何使sbt-native-packager避免将我的资源放入jar文件
我正在使用
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提供类似的设置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |