Analizamos 60.678 librerías en Github: he aquí las 100 principales

 ● 19th May 2015

7 min read

¿Cuáles son las principales librerías Java usadas por algunos de los proyectos más populares en Github? Basándonos en el análisis de 60.678 dependencias, estas son las respuestas:

Nos gusta respaldar todo lo que decimos con datos, por eso es que algunos dicen que no somos gente muy divertida en las fiestas. Obviamente, son ellos quienes van a las fiestas equivocadas. En este artículo, hemos investigado 60.678 declaraciones import de 11.939 librerías únicas de Java que son usadas por los 5.216 proyectos Java más relevantes en Github, y elaboramos una lista con las 100 más interesantes. O, como nos gusta llamarle, encontramos una manera divertida de pasar un fin de semana lluvioso.
Existe cierta tensión entre las nuevas tecnologías emergentes y las viejas y queridas librerías, probadas y aprobadas, que nos encanta usar a todos. Las nuevas librerías y frameworks generalmente empiezan a generar más y más barullo hasta un punto en que parece que todo el mundo les está utilizando ya, y que te estás quedando atrás. Pero a menudo ese NO es el caso y este artículo muestra los números necesarios para poder probarlo.

Sin dar más vueltas: las 20 principales librerías Java

Github Top 20 Java Libraries

Nociones adquiridas a partir de la lista de las 100 principales librerías

Los inesperados:

