1 package org.apache.maven.plugin.assembly.utils; 2 3 /* 4 * The MIT License 5 * 6 * Copyright (c) 2004, The Codehaus 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy of 9 * this software and associated documentation files (the "Software"), to deal in 10 * the Software without restriction, including without limitation the rights to 11 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 12 * of the Software, and to permit persons to whom the Software is furnished to do 13 * so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included in all 16 * copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 * SOFTWARE. 25 */ 26 27 import java.io.BufferedReader; 28 import java.io.IOException; 29 import java.io.InputStreamReader; 30 import java.util.Properties; 31 32 /** 33 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl </a> 34 * @version $Id: CommandLineUtils.java 728546 2008-12-21 22:56:51Z bentmann $ 35 */ 36 public abstract class CommandLineUtils 37 { 38 /** 39 * Return the shell environment variables. If <code>caseSensitive == true</code>, then envar 40 * keys will all be upper-case. 41 * 42 * @param caseSensitive Whether environment variable keys should be treated case-sensitively. 43 * @return Properties object of (possibly modified) envar keys mapped to their values. 44 * @throws IOException 45 */ 46 public static Properties getSystemEnvVars( boolean caseSensitive ) 47 throws IOException 48 { 49 Process p = null; 50 51 Properties envVars = new Properties(); 52 53 Runtime r = Runtime.getRuntime(); 54 55 String os = System.getProperty( "os.name" ).toLowerCase(); 56 57 //If this is windows set the shell to command.com or cmd.exe with correct arguments. 58 if ( os.indexOf( "windows" ) != -1 ) 59 { 60 if ( os.indexOf( "95" ) != -1 || os.indexOf( "98" ) != -1 || os.indexOf( "Me" ) != -1 ) 61 { 62 p = r.exec( "command.com /c set" ); 63 } 64 else 65 { 66 p = r.exec( "cmd.exe /c set" ); 67 } 68 } 69 else 70 { 71 p = r.exec( "env" ); 72 } 73 74 BufferedReader br = new BufferedReader( new InputStreamReader( p.getInputStream() ) ); 75 76 String line; 77 78 String lastKey = null; 79 String lastVal = null; 80 81 while ( ( line = br.readLine() ) != null ) 82 { 83 int idx = line.indexOf( '=' ); 84 85 if ( idx > 1 ) 86 { 87 lastKey = line.substring( 0, idx ); 88 89 if ( !caseSensitive ) 90 { 91 lastKey = lastKey.toUpperCase(); 92 } 93 94 lastVal = line.substring( idx + 1 ); 95 96 envVars.setProperty( lastKey, lastVal ); 97 } 98 else if ( lastKey != null ) 99 { 100 lastVal += "\n" + line; 101 102 envVars.setProperty( lastKey, lastVal ); 103 } 104 } 105 106 return envVars; 107 } 108 109 }