Java: cómo reducir el tamaño de los frascos de terceros para reducir el tamaño de su aplicación

Estoy desarrollando una aplicación web java y eso incluye un applet . Ese applet depende de dos archivos jar:

  • JFreeChart (para trazar gráficos en el lado del cliente) - 1.7 mb (tamaño del archivo jar)
  • MySqlJdbcConnector (para almacenar datos, capturados en el lado del cliente, en una base de datos remota) - .7 mb (tamaño del archivo jar)

Ahora, el problema es el tamaño de los dos archivos jar anteriores. El tamaño total de mi jar applet (myApplet.jar) es de 2.5 mb , de los cuales 2.4 mb se deben a los dos archivos jar anteriores.

No estoy usando todas las clases en esos archivos jar. Específicamente, para jfreechart , estoy usando un número muy pequeño de clases de esa biblioteca.

============================== Preguntas =================== ===================

Q1. Para crear el archivo myApplet.jar , lo que he hecho es descomprimir los dos archivos jar (jfreechart y mySQLJdbcConnector) y luego empaquetar la versión descomprimida de los archivos jar con el código fuente de mi applet para crear un solo archivo jar ( es decir, myApplet.jar). ¿Es la forma correcta de empaquetar archivos jar de terceros con su código de applet? ¿Hay alguna forma de optimizar esto?

Q2 Traté de encontrar las dependencias de las clases de la biblioteca jfreechart que estoy usando en mi aplicación para empacar solo esas dependencias en myApplet.jar. Para ese propósito, usé DependencyAnalyzer para encontrar las dependencias de todas las clases. Pero más tarde me resultó difícil hacerlo manualmente porque cada clase (clase de jfreechart que estoy usando en mi aplicación) tiene muchas dependencias y estoy usando unas 15 clases de jfreechart, por lo que hacer esto para cada clase será muy difícil. ¿Alguna sugerencia sobre esto?

Q3. ¿Es esta situación muy común que encuentran los desarrolladores o me falta algo por lo que tengo que hacer esto?

Respuesta 1

A1:

Puede crear un script de hormiga o usar Eclipse o cualquier otro IDE para empaquetar automáticamente su applet. Pero tu camino también es correcto

A2:

No haría estas cosas manualmente. Encontrar dependencias transitivas es muy complejo. Quizás la respuesta de darioo es una mejor manera de hacer esto.

A3:

Esto es muy común de hecho. Un par de pistas:

Siempre puede reconstruir esas bibliotecas de terceros sin información de depuración. Eso debería disminuir ligeramente el tamaño de esas bibliotecas.

Por otro lado, tal vez no debería tener una conexión directa desde su applet a una base de datos. Puede crear una interfaz RMI (o algo similar) para transferir su SQL y los datos de resultados a un servidor de aplicaciones, que realmente ejecuta su SQL. Este es un aspecto de seguridad importante para su applet, si no lo ejecuta en una intranet segura.

Respuesta: 2

Digamos que tengo el siguiente conjunto de cadenas. Cadena [] arr = {"Índice0", "Índice1", "Índice2", "Índice3", ... "Índice n"}; Puedo iterar sobre toda la matriz usando: for (String eachElement: arr) {// ...

Soy nuevo en StackOverflow y he odiado la idea de hacer una pregunta, ya que he visto tantos derribados en llamas que me preguntaron mal o respondieron en otro lado, pero parece que no puedo encontrar un ...

Por defecto, la versión requerida de Hamcrest para: JUnit 4.11 Hamcrest 1.3 Mockito-core 1.9.5 Hamcrest 1.1 No hubo cambios de API insignificantes entre Hamcrest 1.1 y 1.3. Actualmente mi prueba ...

Estoy tratando de entender la configuración de la matriz en Java. ¿Por qué debe inicializar el espacio para cada objeto en la matriz, después de haber creado la matriz? ¿Cómo se almacena en la memoria de esta manera: [objeto] [...