SBT项目发布2个工件的惯用方法是什么?

时间:2014-01-15 20:35:20

标签: scala java-native-interface sbt

我有一个项目使用SBT作为构建系统,并将Scala / Java和本机源与JNI结合使用。

为了保持尽可能灵活,我目前计划发布这种项目是发布两个不同的jar:一个包含纯字节码(本地二进制文件的引用留给最终用户)和一个胖罐子它还包含本机库并自动提取它们。

为了生成一个胖jar,我创建了一个名为packageFat的任务,它基本上将任务packageBin复制到本机库,并在名称后附加'-fat'后缀。

可以在此处查看构建配置的相关部分:https://github.com/jodersky/flow/blob/master/project/nativefat.scala

但是,使用这种配置,任何依赖于我并希望包含fat jar的项目都必须以这种形式声明依赖项:

libraryDependencies += "<organization>" %% "<name>" % "<version>" artifacts Artifact("<name>-fat", "jar", "jar")

我知道使用JNI分发项目有点笨拙,但是在最后一个'%'之后的部分使得依赖非常麻烦。所以我的问题是:SBT从一个项目中发布一个普通jar和一个胖罐的惯用方法是什么?

1 个答案:

答案 0 :(得分:4)

我会创建一个multi project构建文件,其中一个核心子项目将发布为“plain”,一个fat子项目将使用JNI发布,然后你可以使用两个不同的工件名称,比如foo-corefoo-fat

事实上,foo-fat可能依赖 foo-core,而它自己的工件只包含JNI内容。