我已经看到了:在使用Maven发布插件时避免使用gpg签名提示,但它适用于非常旧版本的maven,而我使用的是3.2.2,因此相同的解决方案不适用.
基本上,无论命令行上的属性组合,pom.xml中的属性,还是环境变量,我都无法获取maven gpg插件以避免弹出代理对话框.
出于安全原因,我们已决定不在settings.xml中以纯文本形式包含密码,因为这是一个糟糕的主意.使用加密的maven东西只是将主密钥移动到不同的纯文本文件.
软件版本:
$ gpg --version
gpg (GnuPG) 2.1.2
libgcrypt 1.6.2
$ mvn --version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T08:51:42-05:00)
Run Code Online (Sandbox Code Playgroud)
我试过了
mvn -Dgpg.passphrase='lolpassphrase'
Run Code Online (Sandbox Code Playgroud)
使用pom.xml中的属性从环境中获取它:
<properties>
<gpg.keyname>E7C89BBB</gpg.keyname>
<gpg.passphrase>${env.GPG_PASSPHRASE}</gpg.passphrase>
</properties>
Run Code Online (Sandbox Code Playgroud)
然后:
GPG_PASSPHRASE='lolpassphrase' mvn install
Run Code Online (Sandbox Code Playgroud)
编辑:显然我的gpg代理正在妨碍我,如果我在pom.xml属性中设置实际的密码,GPG代理仍会提示我:(
<properties>
<gpg.keyname>E7C89BBB</gpg.keyname>
<gpg.passphrase><![CDATA[lolcomplicatedpassphrase]]></gpg.passphrase>
</properties>
Run Code Online (Sandbox Code Playgroud)
必须有一种方法可以做到这一点,而无需在某处保留密码的纯文本,但我无法使用正确的谷歌找到这个答案,希望你们可以帮助我.
我找到了sbt-groovy插件,它恰当地编译了测试和主要来源.但是,definedTests密钥总是空的; SBT从未发现任何常规测试.我已用一个非常简单src/test/groovy/Test.groovy的单一方法验证了这一点,其中一个方法是注释的@Test,应该由junit-interface选取.
我认为问题的根源在于sbt-groovy插件需要在自己的插件源代码中定义任务"definedTests" .这个任务提供了一个Seq[TestDefinition].
看看SBT本身如何填充序列显示它使用来自scala编译器的附加输出(这也适用于编译java文件,因此它可以开箱即用,适用于java),这个Analysis类由一个类填充.IncrementalCompiler
我已经摆弄了taskdef,但我不确定我是否在正确的道路上.关于这些东西的文档相当稀疏,或者与它有很大的联系IncrementalCompiler.
在sbt-groovy中我需要用什么代码来生成Seq[TestDefinition]满足SBT的代码,以便我可以运行用Groovy编写的测试(由junit-interface选取)?