我想知道如何修改默认工件,以便为使用SBT发布的工件提供以下结构:
my_artifact.zip
-config/default.conf
-my_package.jar
这实际上非常简单。我希望我的最终工件包含这两个并且能够将类型更改为zip。我试图访问默认的工件映射,但没有任何结果:
artifact in (Compile, publish) := {
val previous: Artifact = (artifact in (Compile, publish)).value
previous.withName("test_artifact" + "." + previous.extension)
previous.withType("zip")
previous.withExtension("zip")
previous
}
mappings in packagedArtifact in (Compile, packageBin) += {
file(s"${baseDirectory.value.getPath}/src/main/config/current.conf") -> "config/current.conf"
}
我有什么建议可以实现这个目标吗?
答案 0 :(得分:1)
我认为您的代码存在的问题是您正在返回"之前的#34;这是不可改变的。因此,它确实完成了之前要做的事情,并且您所做的更改将丢失。我能够使用以下代码修改工件
lazy val root = (project in file(".")).
settings(
inThisBuild(List(
organization := "com.example",
scalaVersion := "2.12.4",
version := "0.1.0-SNAPSHOT"
)),
name := "sbtartifact",
artifact in (Compile, packageBin) := {
val previous = (artifact in (Compile, packageBin)).value
previous.withType("bundle").withExtension("bundle")
},
libraryDependencies += scalaTest % Test
)
请注意,我之前没有返回previous.withType("bundle").withExtension("bundle")
,而是先前发布的变异副本。
答案 1 :(得分:0)
在阅读了更多关于SBT之后,我意识到我根本不需要修改工件。实际上我只是通过将sbt-assembly与后期构建任务结合使用来设法更改目录结构:
import socket
import psutil
def get_ip_addresses(family):
for interface, snics in psutil.net_if_addrs().items():
for snic in snics:
if snic.family == family:
yield (interface, (snic.address, snic.netmask))
ipv4s = dict(get_ip_addresses(socket.AF_INET))
macs = dict(get_ip_addresses(psutil.AF_LINK))
mac2ipv4 = {macs[k][0]: ipv4s[k] for k in set(macs) & set(ipv4s)}
print mac2ipv4
postBuild负责内容修改。在finalBuild中,我执行stb-assembly任务,然后按顺序执行postBuild