Using the Maven GPG Plugin makes it easy to sign a large number of artifacts when performing a release with Maven.
However, one of the annoying parts is that interactive password entry is not particularly easy, and you often have to put it on the command line or into your settings file in plaintext, which is not very comfortable. The better alternative is to use gpg-agent, and if you’re not using GPG 2.0 this needs to be configured in the POM:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.1</version> <configuration> <useAgent>true</useAgent> </configuration> </plugin>
GPG will fallback to the same password entry if it is not running or if it is provided via the property, so there’s no particular downside to enabling the option.
The problem on Mac is that the situation with GPG is a little confusing. There seem to be several different projects floating around to provide it.
I’m a big fan of Homebrew, and previously I’d been using that to install GnuPG and gpg-agent. It worked quite well, but the password entry required curses, and also didn’t work in an interactive session – so you’d need to make sure to have entered it manually before starting a release. If it failed mid-release, you’d need to restart the agent. None of this was Homebrew’s fault – I just hadn’t been able to find a native pinentry app for the Mac that stood alone and didn’t crash on use.
After fiddling with it for a while, I decided to try one of the native Mac GPG installers again. This is where it got confusing, since there are several efforts floating around. Others may work, but the one I had success with is the revived GPGMail project. After uninstalling all the packages using Homebrew, I installed GPGTools from the download page. Since this includes a native pinentry application, and pre-configures gpg and the agent to run once on login, it worked much better.
The only catch if you’re trying this is that you need to logout, or in your shell run this until you have:
open /usr/local/libexec/start-gpg-agent.app/ . ~/.gpg-agent-info export GPG_AGENT_INFO
You can test that it is working outside of Maven by running:
gpg -ab (ending with