Beispiel #1
0
        static IEnumerable <string> GetJavaAlternativesJdkPaths()
        {
            var alternatives = Path.GetFullPath("/usr/sbin/update-java-alternatives");

            if (!File.Exists(alternatives))
            {
                return(Enumerable.Empty <string> ());
            }

            var psi = new ProcessStartInfo {
                FileName  = alternatives,
                Arguments = "-l",
            };
            var paths = new List <string> ();

            ProcessUtils.Exec(psi, (o, e) => {
                if (string.IsNullOrWhiteSpace(e.Data))
                {
                    return;
                }
                // Example line:
                //  java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64
                var columns = e.Data.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                if (columns.Length <= 2)
                {
                    return;
                }
                paths.Add(columns [2]);
            });
            return(paths);
        }
Beispiel #2
0
        static Dictionary <string, List <string> > GetJavaProperties(string java)
        {
            var javaProps = new ProcessStartInfo {
                FileName  = java,
                Arguments = "-XshowSettings:properties -version",
            };

            var    props  = new Dictionary <string, List <string> > ();
            string curKey = null;

            if (!AnySystemJavasInstalled() && (java == "/usr/bin/java" || java == "java"))
            {
                return(props);
            }

            ProcessUtils.Exec(javaProps, (o, e) => {
                const string ContinuedValuePrefix = "        ";
                const string NewValuePrefix       = "    ";
                const string NameValueDelim       = " = ";
                if (string.IsNullOrEmpty(e.Data))
                {
                    return;
                }
                if (e.Data.StartsWith(ContinuedValuePrefix, StringComparison.Ordinal))
                {
                    if (curKey == null)
                    {
                        throw new InvalidOperationException($"Unknown property key for value {e.Data}!");
                    }
                    props [curKey].Add(e.Data.Substring(ContinuedValuePrefix.Length));
                    return;
                }
                if (e.Data.StartsWith(NewValuePrefix, StringComparison.Ordinal))
                {
                    var delim = e.Data.IndexOf(NameValueDelim, StringComparison.Ordinal);
                    if (delim <= 0)
                    {
                        return;
                    }
                    curKey    = e.Data.Substring(NewValuePrefix.Length, delim - NewValuePrefix.Length);
                    var value = e.Data.Substring(delim + NameValueDelim.Length);
                    List <string> values;
                    if (!props.TryGetValue(curKey, out values))
                    {
                        props.Add(curKey, values = new List <string> ());
                    }
                    values.Add(value);
                }
            });

            return(props);
        }
Beispiel #3
0
        static IEnumerable <string> GetLibexecJdkPaths(Action <TraceLevel, string> logger)
        {
            var java_home = Path.GetFullPath("/usr/libexec/java_home");

            if (!File.Exists(java_home))
            {
                yield break;
            }
            var jhp = new ProcessStartInfo {
                FileName  = java_home,
                Arguments = "-X",
            };
            var xml = new StringBuilder();

            ProcessUtils.Exec(jhp, (o, e) => {
                if (string.IsNullOrEmpty(e.Data))
                {
                    return;
                }
                xml.Append(e.Data);
            }, includeStderr: false);
            var plist = XElement.Parse(xml.ToString());

            foreach (var info in plist.Elements("array").Elements("dict"))
            {
                var JVMHomePath = (XNode)info.Elements("key").FirstOrDefault(e => e.Value == "JVMHomePath");
                if (JVMHomePath == null)
                {
                    continue;
                }
                while (JVMHomePath.NextNode.NodeType != XmlNodeType.Element)
                {
                    JVMHomePath = JVMHomePath.NextNode;
                }
                var strElement = (XElement)JVMHomePath.NextNode;
                var path       = strElement.Value;
                yield return(path);
            }
        }