Intentando compilar de forma remota, usando la línea de comandos, un programa Java con múltiples dependencias que actualmente solo puedo compilar localmente en Eclipse

Hace unas semanas en el trabajo, me hice cargo de una aplicación web de back-end basada en Java escrita con Eclipse. La naturaleza de la aplicación es que no se puede probar adecuadamente localmente y, en cambio, los cambios deben probarse en nuestra red de prueba (que implica enviar los cambios a un servidor AWS Micro al que nos conectamos a través de SSH).

Hasta ahora, introduje los cambios de la misma manera que mi predecesor: compile el programa utilizando la opción Exportar a archivo ejecutable JAR de Eclipse, luego scp el jar al servidor remoto y ejecútelo. Sin embargo, este proceso tiene un gran problema. Si bien la compilación lleva solo unos segundos, el tarro supera los 30 MB, y llevar todo el contenido desde la oficina al servidor remoto a través de nuestra conexión a Internet bastante común lleva más de 10 minutos. Si estoy teniendo un día particularmente malo y, digamos, introduzco varios errores menores en el código y luego los descubro uno por uno, puedo terminar fácilmente perdiendo una hora o más en total girando mis pulgares mientras presiono todo el frasco y para una serie de cambios de una línea.

Claramente, una solución más sensata que analizar el jarro completo para cada cambio sería simplemente extraer de forma remota solo los archivos .java modificados del control de origen y luego compilar la nueva versión de forma completamente remota. Sin embargo, soy bastante nuevo en Java (y, de hecho, en la programación en general) y todo mi trabajo en Java ha sido en proyectos Eclipse existentes que he asumido durante el desarrollo. Como tal, sé muy poco acerca de compilar Java, y he encontrado que los tutoriales sobre esto en línea son opacos o no abordan por completo la cuestión de cómo compilar código que usa bibliotecas externas.

Relataré aquí qué información sobre las dependencias del proyecto puedo encontrar en Eclipse, y mis preguntas son las siguientes: ¿qué necesito copiar en el servidor remoto y dónde debo colocarlo para poder compilar de forma remota? ¿Qué herramientas, si hay alguna, necesito instalar en el servidor remoto para poder compilar allí? Y una vez que tengo todo configurado, ¿qué escribo realmente en la línea de comando para que se compile?

De todos modos, esto es lo que sé sobre las dependencias y la estructura del directorio (he anonimizado el nombre de nuestra aplicación llamándolo "conejitos"):

  • El código fuente de la aplicación se encuentra en bunnies / src

  • Compilamos a bunnies / bin / main.jar

  • bunnies / dependencies contiene tres frascos de bibliotecas externas que utilizamos.

  • Al hacer clic derecho en el proyecto en Eclipse, ir a la sección Ruta de compilación de Java y seleccionar la pestaña Bibliotecas, veo

    • las tres bibliotecas anteriores (que aparecen en el formulario, por ejemplo, "json-simple-1.1.1.jar - / home / mark / workspace / bunnies / dependencies")
    • un cuarto archivo jar en otra ubicación (“M2_REPO / com / google / guava / guava / r09 / guava-r09.jar - /home/mark/.m2/repository/com/google/guava/guava/r09/guava-r09 .tarro")
    • Biblioteca del sistema JRE [java-6-openjdk-i386]
  • ¡Pero hay más! También utilizamos dos bibliotecas, mahout-core y mahout -integration, que se incluyen como proyectos separados en el mismo espacio de trabajo en lugar de como archivos jar en la carpeta de dependencias. Aparecen por su nombre en la pestaña Proyectos de la sección Java Build Path del proyecto bunnies, y se encuentran en / home / mark / workspace / mahout-core y / home / mark / workspace / mahout-Integration respectivamente.

  • Como no soy un genio de Java, ¿quizás también hay algunas otras dependencias ocultas que me faltan y que no aparecen en ninguno de los lugares que he buscado hasta ahora?

Si alguien puede guiarme a través de los pasos para compilar este gran desastre desde la línea de comandos, sin necesidad de usar la opción Exportar en Eclipse, para que finalmente pueda compilarlo todo de forma remota, estaría muy agradecido.

Respuesta 1

En C # tenemos la opción de especificar una propiedad de un objeto utilizando selectores de propiedades (por ejemplo, cuando se usa LINQ) de la siguiente manera: var usernames = clients.Where (x => x.Age> 20). Seleccione (x => x. ...

Tengo que generar registros para cada "usuario" de nuestra aplicación web. Para eso, utilizamos un SiftingAppender con un discriminador. <appender name = "SEPARATED" class = "ch.qos.logback.classic.sift ....

Estoy trabajando en un problema de tarea. En este momento, tengo una lista de nombres. Tengo una función que debería agregar el nombre a la Lista, y otra que debería obtenerlo. Sin embargo, solo obtiene una cadena vacía ...

Me gustaría aplicar Java concurrente, es decir, invocable para el conjunto de resultados. El escenario es: consulta la base de datos utilizando JDBC. Envíe el conjunto de resultados a invocable para escribir en diferentes archivos. Como los datos serían ...