Introdução ao Apache Commons

Claro, vamos começar com a história!

Tudo começou em 1999 com o registro do "Apache Group" em nome da Apache Software Foundation (ASF). O projeto apoiado pela fundação foi o Apache HTTPD Web Server criado entre 1995 e 1999.

O mesmo foi o Jakarta Project (projeto Jakarta), que surgiu como resultado da colaboração da Sun Microsystems, IBM, Oracle e os caras do Apache. E em 2001, durante o trabalho, a equipe de desenvolvimento percebeu que muitas vezes escrevem a mesma funcionalidade, às vezes simplesmente copiam um do outro. Esse código é chamado clichê. Eles conseguiram coletar uma grande quantidade de código que ajudou os desenvolvedores, mas não havia biblioteca para armazená-lo.

Assim nasceu o projeto Jakarta Commons, no qual foram adicionados componentes Java (principalmente baseados em código existente). O projeto foi posteriormente renomeado para Apache Commons.

Mais amplamente, o Apache Commons é “uma grande coleção de pequenos utilitários Java”. É usado em muitos projetos de código aberto.

Os utilitários Apache Commons estão no centro de projetos como Apache Tomcat, Struts, Hibernate e outros.

Claro, tudo isso pode ser conectado manualmente, sem um sistema de compilação (Maven, Gradle), mas não faremos isso e apenas adicionaremos ao nosso projeto.

Para trabalhar com o Maven, primeiro adicione a dependência apropriada:

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

Onde ${apache.common.version} é a versão desta biblioteca.

Para Gradle (Groovy):

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

Bibliotecas populares do Apache Commons

Aqui está uma lista das classes e métodos mais usados:

Apache Commons:Lang

Esta biblioteca contém os seguintes pacotes:


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

Aqui você pode trabalhar de forma conveniente e rápida com strings, reflexão, serialização, objetos e o sistema. Vamos observar os métodos mais usados:

StringUtils

Um grande número de métodos para manipular strings.

  • is(Not)Blank/Empty(String) - é hora de esquecer esse tipo de verificação: if (s!=null && s.trim().length()>0) , e há uma boa substituição aqui

StringEscapeUtils

  • (un)escapeSql(String) - Substitui PreparedStatment
  • (un)escapeHtml(String) - para processar valores do HTML

ToStringBuilder

  • reflectionToString(Object) é uma implementação de toString() baseada em reflexão. Ao remover um campo usando reflexão, o resultado do método será alterado.

EqualsBuilder & HashCodeBuilder

  • reflectionEquals/HashCode(Object) é um bom substituto para geração automática com sua própria vantagem: esses dois métodos levam em consideração mudanças estruturais no objeto durante a operação, por exemplo, adicionando campos

ExceptionUtils

  • getFullStackTrace(Throwable) - imprima todo o StackTrace como uma string

Apache Commons: coleções

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

Uma biblioteca que complementa perfeitamente o Java SE Collections Framework.

CollectionUtils é uma classe para um trabalho conveniente com coleções:

    filter/find(Collection, Predicate) - filtragem e busca por predicado forAllDo(Collection, Closure) - executa Closure para cada elemento, mas este método está obsoleto , use Iterator.forEach() is(Not)Empty(Collection) - permite não verificar como nulo antes de chamar isEqualCollection(Collection, Collection) - ajuda a comparar duas coleções

Há também muitas outras classes de vários níveis de utilidade. Aqui e abaixo eu listo os mais usados ​​puramente no meu 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

Além disso, ajuda a trabalhar com arquivos em Java:

FileUtils

  • copyDirectory(Arquivo, Arquivo) - copia diretórios
  • copyFile(Arquivo, Arquivo) - copia arquivos
  • listFiles(File, String[], boolean) - lista arquivos por extensão e recursivamente
  • readFileToString(arquivo, string)
  • writeStringToFile(Arquivo, String)

IOUtils

  • closeQuietly(Reader/Writer/InputStream/OutputStream) - fecha o fluxo de dados
  • copy(InputStream, OutputStream) - copia de um stream para outro