Introducción a Apache Commons

Por supuesto, ¡comencemos con la historia!

Todo comenzó en 1999 con el registro del "Grupo Apache" en nombre de Apache Software Foundation (ASF). El proyecto apoyado por la fundación fue el servidor web Apache HTTPD creado entre 1995 y 1999.

Lo mismo fue el Proyecto Jakarta (proyecto Yakarta), que surgió como resultado de la colaboración de Sun Microsystems, IBM, Oracle y los chicos de Apache. Y en 2001, durante el trabajo, el equipo de desarrollo notó que a menudo escriben la misma funcionalidad, a veces simplemente la copian entre sí. Tal código se llama repetitivo. Lograron recopilar una gran cantidad de código que ayudó a los desarrolladores, pero no había una biblioteca para almacenarlo.

Así nació el proyecto Jakarta Commons, en el que se añadieron componentes Java (en su mayoría basados ​​en código existente). Posteriormente, el proyecto pasó a llamarse Apache Commons.

En términos más generales, Apache Commons es "una gran colección de pequeñas utilidades de Java". Se utiliza en muchos proyectos de código abierto.

Las utilidades de Apache Commons están en el centro de proyectos como Apache Tomcat, Struts, Hibernate y otros.

Por supuesto, todo esto se puede conectar manualmente, sin un sistema de compilación (Maven, Gradle), pero no lo haremos y solo los agregaremos a nuestro proyecto.

Para trabajar con Maven, primero agregue la dependencia adecuada:

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>${apache.common.version}</version>
</dependency>

Donde ${apache.common.version} es la versión de esta biblioteca.

Para Gradle (Maravilloso):

implementation 'org.apache.commons:commons-lang3:3.12.0'

Bibliotecas Apache Commons populares

Aquí hay una lista de las clases y métodos más utilizados:

Apache Commons:Idioma

Esta biblioteca contiene los siguientes paquetes:


Packages
org.apache.commons.lang
org.apache.commons.lang.builder
org.apache.commons.lang.enum
org.apache.commons.lang.enums
org.apache.commons.lang.exception
org.apache.commons.lang.math
org.apache.commons.lang.mutable
org.apache.commons.lang.reflect
org.apache.commons.lang.text
org.apache.commons.lang.time

Aquí puede trabajar de forma cómoda y rápida con cadenas, reflexión, serialización, objetos y el sistema. Anotemos los métodos más utilizados:

StringUtils

Una gran cantidad de métodos para manipular cadenas.

  • is(Not)Blank/Empty(String) - es hora de olvidarse de este tipo de verificación: if (s!=null && s.trim().length()>0) , y hay un buen reemplazo aquí

StringEscapeUtils

  • (un)escapeSql(String) - Reemplazar PreparedStatment
  • (un)escapeHtml(String) - para procesar valores de HTML

ToStringBuilder

  • reflectionToString(Object) es una implementación de toString() basada en la reflexión. Cuando elimina un campo usando la reflexión, el resultado del método cambiará.

EqualsBuilder y HashCodeBuilder

  • reflectionEquals/HashCode(Object) es un buen reemplazo para la generación automática con su propia ventaja: estos dos métodos tienen en cuenta los cambios estructurales en el objeto durante la operación, por ejemplo, agregar campos

ExceptionUtils

  • getFullStackTrace (Throwable) : muestra todo el StackTrace como una cadena

Apache Commons: Colecciones

Packages
org.apache.commons.collections4
org.apache.commons.collections4.bag
org.apache.commons.collections4.bidimap
org.apache.commons.collections4.collection
org.apache.commons.collections4.comparators
org.apache.commons.collections4.functors
org.apache.commons.collections4.iterators
org.apache.commons.collections4.keyvalue
org.apache.commons.collections4.list
org.apache.commons.collections4.map
org.apache.commons.collections4.multimap
org.apache.commons.collections4.multiset
org.apache.commons.collections4.properties
org.apache.commons.collections4.queue
org.apache.commons.collections4.sequence
org.apache.commons.collections4.set
org.apache.commons.collections4.splitmap
org.apache.commons.collections4.trie
org.apache.commons.collections4.trie.analyzer

Una biblioteca que complementa a la perfección Java SE Collections Framework.

CollectionUtils es una clase para trabajar cómodamente con colecciones:

    filter/find(Collection, Predicate) - filtrado y búsqueda por predicado forAllDo(Collection, Closure) - realiza Closure para cada elemento, pero este método está en desuso , use Iterator.forEach() is(Not)Empty(Collection) - le permite no marcar como nulo antes de llamar a isEqualCollection (Colección, Colección) : ayuda a comparar dos colecciones

También hay muchas otras clases de diferentes niveles de utilidad. Aquí y más abajo enumero los más utilizados puramente en mi caso.

Apache Commons:IO

Packages
org.apache.commons.io
org.apache.commons.io.comparator
org.apache.commons.io.file
org.apache.commons.io.file.spi
org.apache.commons.io.filefilter
org.apache.commons.io.function
org.apache.commons.io.input
org.apache.commons.io.input.buffer
org.apache.commons.io.monitor
org.apache.commons.io.output
org.apache.commons.io.serialization

Además, ayuda a trabajar con archivos en Java:

FileUtils

  • copyDirectory(Archivo, Archivo) - copiar directorios
  • copyFile(Archivo, Archivo) - copiar archivos
  • listFiles(File, String[], boolean) - lista de archivos por extensión y recursivamente
  • readFileToString(Archivo, Cadena)
  • writeStringToFile(Archivo, Cadena)

IOUtils

  • closeQuietly(Reader/Writer/InputStream/OutputStream) - cierra el flujo de datos
  • copy(InputStream, OutputStream) - copia de un flujo a otro