我有一个项目使用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和一个胖罐的惯用方法是什么?
答案 0 :(得分:4)
我会创建一个multi project构建文件,其中一个核心子项目将发布为“plain”,一个fat子项目将使用JNI发布,然后你可以使用两个不同的工件名称,比如foo-core
和foo-fat
。
事实上,foo-fat
可能依赖 foo-core
,而它自己的工件只包含JNI内容。