maven 3.2.2不会使用-ep或-emp提示密码,但是apache.org表示应该



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

提示密码

在版本3.2.1之前的Maven中,您必须在命令上提供密码 行作为参数(...)。从Maven 3.2.1开始密码是一个 可选的参数,这意味着如果您省略密码,您将是 提示它阻止了上述所有问题。

听起来很棒,我不必清除bash历史记录或vim缓存。但是它无法正常工作!

我正在使用Maven 3.2.2(请参阅下文)在Windows 2008 R2服务器下运行Java 1.7的最新gitbash-windows下(我知道,但我不是Admin)。

我缺少什么?

bb@MACHINE MINGW64 $ mvn --version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T15:51:42+02:00)
Maven home: C:toolsapache-maven-3.2.2
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: C:Program FilesJavajdk7jre
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()导致null。

导致

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 );
    }

请参阅此信息,以了解为什么Cygwin不适用于 System.Console()

您唯一的选择是使用 cmd

相关内容

最新更新