ejecutar el programa de consola java en unix

Tengo un código en Java con Eclipse y me gustaría implementarlo en entornos Unix. El programa es un programa de consola simple que solo toma algunos argumentos en el tiempo de ejecución, lee un archivo e imprime algunos resultados.

Mi pregunta es cuál es el mejor enfoque para implementarlo y ejecutarlo en entornos Unix. Estaba pensando en copiar todos los archivos de clases al entorno de Unix y crear un archivo por lotes para ejecutar el archivo de clase principal. ¿Suena bien? ¿O debería crear un archivo jar ejecutable?

Además, ¿dónde debo poner los archivos jar a los que hace referencia el programa (en classpath)?

Gracias

Respuesta 1

Creo que un archivo jar ejecutable resolverá su propósito aquí.

Deberías poder ejecutarlo como

java -jar <jarfilename> <arguement1> <arguement2> .... <arguementN>

Puede ejecutar el archivo jar desde el directorio actual, solo asegúrese de que su archivo jar tenga permisos ejecutables.

chmod +x <jarfilename>
ls -la
Respuesta: 2

Diseñar para una implementación fácil es importante en mi opinión. En nuestro caso, hay algunos componentes:

  1. Almacene el proyecto en el sistema de gestión del código fuente (git). desglosamos el código fuente como

    1. el código fuente en desarrollo para la rama de desarrollo
    2. El código fuente estable para liberar la rama
  2. use la herramienta de compilación, como ant o maven, y proporcione un script de implementación en el proyecto. (hablaremos sobre el script de despliegue en 3.).

  3. proporcionar script de implementación para:

    1. buscar el último código fuente estable en el servidor de compilación
    2. compilar a archivos ejecutables en el servidor de compilación (hagas lo que hagas)
    3. enviar el paquete al servidor de destino
    4. lanzador (cierre la aplicación anterior y ejecute la nueva aplicación) en el servidor de destino (a través del comando ssh remoto)

Actualmente, usted piensa cómo empaquetar el Java, pero es una cosa simple sobre construir y ejecutar. Cuando hable acerca de la implementación , hágalo lo más fácil posible. Cada vez que implementamos solo para invocar el script de lanzamiento.


PD. No me gusta el jar ejecutable . El uso de tarros de desempaquetado y la clase compilada se pueden enviar por rsync de manera muy eficiente.

Respuesta: 3

Suena bien y funcionará para ti. Solo una solución: vas a escribir un script de shell para Unix, no un archivo por lotes.

Pero puedes hacerlo mejor. Por lo general, las clases de Java se empaquetan en un archivo jar. El archivo Jar es solo un archivo zip con opcional META-INF, directorio MANIFEST.MFy otras cosas. Así que es mejor para empaquetar su aplicación en la jarra y luego ejecutarlo como: java -cp yourjar.jar YourMainClass.

Para crear un archivo jar, puede usar cualquier herramienta que pueda crear zip o utilidad jarque sea parte de su JDK. También puede crear compilaciones automáticas usando ant, maven, gradle, bildr, etc. que lo ayudarán a empaquetar su aplicación.

Respuesta: 4

Yo haría lo siguiente:

  1. cree un directorio dedicado para este programa. Copie los archivos .jar dependientes en ese directorio
  2. escribe una secuencia de comandos (corta) que establece el classpath para apuntar a estos frascos y luego ejecuta la clase principal

Dado lo anterior, es en gran medida una cuestión de estilo si crea un .jar ejecutable o no. Estará oculto para el usuario.

Estoy sugiriendo un script porque:

  1. puede configurar fácilmente los parámetros JVM utilizados regularmente (opciones de memoria, etc.)
  2. Es un dolor (y apenas intuitivo) escribir, java -jar {pathtojar}etc.

Al copiar los archivos jar a un directorio dedicado, puede usar diferentes versiones de archivos jar para diferentes scripts (por ejemplo, puede tener 2 programas que usan dos versiones diferentes de commons-lang)

También debería (probablemente) usar este script para determinar explícitamente qué versión de Java usa para ejecutar el programa. A medida que instala / actualiza no desea interrumpir sus programas y las secuencias de comandos se pueden configurar para vincular explícitamente esta información.

Respuesta: 5

Entonces, estoy leyendo desde un BufferedReader. Todo va bien, hasta que agregue una condición. Necesito leer de BufferedReader durante un período de tiempo específico. Esto es lo que estoy haciendo ahora. mientras (...

Estoy tratando de representar una barra de salud con Slick. Quiero un rectángulo rojo con uno verde delante para mostrar la salud restante. Esto es lo que tengo hasta ahora: Rectangle healthBG = new ...

Todavía estoy aprendiendo a codificar Java y tenía una pregunta sobre cómo funciona la herencia. La clase A es la clase principal y la clase B es la subclase que hereda todos los métodos de la clase A. Supongamos que ...

Estoy intentando escribir un programa cliente FTP y tengo flujos de entrada y salida para transferir archivos entre el servidor y mi computadora. Cuando pensaba en cómo diseñar la clase, no podía decidir ...