This page建议我可以将以下内容添加到〜/ .sbt / *中的文件.sbt
pgpPassphrase := Some(Array('a', 'b', 'c'))
当我这样做时,我收到错误
~/.sbt/pgp.sbt:1: error: reassignment to val
pgpPassphrase := Some(Array('a', 'b', 'c'))
^
我不确定如何(或者我可以)覆盖SBT中的设置。
答案 0 :(得分:2)
通过我的设置,我有~/.sbt/plugins/plugins.sbt
:
addSbtPlugin("com.typesafe.sbt" % "sbt-pgp" % "0.8")
和~/.sbt/global.sbt
:
pgpPassphrase := Some(Array('a', 'b', 'c'))
这可能与您已有的相同。
可能还有其他问题导致sbt-pgp加载错误。一种可能性是旧版本的插件仍然在类路径中。尝试按如下方式清理构建项目:
> reload plugin
> clean
> reload return
还要确保您加载的版本没有加载sbt-pgp插件。
答案 1 :(得分: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
我能够让构建停止向我询问密码的 ONLY 方式是将其直接注入我的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
,但它从未明确说明如何这样做(而且#&# 39;这个帖子的问题的一部分)。根据经验,在pgpPhassphrase
或~/.sbt
中放置/设置~/.sbt/0.13
不起作用。
我想我会在.settings()
中搜索如何外部化build.sbt
的值。但如果有人打败我,那将是值得赞赏的。
注意:显然,我们应该 NOT 将密码放在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))
我认为解决方法#2可能会更好,因为您可以在bash配置文件中导出密码。
我刚发现在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
确实有效(仅在 <?php
session_start();
if(isset($_SESSION['answer'])) {
$v11=$_SESSION['answer'];//boolean value
}
$q=100;
$f=200;
$r=300;
?>
<link rel="stylesheet" type="text/css" href="../../styles/messages.css" />
<html>
<table cellpadding="0" cellspacing="0" border="0">
<form action="" name = "page0" method="GET" enctype="multipart/form- data">
<tr >
<td colspan= > ID </td><br>
<td colspan="2" size="30"> NAME </td>
<td colspan="3" size="50" > MACH </td>
</tr>
<tr>
<td colspan=><input type="text" name="ID" class="rw" value="<?php $phpvar=$v11; echo $phpvar; ?>"></td>
<td colspan="2" ><input type="text" name="NAME" class="rw" size="30" value="<?php $phpvar=$f; echo $phpvar; ?>"></td>
<td colspan="2"><input type="text" name="MACH" class="rw" size="70" value="<?php $phpvar=$r; echo $phpvar; ?>"></td>
</tr>
<input type="submit" button class="button" value="Calculate" name="second_call" onclick= "document.write('<?php hello(); ?>');" />
</form>
</table>
</html>
<?php
function hello()
{
//some operation using values q, f, r
echo(result);
//i want this echo to work when i click submit on the previous page from where im redirecting here if v11=true
}
?>
中)。
答案 2 :(得分:0)
在插件的最后一个版本中,我让它在接下来的步骤中运行。
使用的版本:
localhost:5901
首先添加下一个插件来控制环境变量:
addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2")
然后在您的存储库中创建一个 .env 文件(重要的是将其添加到您的 .gitignore 中,此文件不应位于远程存储库中)
在文件中存储您的密码环境变量:
addSbtPlugin("au.com.onegeek" %% "sbt-dotenv" % "2.1.146")
然后你可以尝试再次运行,它应该可以工作。
<块引用>重要的是要注意这不是推荐的设置,因为有人 访问您的机器可以轻松获取密码。