3

このページでは、 ~/.sbt/*.sbt のファイルに以下を追加できることを示唆しています

pgpPassphrase := Some(Array('a', 'b', 'c'))

私が行うと、エラーが発生します

~/.sbt/pgp.sbt:1: error: reassignment to val
pgpPassphrase := Some(Array('a', 'b', 'c'))
^

SBT の設定を上書きする方法 (またはできるかどうか) がわかりません。

4

3 に答える 3

1

私はsbt 0.13.11を使用しています。これは私がやったことです。

で、~/.sbt/pluginsこのファイルを追加しました~/.sbt/plugins/gpg.sbt。その内容は以下の通りです。

addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0")

私のプロジェクトsite.sbtでは、行を追加しました。

addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "1.1")

この行を次の場所に追加しようとしましたがpgpPassphrase := Some(Array('a', 'b', 'c'))、構文が原因で失敗するか、パスフレーズの入力を求められ続けます。

  • ~/.sbt/global.sbt
  • ~/.sbt/0.13/global.sbt

ビルドがパスフレーズを要求するのを止めることができた唯一build.sbtの方法は、それをファイルに直接挿入することでした。例えば、

lazy val commonSettings = Seq(
    organization := "com.something",
    version := "0.0.1-SNAPSHOT",
    scalaVersion := "2.10.6",
    publishMavenStyle := true,
    publishTo := {
        val nexus = "http://nexus.something.io/"
        if (isSnapshot.value)
            Some("snapshots" at nexus + "content/repositories/snapshots")
        else
            Some("releases"  at nexus + "content/repositories/releases")
    },
    publishArtifact in Test := false,
    pomIncludeRepository := { _ => false },
    pomExtra := (
            <url>http://gitlab.something.io/something/project</url>
            <scm>
                <url>git@gitlab.something.io:something/project</url>
                <connection>scm:git:git@gitlab.something.io:something/project.git</connection>
                <developerConnection>scm:git:git@gitlab.something.io:something/project.git</developerConnection>
            </scm>
            <developers>
                <developer>
                    <email>myemail@gmail.com</email>
                    <name>my name</name>
                    <url>https://github.com/mysite</url>
                    <id>myid</id>
                    <organization>My Org</organization>
                    <organizationUrl>https://github.com/me</organizationUrl>
                </developer>
            </developers>),
    pgpPassphrase := Some(Array('a','b','c'))
)

または、他の場所でも定義できましたbuild.sbt

lazy val project = (project in file("."))
      .settings(commonSettings: _*)
      .settings(pgpPassphrase := Some(Array('a','b','c')))
      .settings(name := "my-project")
      .settings(libraryDependencies ++= commonDeps)
      .settings(parallelExecution in Test := false)
      .settings(javaOptions ++= Seq("-Xms512M", "-Xmx2048M", "-XX:MaxPermSize=2048M", "-XX:+CMSClassUnloadingEnabled"))

私の弱点は、私が SBT について十分に知らないことですが、オンラインのドキュメントには、外部pgpPassphrase化するファイルを作成できると書かれていますが、その方法については明確に述べられていません (それがこの投稿の問題の一部です)。経験的に、 orに配置/設定pgpPhassphraseすることはできません。~/.sbt~/.sbt/0.13

.settings()inの値を外部化する方法を探していると思いますbuild.sbt。しかし、誰かが私を打ち負かすなら、それはありがたいです.

注: 明らかに、パスフレーズを build.sbt (または SCM でバージョン管理されたファイル) に置くべきではありません。

これは、回避策 #1 の一部です。

lazy val project = (project in file("."))
      .settings(commonSettings: _*)
      .settings(pgpPassphrase := scala.util.Properties.propOrNone("gpg.passphrase").map(_.toCharArray))
      .settings(name := "my-project")
      .settings(libraryDependencies ++= commonDeps)
      .settings(parallelExecution in Test := false)
      .settings(javaOptions ++= Seq("-Xms512M", "-Xmx2048M", "-XX:MaxPermSize=2048M", "-XX:+CMSClassUnloadingEnabled"))

これにより、次のように sbt を呼び出すことができますsbt -Dgpg.passphrase=abc publish-signed

回避策 #2。

lazy val project = (project in file("."))
      .settings(commonSettings: _*)
      .settings(pgpPassphrase := Some(System.getenv("GPG_PASSPHRASE").toCharArray))
      .settings(name := "my-project")
      .settings(libraryDependencies ++= commonDeps)
      .settings(parallelExecution in Test := false)
      .settings(javaOptions ++= Seq("-Xms512M", "-Xmx2048M", "-XX:MaxPermSize=2048M", "-XX:+CMSClassUnloadingEnabled"))

このアプローチでは、パスフレーズをエクスポートする必要がexport GPG_PASSPHRASE=abcあり、実行するだけsbt publish-signedです。

パスフレーズをエクスポートすると、次の行が値を取得しないことに注意してください (少なくとも私の環境では)。.settings(pgpPassphrase := scala.util.Properties.envOrNone("GPG_PASSPHRASE").map(_.toCharArray))

bash プロファイルでパスフレーズをエクスポートできるので、回避策 #2 の方がよいと思います。

の中にbuild.sbtscala.util.Properties.envOrNoneような環境変数が見つからないことがわかりましたGPG_PASSPHRASE。このようなものを単にエクスポートするとexport gpg.passphrase=abc、bash が文句を言います。妥協点として、 を実行する場合はexport gpgpassphrase=abc、 を実行.settings(pgpPassphrase := scala.util.Properties.envOrNone("gpgpassphrase").map(_.toCharArray))してbuild.sbtを呼び出すだけsbt publish-signedです。

scala.util.Properties.envOrNone('GPG_PASSPHRASE')scala REPLでは実際に動作することに注意するのは興味深いことです(ただし、 では動作しませんbuild.sbt)。

于 2016-06-30T08:29:42.507 に答える