web-dev-qa-db-ja.com

公開成功にもかかわらず「公開リポジトリが指定されていません」

私は別のSettings.scala次のような私の大規模なSBTプロジェクトのファイル:

lazy val commonSettings = Seq(
  // ... lots of settings
  publishTo :=
    Some("Sonatype Nexus Repository Manager" at
      "http://my.company.nexus/content/repositories/releases/"),
  credentials += Credentials(Path.userHome / ".ivy2" / ".credentials"),
  publishMavenStyle := true,
  crossScalaVersions := Seq("2.10.6"),
  // ... lots of other settings
)

これで、すべてのプロジェクトがbuild.sbtは次のように定義されています。

lazy val aProject =
  project.in(file("somewhere/aProject")).
    settings(commonSettings).
    settings(
      // project specific settings
    )

私が今するとき

sbt "+ publish"

すべてのアーティファクトが公開されていることがわかります。Nexusを調べると、アーティファクトがそこにあり、依存関係などとしても使用できるため、公開は機能しますが、最後に次のようになります。

Java.lang.RuntimeException: Repository for publishing is not specified.
    at scala.sys.package$.error(package.scala:27)
    at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1470)
    at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1470)
    at scala.Option.getOrElse(Option.scala:120)
    at sbt.Classpaths$.getPublishTo(Defaults.scala:1470)
    at sbt.Classpaths$$anonfun$59.apply(Defaults.scala:1150)
    at sbt.Classpaths$$anonfun$59.apply(Defaults.scala:1150)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
    at sbt.std.Transform$$anon$4.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:235)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)

Sbtファイルに何が欠けている/間違っているのですか?

17
rabejens

プロジェクトがビルド内のルートディレクトリに定義されていない場合、sbtは、ビルド内の他のすべてのプロジェクトを集約するデフォルトのプロジェクトを作成します。

ルートプロジェクトを定義していないのではないかと思うので、SBTは独自に定義し、もちろん共通の設定を取得しません。 + publishを使用すると、SBTはそれを公開しようとし、集約するすべてのプロジェクトの公開から開始し(成功します)、集約プロジェクト自体の公開に失敗します。

これを修正するには、次のいずれかを行います。

  1. ルートプロジェクトを定義し、必要な設定を明示的に指定するだけです(必ずしも同じである必要はありません。実際に公開するものはないため、おそらくpublishArtifact := falseが必要です)。

  2. 設定を行います グローバル

    publishTo in ThisBuild := ...
    

参照 ThisBuildスコープとGlobalスコープの違いは何ですか?

24
Alexey Romanov

残念ながら、publishArtifact := falseが公開を妨げないビルドがあり(sbt-pgpプラグインからpublishSignedを使用するなど)、それでもroot/*:publishSignedConfiguration) Repository for publishing is not specifiedエラーが発生する可能性があります。

SBT問題3136 は、2017年10月の時点でプロジェクト内のすべての公開アクティビティを無効にするためのより良い設定がskip in publish := trueであることを示唆しています(SBT1.0.3)。

7
Ben Hutchison

sbt-Assembly-pluginを本番環境に使用できます! this を参照してください

0
Tushar Walzade