Java: hacer referencia a jarras externas utilizando una variable de entorno

Soy bastante nuevo en Java y tengo algunas dudas al establecer el classpath. Ya hice mi tarea antes de hacer la pregunta en este foro. Intenté buscar en Google y referí otros foros, pero no encontré lo que estaba buscando.

Entonces, aquí va.

  1. Estoy desarrollando una aplicación Java que necesita jarras externas para ejecutarse correctamente.
  2. Estos archivos jar externos están disponibles, si y solo si una aplicación personalizada 'XYZ' está instalada en el sistema.
  3. Debido a problemas de licencia, no quiero empacar los frascos de la aplicación XYZ en mi aplicación.
  4. Lo que hace mi aplicación es: compruebe si la aplicación XYZ está presente en el host de destino y se ejecuta si está disponible. De lo contrario, se registra un error que indica que se requiere XYZ para ejecutar el programa y se cierra.

Ahora viene la parte principal ...

  1. La aplicación XYZ está disponible para varias plataformas: Linux / Windows / Solaris / etc.
  2. XYZ puede personalizarse durante la instalación para instalarse en un directorio personalizado. digamos: D: / XYZ o D: / apps / XYZ en Windows, / apps / XYZ o / apps / admin / XYZ en Linux, Solaris, etc.
  3. Después de instalar la aplicación XYZ, los archivos jar estarán presentes en el directorio / tarros en los que se instaló XYZ. Por ejemplo: D: / XYZ / jars, / apps / XYZ / jars en * nix.
  4. Cuando la aplicación XYZ se instala en cualquier plataforma, se crea una nueva variable de entorno XYZ_LIB_PATH y apunta a la carpeta correspondiente donde están presentes los frascos; por ejemplo, XYZ_LIB_PATH = D: / XYZ / frascos se crea cuando la aplicación XYZ se instala en D: / XYZ. Del mismo modo, XYZ_LIB_PATH = / apps / XYZ / jars se crearía si la aplicación XYZ está instalada en una máquina Linux.

Ahora lo que quiero hacer es ...

Quiero referir mi aplicación a la variable de entorno - XYZ_LIB_PATH y recoger todos los archivos jar presentes en el directorio señalado por la variable de entorno XYZ_LIB_PATH de la plataforma. Al hacer esto, no necesito preocuparme por buscar archivos jar en cada máquina cuando mi aplicación está instalada. Simplemente puede buscar en el directorio señalado por la variable XYZ_LIB_PATH y continuar ejecutándose cargando los archivos jar necesarios.

La razón detrás de esto es que, dado que la aplicación XYZ es personalizable, cada usuario puede haberla instalado en un directorio diferente y mi aplicación necesita saber dónde se ha instalado XYZ. En cambio, si uso la variable de entorno, puedo obtener los frascos necesarios fácilmente para mi aplicación buscando en la ruta establecida para la variable XYZ_LIB_PATH. El usuario no puede cambiar la variable de entorno y, por lo tanto, esta variable permanece constante en todas las plataformas y puedo obtener una ruta válida para los frascos.

¿Hay alguna manera de lograr esto en Java?

Gracias, vinay s

Respuesta 1

Solo proporcione un script de inicio para su aplicación:

java -cp myApp.jar;%XYZ_LIB_PATH%\* com.foo.bar.MyApp

(el ejemplo anterior es para Windows. Lo mismo se puede hacer en Unix).

Si es necesario, este script podría detectar si la variable de entorno XYZ_LIB_PATH está establecida y salir correctamente si no lo está:

IF NOT DEFINED XYZ_LIB_PATH (ECHO XYZ is NOT installed)
Respuesta: 2

Tengo un complemento Gradle que genera algunos recursos en el directorio build / resources. Cuando ejecuto el programa desde IntelliJ, no encuentra el recurso en classpath. Intellij utiliza nuestro directorio ...

Quiero construir un patrón para insertar una coma en un entero para que se vea bien, como 1234556, después de manipular, será como 1,234,556, por lo que utilizo el siguiente código: vacío estático público ...

Posible duplicado: ¿Las clases de tabla de Hibernate deben ser serializables? Puedo realizar cualquier operación CRUD usando Hibernate en Java y mi clase de entidad no necesita implementar una interfaz serializable. ...

el compilador de Java arroja automáticamente un valor char en un int, un código como este no generará un error: public void foo (int i) {// do something} char c = 'a'; foo (c); ¿Hay alguna manera de parar ...