Hadoop deja a Spark fuera de competencia: Hadoop está ubicado en la posición #42, mientras que Apache Spark no aparece mencionado para nada en la lista de las 100 principales. Apache Zookeeper logró colocarse #75, influyendo en mantener los clústeres de Hadoop y los elefantes a raya.
Log4j es 2x más popular que Logback: Vemos claramente como Log4j, que es usado en un 16,76% de los proyectos que examinamos, está dejando atrás a Logback, empleado como motor de logs únicamente en un 8,45% de los proyectos más importantes.
SQL > MongoDB > PostgreSQL: El conector SQL Java quedó en la posición #27, MongoDB en la #87, mientras que PostgreSQL apenas logró aparecer en la #97.
ElasticSearch recibe la alharaca más justificada sobre una librería Java: ElasticSearch, el servidor de búsquedas basado en Apache Lucene (que logró estar #90 en la lista), que es la E en el conjunto de aplicaciones ELK, y una de nuestras favoritas, es la librería que recibe la alharaca más justificada de toda la lista.

Y… los habituales sospechosos:

JUnit es la reina indiscutida entre las librerías de Java: Con 3.345 entradas, 64% de los imports de los principales proyectos Java en Github son realizados con JUnit. Seguida por spring-test por el lado de Spring y testng, estas son las tres principales librerías Java de pruebas que encontramos entre las 20 más relevantes.
SLF4J es la librería más popular para el logging: Sea que uses Log4j, Logback o cualquier otro motor de logs, con 1.184 entradas, más del 22% de las principales aplicaciones Java están usando slf4j con sus logs.
De las 100 principales librerías, 14 vienen del Framework Spring: Es el framework más popular entre las 100 principales librerías (aún más que apache-commons, que tiene 12 librerías entre las 100), teniendo a spring-context como su librería más popular.
Google Guava sacude los gráficos, siendo la #4 librería Java más popular: Con 815 entradas, y por lo tanto 15,6% de los proyectos Java más relevantes en Github. La verdad es que a nosotros también nos encanta usar Guava aquí en Takipi, y hace poco publicamos un artículo sobre algunas de sus funcionalidades interesantes aunque desconocidas.
apache-commons le hace honor a su nombre (común), pues aparece #5: Ya que su representante más fuerte posee 659 declaraciones import (12,63%) entre los proyectos Java más relevantes en Github, y que tiene, asimismo, doce de sus librerías entre el top 100, apache-commons sigue haciéndole honor a su nombre (common = común).
Mockito es el framework más popular de simulación (mocking) en Java: Las 559 entradas (10,72%) demuestran que la simulación (el mocking) tiene importancia en Java, apareciendo en el séptimo lugar, entre las librerías más populares.
Los desarrolladores adoran usar Joda-time: Esto no resulta una sorpresa, pero es interesante ver cómo la librería Joda-time, escrita por Stephen Coulbourne, alcanza la posición 18.

Otras cinco entradas que vale la pena mencionar

#65 – Bukkit – La única librería de juegos dentro de la lista de las 100 más relevantes. Acertaste… los servidores de Minecraft.
#66 – Jetty – Ya que Netty no logró aparecer en la lista.
#81 – PowerMock – Una entrada bastante nueva en la lista, declara que “puede ser utilizada para resolver problemas en las pruebas que frecuentemente son considerados difíciles -sino imposibles- de resolver”.
#90 – Google Protobuf – Una alternativa neutral en cuanto a lenguajes y plataformas, extensible, que permite serializar datos estructurados para ser usados en protocolos de comunicaciones, almacenamiento de datos, y mucho más.
#100 – AssertJ – Habiendo ganado mucha popularidad a lo largo del año pasado y asimismo siendo incorporada en la última versión de Dropwizard, es una de las nuevas librerías de pruebas más populares, que acepta migraciones desde FEST Assert.

Las 100 principales librerías según su tipo

Github Top 100 Java Libraries by Type
Para tener una idea de qué tipos de librerías se ganan la mayor parte de la atención entre la comunidad de Java, hemos diseñado un gráfico con las 100 principales según su tipo y cuántos usos reciben en los proyectos Java más populares en Github.

¿De dónde vienen estos números?

Ahora, pongamos contexto a las estadísticas: Para empezar, tomamos de Github los 25.000 principales proyectos Java a partir de sus respectivas estrellas. En segundo lugar, extrajimos aquellos que usan Maven o Ivy para administrar sus dependencias, de manera que ganamos acceso rápido a sus correspondientes dependencias pom.xml / ivy.xml; esto nos dejó con 5.216 proyectos. Ahora que ya teníamos miles de dependencias xml en nuestras manos, era momento de tomar una cerveza. Una vez que nos quedamos sin cerveza, sacamos los datos y obtuvimos en total 60.678 registros de librerías usadas, que en definitiva son 11.939 librerías únicas. Esto significa que un proyecto típico de Github, de los que se encuentran entre nuestros datos, usa 11,6 librerías externas. Para facilitar el análisis, procesamos las estadísticas para las 100 principales librerías de acuerdo al total de proyectos en Github en que ellas son empleadas. Y les agregamos algo de clasificación según su tipo porque se nos dio la gana.
Puedes ver los datos brutos por aquí y, de hecho, eres bienvenido para dar un vistazo y asegurarte de que no se nos haya pasado algún dato interesante. Aunque la fase de la cerveza fue una parte esencial de esta investigación, los números son precisos.

Más lectura

He aquí otro análisis interesante, procedente de apiwave, en el que se investigaron las principales API de Java según la cantidad de clases usadas en cada proyecto de cada cliente. El análisis estuvo inspirado en un artículo que publicamos en noviembre del 2014.

¿Y qué hay de las principales herramientas que los desarrolladores Java prefieren usar?

También hemos tenido eso en cuenta: 15 herramientas que los desarrolladores Java deben usar tras la salida de una nueva versión.
¿Te parece que hay algo que nos faltó decir sobre estos datos? No dudes en ponernos al tanto, en la sección de comentarios que aparece más abajo.

Takipi te muestra cuándo y por qué tu código falla en producción. Detecta excepciones capturadas y no capturadas, errores de log y HTTP, y te muestra el código y el estado de variable, tal como estaba en el momento en que ellos ocurrieron. Obtén información procesable, resuelve errores complejos en minutos. Instalación en 5 minutos. Pensado para producción.
solve-button (1)
Further reading:
Bug line
5 Error Tracking Tools Java Developers Should Know  – read more
FredOps
15 Tools Java Developers Should Use After a Major Release  – read more 
threadfred
Thread Magic Tricks: 5 Things You Never Knew You Can Do with Java Threads – read more

Alex is the Director of Product Marketing at OverOps. As an engineer-turned-marketer, he is passionate about transforming complex topics into simple narratives and using his experience to help software engineering navigate their way through the crowded DevOps landscape.

Troubleshooting Apache Spark Applications with OverOps OverOps’ ability to detect precisely why something broke and to see variable state is invaluable in a distributed compute environment.
Troubleshooting Apache Spark Applications with OverOps

Next Article

The Fastest Way to Why.

Eliminate the detective work of searching logs for the Cause of critical issues. Resolve issues in minutes.
Learn More