Maven 3.2.2 不使用 -ep 或 -emp 提示输入密码,但 apache.org 表示应该

标签 maven git-bash password-encryption

我正在尝试提高存储我的 Maven 存储库密码的安全性。这个 apache 页面:
( https://maven.apache.org/guides/mini/guide-encryption.html ) 说:

Prompting for Password

In Maven before version 3.2.1 you have to give the password on command line as argument (...). Starting with Maven 3.2.1 the password is an optional argument which means if you omit the password you will be prompted for it which prevents all the issues mentioned above.



听起来不错,我不必清除 bash 历史记录或 vim 缓存。但它并不像宣传的那样工作!

我在运行 Java 1.7 的 Windows 2008 R2 服务器下的最新 gitbash-for-windows 下使用 Maven 3.2.2(见下文)(我知道,但我不是这里的管理员)。

我错过了什么?
bb@MACHINE MINGW64 $ mvn --version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T15:51:42+02:00)
Maven home: C:\tools\apache-maven-3.2.2
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk7\jre
Default locale: nl_NL, platform encoding: Cp1252
OS name: "windows servevr 2008 r2", version: "6.1", arch: "amd64", family: "windows"

bb@MACHINE MINGW64 $ mvn -ep
{}

bb@MACHINE MINGW64 $ mvn --encrypt-password
{}

bb@MACHINE MINGW64 $ mvn --encrypt-master-password
{}

bb@MACHINE MINGW64 $ mvn --emp
{}

如果我用老式的方式来做,它工作正常:
bb@MACHINE MINGW64 $ mvn --encrypt-master-password myPwd
{pohBRxk/rXUHL/TT9wgt/sUvny5ssiCWsij1pgTpU7Q=}

最佳答案

此问题是 Java 未将 Cyqwin 识别为控制台的结果。调用 System.Console() 结果为空。

Maven 的行为是在无法获得对控制台的引用时不加密任何内容。

if ( cliRequest.commandLine.hasOption( CLIManager.ENCRYPT_MASTER_PASSWORD ) )
    {
        String passwd = cliRequest.commandLine.getOptionValue( CLIManager.ENCRYPT_MASTER_PASSWORD );
        System.out.println("["+passwd+"]");
        if ( passwd == null || passwd.isEmpty() || passwd.equalsIgnoreCase("null"))
        {
            try {
            Console cons = System.console();
            char[] password = ( cons == null ) ? null : cons.readPassword( "Master password: " );
            if ( password != null )
            {
                // Cipher uses Strings
                passwd = String.copyValueOf( password );

                // Sun/Oracle advises to empty the char array
                java.util.Arrays.fill( password, ' ' );
            }
            }catch (Exception e) {
                System.out.println(e.getMessage());
                            e.printStackTrace();
                        }
        }

        DefaultPlexusCipher cipher = new DefaultPlexusCipher();

        System.out.println(
            cipher.encryptAndDecorate( passwd, DefaultSecDispatcher.SYSTEM_PROPERTY_SEC_LOCATION ) );

        throw new ExitException( 0 );
    }

this为什么 Cygwin 不适用于 System.Console() .

您唯一的选择是使用 CMD .

关于Maven 3.2.2 不使用 -ep 或 -emp 提示输入密码,但 apache.org 表示应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41185607/

相关文章:

java - 在 Websphere 上使用 jackson-dataformat-xml

java - Cassandra 2.1.3。如何提取CommitLog

windows - 如何在没有鼠标的情况下在 Windows 7 的 git bash 终端中选择文本?

Git 帮助命令不会在配置的浏览器中打开

mysql - 获取MYSQL加密 key

tcp - TCP 客户端服务器架构中的简单密码验证

eclipse - Maven 从命令行安装但从 Eclipse UI 传递时测试失败

windows - SSH要求输入用户密码而不是ssh key 密码?

java - Spring Security BCryptPasswordEncoder 已插入但不匹配

java - 如何使用 maven-tomcat7-plugin 在 Tomcat 上正确热部署/重新部署 war ?