このページでは、 ~/.sbt/*.sbt のファイルに以下を追加できることを示唆しています
pgpPassphrase := Some(Array('a', 'b', 'c'))
私が行うと、エラーが発生します
~/.sbt/pgp.sbt:1: error: reassignment to val
pgpPassphrase := Some(Array('a', 'b', 'c'))
^
SBT の設定を上書きする方法 (またはできるかどうか) がわかりません。
私は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.sbt
のscala.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
)。