2012-06-28 12 views
5

Estamos ejecutando un programa java independiente desde script shell, con un script comman para mencionar classpath, ruta, etc. En este script común, hemos agregado varios classpaths ahora y el número de caracteres es más de 9000. Está funcionando bien en el entorno de prueba. ¿Causará algún problema en Producción? ¿Hay alguna limitación en Linux para establecer classpath? ¿Cuál es el máximo de caracteres para las entradas de la línea de comandos?Limitación Classpath en Linux

+1

Err, el entorno de prueba está ahí para validar que todo funciona bien antes de hacer lo mismo en producción. Si no confías en tu entorno de prueba, ¿por qué tienes uno? –

+2

Existe una limitación sobre el tiempo que pueden durar las variables de entorno y existe una limitación sobre la duración de la línea de comando. * Podrías * llegar a ambos con ese tipo de longitud (no conoces los números concretos de ningún SO por solera). Es posible que desee comenzar a utilizar [comodines de classpath] (http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html). –

+1

@JB: En teoría, los entornos de prueba y producción deberían ser los mismos y, en teoría, si uno trabaja en prueba funcionará en producción. Sin embargo, la diferencia entre la teoría y la práctica es que, en teoría, no hay diferencia entre la teoría y la práctica. –

Respuesta

0

Consulte this stackoverflow answer sobre las longitudes máximas de la línea de comandos de Linux.

La longitud máxima de la línea de comandos será aproximadamente entre 128 KB y 2 MB.

Sin embargo, el tamaño máximo de cualquier argumento es considerablemente más pequeño y 9000 caracteres pueden ser problemáticos.

0

Cuando se utiliza en su programa de Java algunas clases de un archivo jar que se especifica en la variable classpath, la JVM no se cargará esa clase hasta que su programa en ejecución será necesario explícitamente que la clase (o si carga esa clase explícitamente desde tu código - la misma idea). El único problema que puede aparecer cuando tiene un muy largo classpath, es el tiempo necesario para classpath verificar antes de que el JVM encuentre el archivo correcto jar. Pero eso no debería ser un problema. Si su programa se comporta bien en las pruebas, no debe preocuparse por esto.

4

No, no hay ninguna limitación. En Windows hay (8191 caracteres), pero no en Linux. Trabajamos con el concepto de classpath-files. Estas listas de archivos todas las dependencias para la aplicación, por ejemplo:

... 
libs/org/easymock/easymock/2.2/easymock-2.2.jar 
libs/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar 
libs/org/hibernate/hibernate-envers/4.1.0.Final/hibernate-envers-4.1.0.Final.jar 
libs/com/google/inject/guice/3.0/guice-3.0.jar 
... 

y luego convertir esto en la ruta de clase utilizable y ejecutar la aplicación de la siguiente manera:

#!/bin/bash 

CLASSPATH_FILE=`ls -r1 ${APP-HOME}/classpaths/myapp*.classpath | head -n1` 
CLASSPATH=$(cat $CLASSPATH_FILE | sed 's_^libs_ ${APP-HOME}/libs_' | tr -d '\n' | tr -d '\r' | sed 's_.jar/libs/_.jar:/libs/_g' | sed 's_.pom/libs/_.pom:/libs/_g') 

java -d64 -cp $CLASSPATH com.blah.main.Main [email protected] 

Nunca hemos tenido problemas y éstos ruta de clases las entradas se vuelven bastante grandes.

EDITAR: Como nota al margen, puede usar el complemento de dependencia maven para generar una lista de dependencias.

+3

No estoy de acuerdo, no hay límite en Linux. Con un núcleo anterior (2.6.5), hemos alcanzado un límite estricto de 128 KB para la longitud de la línea de comando. – QuantumMechanic

+0

... Linux nunca deja de sorprenderme. Correcto, la corrección entonces: los sistemas operativos reales no deberían darle ningún problema. :-) (Hice los cambios requeridos arriba, gracias QuantumMechanic) –