Maven JAR文件仅包含HTML文件,而不包括Scala类

时间:2018-06-17 04:58:15

标签: scala maven sbt sbt-sonatype

我跟着this guide在Maven中发布了一个Scala / SBT JAR文件。

我为{-1}}和sbt publishSigned运行了spark-fast-tests 0.11.0版本,并正确构建了JAR文件。 See here。这些命令来自sbt-sonatype插件。

出于某种原因,当我执行0.12.0版本时,Maven JAR文件仅包含HTML文件和图像。例如,下载的JAR文件包含此文件sbt sonatypeRelease,但不包含com/github/mrpowers/spark/fast/tests/DatasetComparer.html

DatasetComparer.class文件也只包含HTML文件(target/scala-2.11/spark-fast-tests_2.11-2.3.0_0.12.0.jarsbt publishSigned必须生成此JAR文件。)

当我运行sbt sonatypeRelease时,生成的JAR文件会按预期包含像sbt package这样的Scala类。

spark-fast-tests是一个开源项目,这里是build.sbt file

如何将我的项目类包含在上传到Maven的JAR文件中?关于如何更好地调试这个的任何提示/技巧?

2 个答案:

答案 0 :(得分:1)

分析spark-fast-tests for i in `seq 1 22`; do python make_annot.py --gene-set-file CELL_TYPEGenes.GeneSet --bimfile ../../1000G_EUR_Phase3_plink/1000G.EUR.QC.${i}.bim --annot-file CELL_TYPE.${i}.annot.gz;done 我会提出以下建议:

  1. sbt-release添加到build.sbt以启用发布流程自定义:

    plugins.sbt
  2. 在项目根目录下创建addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.8") addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.0") addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0") 并将version.sbt设置移出version

    build.sbt
  3. 在项目根目录下创建version in ThisBuild := "0.12.1-SNAPSHOT" 并将以下设置移出sonatype.sbt

    build.sbt
  4. 将以下版本设置添加到homepage := Some(url("https://github.com/mrpowers/spark-fast-tests/")) scmInfo := Some( ScmInfo( url("https://github.com/mrpowers/spark-fast-tests/"), "git@github.com:mrpowers/spark-fast-tests.git" ) ) developers := List( Developer( "mrpowers", "Matthew Powers", "matthewkevinpowers@gmail.com", url("https://github.com/mrpowers/spark-fast-tests/") ) ) licenses += ("MIT", url("http://opensource.org/licenses/MIT")) publishMavenStyle := true

    build.sbt
  5. 使用import sbtrelease.ReleaseStateTransformations._ publishTo := Some( if (isSnapshot.value) { Opts.resolver.sonatypeSnapshots } else { Opts.resolver.sonatypeReleases } ) releasePublishArtifactsAction := PgpKeys.publishSigned.value releaseProcess := Seq[ReleaseStep]( checkSnapshotDependencies, inquireVersions, runClean, runTest, setReleaseVersion, commitReleaseVersion, tagRelease, publishArtifacts, setNextVersion, commitNextVersion, releaseStepCommand("sonatypeReleaseAll"), pushChanges )

  6. 发布到Maven Central

    对于一个工作示例,请查看sbt-sonatype本身的构建配置。

答案 1 :(得分:1)

聚会晚了一点,但是我对spark-testing-base也有同样的问题。 它源于您修改artifactName的方式:

artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) =>
  artifact.name + "-" + module.revision + "." + artifact.extension
}

,可能是从official SBT docs复制而来的。 请注意,尽管如此,文档在代码下方仍具有以下提示:

(请注意,实际上,您很少希望删除分类器。)

我对spark-testing-base的解决方案如下:

  artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) =>
    Artifact.artifactName(sv, module, artifact).replaceAll(s"-${module.revision}", s"-${sparkVersion.value}${module.revision}")
  }

这应该确保保留分类器(以及artifactName中可能有的其他附加内容),并解决包含文档而不是类文件的JAR文件的问题。