2010-12-02 10 views
5

Estamos escribiendo una pequeña biblioteca en Java que necesita recopilar información del sistema subyacente. Podemos leer la mayoría de las cosas desde las propiedades del sistema en Java, pero parece que no podemos encontrar la forma correcta de extraer el nombre de la distribución cuando se ejecuta en Linux. La llamadaBuscar el nombre de la distribución de Linux de java

System.getProperty("os.name"); 

return "Linux" (que también recopilamos) pero estamos buscando una forma de obtener, p. "Ubuntu" también. Necesitamos esta solución en Java y nos gustaría no tener que hacer un análisis de/etc/release

+0

¿Conoce alguna API (que no sea Java) que pueda proporcionar esa información? – Ringding

+1

Bueno, realmente no. Desde mi Google, parece que al hacer alguna versión de cat/etc/* obtendrás algo de información pero no de manera confiable. Realmente estaba esperando que algunos de ustedes se hubieran tropezado con esto antes y lo hayan solucionado ... –

+1

Esto es específico de la distribución; No tengo lanzamiento de/etc/* (en Debian, incluso con lsb * instalado). Busqué lsb_release src (es solo un script de python) y analiza la mayoría de la información de distribución de apt. Una manera más fácil (específica de Debian) que mirar a/etc/debian_version en su lugar (uname -a tampoco es confiable) –

Respuesta

7

Hacer esto de manera confiable y precisa es imposible, lo mejor que puedo sugerir es tomar la salida de 'uname -a' y usa eso.

Nota: Esto no es una limitación de Java, simplemente no hay medios comunes (y precisos) para identificar una distribución.

+0

Puede husmear en/etc y deducir cosas en función de, por ejemplo, usted sabe qué archivos instala Fedora y Ubuntu se instala, pero luego necesita reglas en sus programas y pueden romperse. Es mejor probar la funcionalidad real. –

+0

@ Thorbjørn Ravn Andersen: Absolutamente. (No dude en editar la respuesta) – Arafangion

9

Puede intentar invocar lsb_release -i, pero no se garantiza que funcione.

+0

+1 En mi sistema Debian, esto devuelve "ID de Distribuidor: Debian", ¡así que esto parece muy prometedor! – Arafangion

+0

@Arafangion: solo si los paquetes lsb * están instalados :) no funcionará de lo contrario –

+0

En realidad 'lsb_release -d' también me dio muy buena información, probablemente deberías probar esto primero. – John

3

que suelen utilizar el siguiente comando:

 
cat /etc/issue 

La lectura de este archivo en Java debería ser bastante fácil. La pregunta es si este archivo está en cada (o al menos la mayoría) de las distribuciones de Linux. Lo encontré en todas partes donde lo necesitaba, sin embargo, no era necesario con mucha frecuencia.

Cuestiones relacionadas