在 sbt 程序集中指定 jar 结构
Specify jar structure in sbt assembly
当 sbt-assembly 构建一个 fat jar 时,它会将所有依赖项放在主文件夹中。我需要构建一个看起来像这样的 jar
--域名
- 域名类
-- 库
- 依赖性类
是否可以使用 sbt assembly 或任何其他插件来做到这一点?
如果你想分离你的应用jar文件和你的依赖jar文件,这是我用sbt找到的最实用的方法;
创建 project/plugins.sbt 文件(如果不存在)并添加以下行:
addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.8.0")
添加此行后刷新您的项目。
注意:插件版本可能会及时更改。
当 sbt 刷新完成时 像这样更新您的 build.sbt 文件:
lazy val MyApp = project.in(file("."))
.settings(artifactName := {(
sv: ScalaVersion,
module: ModuleID,
artifact: Artifact) => "MyApp.jar"
})
.settings(packSettings)
然后运行:
sbt pack
或者,如果您正在为子项目执行此操作,运行 这个:
sbt "project childproject" clean pack
这将很好地分离您的主 jar 文件和您的依赖 jar。
您的应用程序 jar 将位于目标 scala 文件夹中。
您的依赖项将在 target/pack/lib.
这样你就可以部署一次你的依赖。
无论何时更改应用程序,您都可以部署应用程序 jar 文件。
因此,在每次更改时,您都不必部署 uber jar 文件。
同样在生产中,您可以 运行 您的应用程序:
java -cp "MyApp.jar:dependency_jars_folder/*" com.myapp.App
当 sbt-assembly 构建一个 fat jar 时,它会将所有依赖项放在主文件夹中。我需要构建一个看起来像这样的 jar
--域名
- 域名类
-- 库
- 依赖性类
是否可以使用 sbt assembly 或任何其他插件来做到这一点?
如果你想分离你的应用jar文件和你的依赖jar文件,这是我用sbt找到的最实用的方法;
创建 project/plugins.sbt 文件(如果不存在)并添加以下行:
addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.8.0")
添加此行后刷新您的项目。 注意:插件版本可能会及时更改。
当 sbt 刷新完成时 像这样更新您的 build.sbt 文件:
lazy val MyApp = project.in(file("."))
.settings(artifactName := {(
sv: ScalaVersion,
module: ModuleID,
artifact: Artifact) => "MyApp.jar"
})
.settings(packSettings)
然后运行:
sbt pack
或者,如果您正在为子项目执行此操作,运行 这个:
sbt "project childproject" clean pack
这将很好地分离您的主 jar 文件和您的依赖 jar。
您的应用程序 jar 将位于目标 scala 文件夹中。
您的依赖项将在 target/pack/lib.
这样你就可以部署一次你的依赖。
无论何时更改应用程序,您都可以部署应用程序 jar 文件。
因此,在每次更改时,您都不必部署 uber jar 文件。
同样在生产中,您可以 运行 您的应用程序:
java -cp "MyApp.jar:dependency_jars_folder/*" com.myapp.App