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

Jak*_*sky 7 java-native-interface scala sbt

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

为了保持尽可能灵活,我目前计划发布这种项目是发布两个不同的jar:一个包含纯字节码(本机二进制的引用留给最终用户)和一个胖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和一个胖罐的惯用方法是什么?

0__*_*0__ 4

我将创建一个多项目构建文件,其中包含一个将“普通”发布的核心子项目和一个将使用 JNI 发布的胖子项目,然后您可以使用两个不同的工件名称,例如foo-corefoo-fat

事实上,foo-fat可以依赖foo-core,并且它自己的工件将仅包含 JNI 内容。