簡體   English   中英

Spark / scala:使用 sbt 發布單個胖 jar

[英]Spark / scala : publish a single fat jar with sbt

我正在嘗試將單個 Fat Jar 從 spark/scala 項目部署到私有 nexus 存儲庫。 發布工作正常,但我得到大量文件而不是單個程序集 Jar:

  • *-組裝.jar
  • *-assembly.jar.md5
  • *-assembly.jar.sha1
  • *-javadoc.jar
  • *-javadoc.jar.md5
  • *-javadoc.jar.sha1
  • *-source.jar
  • *-source.jar.md5
  • *-source.jar.sha1
  • *.jar
  • *.jar.md5
  • *.jar.sha1
  • *-pom.jar
  • *-pom.jar.md5
  • *-pom.jar.sha1

我的built.sbt是:

name         := "SampleApp"
version      := "0.1-SNAPSHOT"
scalaVersion := "2.12.14"

ThisBuild / useCoursier := false

libraryDependencies ++= Seq(
  "com.github.scopt" %% "scopt"     % "4.0.1",
  "org.apache.spark" %% "spark-sql" % "3.1.1" % "provided"
)

resolvers ++= Seq(
  "confluent" at "https://packages.confluent.io/maven/"
)

assembly / assemblyMergeStrategy := {
  case PathList("META-INF","services",xs @ _*) => MergeStrategy.filterDistinctLines
  case PathList("META-INF",xs @ _*) => MergeStrategy.discard
  case "application.conf" => MergeStrategy.concat
  case _ => MergeStrategy.first
}

assembly / assemblyExcludedJars := {
  val cp = (assembly / fullClasspath).value
  cp filter { f =>
    f.data.getName.contains("hadoop-hdfs-2")
    f.data.getName.contains("hadoop-client")
  }
}

assembly / artifact := {
  val art = (assembly / artifact).value
  art.withClassifier(Some("assembly"))
}

assembly / assemblyJarName := s"${name.value}-${version.value}.jar"

addArtifact(assembly / artifact, assembly)

resolvers += ("Sonatype Nexus Repository Manager" at "http://localhost:8081/repository/app/").withAllowInsecureProtocol(true)
credentials += Credentials("Sonatype Nexus Repository Manager", "localhost:8081", "user", "pass")

publishTo := {
  val nexus = "http://localhost:8081/repository/app/"
  if (isSnapshot.value) {
    Some("snapshots" at nexus + "test-SNAPSHOT")
 } else
    Some("releases"  at nexus + "test-RELEASE")
}

有沒有辦法在發布之前使用 sbt 過濾文件,以便僅獲得 *-assembly.jar? 非常感謝。

在我的情況下,這應該禁止發布不必要的文件:

publishArtifact in (Compile, packageBin) := false
publishArtifact in (Compile, packageDoc) := false
publishArtifact in (Compile, packageSrc) := false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM