【问题标题】:Maven JAR file only includes HTML files, not Scala classesMaven JAR 文件只包含 HTML 文件,不包含 Scala 类
【发布时间】:2018-11-26 09:03:42
【问题描述】:

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

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

由于某种原因,当我发布 0.12.0 版本时,Maven JAR 文件只包含 HTML 文件和图像。例如,下载的 JAR 文件包含此文件 com/github/mrpowers/spark/fast/tests/DatasetComparer.html,但不包含 DatasetComparer.class

target/scala-2.11/spark-fast-tests_2.11-2.3.0_0.12.0.jar 文件也只包含 HTML 文件(sbt publishSignedsbt sonatypeRelease 必须已生成此 JAR 文件)。

当我运行 sbt package 时,生成的 JAR 文件包含像 com/github/mrpowers/spark/fast/tests/DatasetComparer.class 这样的 Scala 类,正如预期的那样。

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

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

【问题讨论】:

    标签: scala maven sbt sbt-sonatype


    【解决方案1】:

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

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

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

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

    我对@9​​87654325@ 的解决方案如下:

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

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

    【讨论】:

      【解决方案2】:

      分析 spark-fast-tests build.sbt 我会提出以下建议:

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

        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")
        
      2. 在项目根目录创建version.sbt 并将version 设置移出build.sbt

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

        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
        
      4. 将以下发布设置添加到build.sbt

        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
        )
        
      5. 使用 sbt release 发布到 Maven Central

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

      【讨论】:

      • 非常感谢您的回复。我按照您的所有步骤运行了sbt release 命令。当我确认 Maven JAR 文件包含 Scala 类(如您所知,Maven 有相当滞后)后,我会报告并接受您的回答。
      • 我使用您的代码发布了 spark-fast-tests 0.12.1 版本,不幸的是,JAR 文件仍然只包含 HTML、gif、js、png 等文件。你可以去 Maven,下载 jar,然后运行jar tvf spark-fast-tests_2.11-0.12.1.jar 命令来看看我的意思。有关如何解决此问题的任何其他建议?
      • 如果你运行sbt clean publishLocal,然后运行jar -tf ~/.ivy2/local/com.github.mrpowers/spark-fast-tests_2.11/0.12.1/jars/spark-fast-tests_2.11.jar,你能看到类吗?
      • 是的,当我运行这些命令时,我可以在 JAR 文件中看到 Scala 类。
      • 尝试碰碰addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.3"),然后碰碰sbt clean publishpublish 命令(而不是 release)将发布一个 SNAPSHOT 版本到 oss.sonatype.org/content/repositories/snapshots/com/github/…,这使我们能够在不污染 Maven 生产的情况下进行测试。看看快照版本是否有同样的问题。 sbt-sonatype 2.3 已为您正在使用的 SBT 0.13.17 交叉构建:github.com/xerial/sbt-sonatype/compare/…
      猜你喜欢
      • 2019-08-26
      • 2021-09-23
      • 2023-02-12
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多