我需要为我的一个子项目构建一个jar,包括依赖项,以便它可以用作javaagent
。
我有一个多模块的sbt项目,这个特定的模块是最低级别的(它也是纯Java)。
我可以(例如sbt-onejar,sbt-proguard或sbt assembly)覆盖最低级别模块的打包方式吗?
看起来这些工具确实设计为发布后步骤,但我确实需要一个(替换或附加)已发布的工件来包含依赖项(但仅适用于这一个模块)。
更新: Publishing sbt-assembly是单个项目的说明,不容易转换为多项目。
答案 0 :(得分:18)
发布sbt-assembly是单个项目的说明,不容易转换为多项目。
人们一直在使用sbt-assembly& amp; sbt-release没有问题。以下是2011年的博客文章:Publishing fat jar created by sbt-assembly。归结为将addArtifact(Artifact(projectName, "assembly"), sbtassembly.AssemblyKeys.assembly)
添加到您的build.sbt
(请注意,博客有点过时AssemblyKeys
现在已成为sbtassembly
的成员。
对于sbt 0.13及以上版本,我更喜欢将build.sbt
用于多个项目,所以我会写它:
import AssemblyKeys._
lazy val commonSettings = Seq(
version := "0.1-SNAPSHOT",
organization := "com.example",
scalaVersion := "2.10.1"
)
val app = (project in file("app")).
settings(commonSettings: _*).
settings(assemblySettings: _*).
settings(
artifact in (Compile, assembly) ~= { art =>
art.copy(`classifier` = Some("assembly"))
}
).
settings(addArtifact(artifact in (Compile, assembly), assembly).settings: _*)
addArtifact返回一系列设置(包含在SettingsDefinition中)。在完整版本配置中,用法如下:
... lazy val proj = Project(...) .settings( addArtifact(...).settings : _* ) ...