0

カスタム アーティファクトを SBT から JFrog アーティファクトに公開しようとしています。次のプロジェクトがあります: SBT バージョン 1.4.3

プロジェクト/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 つのアーティファクトを追加します。

  1. 分類子「アセンブリ」を使用した uber jar
  2. 分類子「ansible」を持ついくつかの ansible 変数を含む zip

リポジトリに公開した後、私が望むほとんどすべてのものを見つけることができます:

  • リポジトリ/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
  • リポジトリ/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
  • リポジトリ/com/org/my-project_2.11/0.1.0-SNAPSHOT/maven-metadata.xml

maven-metadata で、zip を除く他のすべてのアーティファクトを確認できます。また、jar の名前には build.time が含まれていないため、ユーザーに上書き/削除する権限を与えない限り、次のビルドで失敗します。に。

私はドキュメントに従ってみ、プロジェクトのルートと-Dsbt.override.build.repos=trueビルドサーバーの両方に 追加しました。/usr/local/etc/sbtopts

すべてのアーティファクト (現在、私のコスチュームのみ) を適切に公開したいと考えています。

助けてくれてありがとう。

4

1 に答える 1

0

どうやら問題は、カスタム アーティファクトに使用した名前にあったようです。

artifact in packAnsible := Artifact(name.value, "zip", "zip").withClassifier(Some("ansible"))

次のようにする必要があります。

artifact in packAnsible := Artifact((Compile / packageBin / artifact).value.name, "zip", "zip")
  .withClassifier(Some("ansible"))

実際のビルドでは.とが異なっていました。-

于 2021-03-01T20:39:43.763 に答える