in src/main/java/org/apache/maven/plugins/gpg/GpgSigner.java [47:181]
protected void generateSignatureForFile(File file, File signature) throws MojoExecutionException {
// ----------------------------------------------------------------------------
// Set up the command line
// ----------------------------------------------------------------------------
Commandline cmd = new Commandline();
if (StringUtils.isNotEmpty(executable)) {
cmd.setExecutable(executable);
} else {
cmd.setExecutable("gpg" + (Os.isFamily(Os.FAMILY_WINDOWS) ? ".exe" : ""));
}
GpgVersionParser versionParser = GpgVersionParser.parse(executable);
GpgVersion gpgVersion = versionParser.getGpgVersion();
if (gpgVersion == null) {
throw new MojoExecutionException("Could not determine gpg version");
}
getLog().debug(gpgVersion.toString());
if (args != null) {
for (String arg : args) {
cmd.createArg().setValue(arg);
}
}
if (homeDir != null) {
cmd.createArg().setValue("--homedir");
cmd.createArg().setFile(homeDir);
}
if (gpgVersion.isBefore(GpgVersion.parse("2.1"))) {
if (useAgent) {
cmd.createArg().setValue("--use-agent");
} else {
cmd.createArg().setValue("--no-use-agent");
}
}
InputStream in = null;
if (null != passphrase) {
if (gpgVersion.isAtLeast(GpgVersion.parse("2.0"))) {
// required for option --passphrase-fd since GPG 2.0
cmd.createArg().setValue("--batch");
}
if (gpgVersion.isAtLeast(GpgVersion.parse("2.1"))) {
// required for option --passphrase-fd since GPG 2.1
cmd.createArg().setValue("--pinentry-mode");
cmd.createArg().setValue("loopback");
}
// make --passphrase-fd effective in gpg2
cmd.createArg().setValue("--passphrase-fd");
cmd.createArg().setValue("0");
// Prepare the input stream which will be used to pass the passphrase to the executable
in = new ByteArrayInputStream(passphrase.getBytes());
}
if (null != keyname) {
cmd.createArg().setValue("--local-user");
cmd.createArg().setValue(keyname);
}
cmd.createArg().setValue("--armor");
cmd.createArg().setValue("--detach-sign");
if (getLog().isDebugEnabled()) {
// instruct GPG to write status information to stdout
cmd.createArg().setValue("--status-fd");
cmd.createArg().setValue("1");
}
if (!isInteractive) {
cmd.createArg().setValue("--batch");
cmd.createArg().setValue("--no-tty");
if (null == passphrase && gpgVersion.isAtLeast(GpgVersion.parse("2.1"))) {
// prevent GPG from spawning input prompts in Maven non-interactive mode
cmd.createArg().setValue("--pinentry-mode");
cmd.createArg().setValue("error");
}
}
if (!defaultKeyring) {
cmd.createArg().setValue("--no-default-keyring");
}
if (StringUtils.isNotEmpty(secretKeyring)) {
if (gpgVersion.isBefore(GpgVersion.parse("2.1"))) {
cmd.createArg().setValue("--secret-keyring");
cmd.createArg().setValue(secretKeyring);
} else {
getLog().warn("'secretKeyring' is an obsolete option and ignored. All secret keys "
+ "are stored in the ‘private-keys-v1.d’ directory below the GnuPG home directory.");
}
}
if (StringUtils.isNotEmpty(publicKeyring)) {
cmd.createArg().setValue("--keyring");
cmd.createArg().setValue(publicKeyring);
}
if ("once".equalsIgnoreCase(lockMode)) {
cmd.createArg().setValue("--lock-once");
} else if ("multiple".equalsIgnoreCase(lockMode)) {
cmd.createArg().setValue("--lock-multiple");
} else if ("never".equalsIgnoreCase(lockMode)) {
cmd.createArg().setValue("--lock-never");
}
cmd.createArg().setValue("--output");
cmd.createArg().setFile(signature);
cmd.createArg().setFile(file);
// ----------------------------------------------------------------------------
// Execute the command line
// ----------------------------------------------------------------------------
try {
int exitCode = CommandLineUtils.executeCommandLine(cmd, in, new DefaultConsumer(), new DefaultConsumer());
if (exitCode != 0) {
throw new MojoExecutionException("Exit code: " + exitCode);
}
} catch (CommandLineException e) {
throw new MojoExecutionException("Unable to execute gpg command", e);
}
}