如何解决从 SBT 向 JFrog 发布自定义工件
我尝试将自定义工件从 SBT 发布到 JFrog artifactory。 我有以下项目: SBT 1.4.3 版
project/plugins.sbt:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5")
build.sbt(我简化了实际的)
ThisBuild / scalaVersion := "2.11.12"
ThisBuild / organization := "my.org"
ThisBuild / organizationName := "company"
lazy val root = (project in file(".")).settings(
name := "my-project"
)
publishTo := {
val artifactory = "https://artifactory.company.org/artifactory/repo"
if (isSnapshot.value)
Some(
"Artifactory Realm" at s"$artifactory-snapshots;build.timestamp=" + new java.util.Date().getTime
)
else
Some("Artifactory Realm" at s"$artifactory-releases;keep_forever=release-artifact")
}
artifact in (Compile,assembly) := {
val art = (artifact in (Compile,assembly)).value
art.withClassifier(Some("assembly"))
}
addArtifact(artifact in (Compile,assembly),assembly)
val packAnsible = taskKey[File]("Pack ansible files.")
val ansibleArtifactName = settingKey[String]("Ansible artifact name")
packAnsible := {
val ansibleZip =
target.value / s"scala-${scalaBinaryVersion.value}" / s"${name.value}.zip"
IO.zip(
IO.listFiles(Path("ansible").asFile).map(f => (f,f.name)),ansibleZip,None
)
ansibleZip
}
artifact in packAnsible := Artifact(name.value,"zip","zip").withClassifier(Some("ansible"))
addArtifact(artifact in packAnsible,packAnsible)
如您所见,我添加了 2 个要发布的工件:
在我的存储库中发布后,我几乎可以找到所有我想要的:
- repo/com/org/my-project_2.11/0.1.0-SNAPSHOT/my-project_2.11-0.1.0-0.3.2-20210301.161254-1-assembly.jar
- repo/com/org/my-project_2.11/0.1.0-SNAPSHOT/my-project_2.11-0.1.0-0.3.2-20210301.161254-1-javadoc.jar
- repo/com/org/my-project_2.11/0.1.0-SNAPSHOT/my-project_2.11-0.1.0-0.3.2-20210301.161254-1-sources.jar
- repo/com/org/my-project_2.11/0.1.0-SNAPSHOT/my-project_2.11-0.1.0-0.3.2-20210301.161254-1.jar
- repo/com/org/my-project_2.11/0.1.0-SNAPSHOT/my-project_2.11-0.1.0-0.3.2-20210301.161254-1.pom
- repo/com/org/my-project_2.11/0.1.0-SNAPSHOT/my-project_2.11-0.1.0-0.3.2-SNAPSHOT-ansible.zip
- repo/com/org/my-project_2.11/0.1.0-SNAPSHOT/maven-Metadata.xml
我可以在 maven-Metadata 中看到除我的 zip 之外的所有其他工件,并且 jar 的名称不包含 build.time,因此除非我授予用户覆盖/删除的权限,否则下次构建时将失败我不想这样做。
我尝试遵循 docs
并在我的构建服务器 -Dsbt.override.build.repos=true
和我的项目根目录中添加了 /usr/local/etc/sbtopts
。
我想让所有神器(只有我的服装目前没有)正确发布。
感谢您的帮助。
解决方法
显然问题出在我用于自定义工件的名称上:
artifact in packAnsible := Artifact(name.value,"zip","zip").withClassifier(Some("ansible"))
应该是:
artifact in packAnsible := Artifact((Compile / packageBin / artifact).value.name,"zip")
.withClassifier(Some("ansible"))
我在实际构建中使用了不同的 .
和 -
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。