Acabei de lançar uma pequena biblioteca Java que oferece apenas algumas classes e métodos. Desde que construí o projeto com o Maven, imediatamente usei várias bibliotecas de terceiros para atingir meus objetivos, especificamente:
- commons-lang3 (para algumas coisas gerais sobre Java)
- slf4j-api (para registro)
- commons-io (para um pouquinho de material de arquivo - literalmente lendo um arquivo uma vez, eu acho)
Não quero que minha biblioteca pareça inchada aos olhos dos outros. Devo tentar remover minha dependência dessas bibliotecas para minimizar minha pegada? Algum conselho sobre quais tipos de bibliotecas seria melhor evitar ao considerar o uso de mais no futuro?
Respostas:
Estou respondendo a essa questão, considerando sua situação específica. Eu diria que é bom usar essas bibliotecas. Apenas certifique-se de que o seu slf4j-api não traga a implementação com ele. Com isso, quero dizer marcar a dependência de implementação como "teste". POR EXEMPLO:
Isso é descrito em detalhes nas perguntas frequentes do SLF4j.
Quanto aos outros dois, IME, eles são sempre compatíveis com versões anteriores. Portanto, se daqui a cinco anos precisar usar sua biblioteca, mas você estiver usando uma versão antiga, posso excluir suas dependências e nosso código ainda funcionará. Em outras palavras, usando essas bibliotecas específicas, você não apresentará jar-hell para outras pessoas.
Se eu usar sua biblioteca via maven, não notarei se sua biblioteca está inchada ou não. Vou depender do seu e usá-lo. Eu acho que é mais importante que seu código funcione corretamente do que tem uma área menor. Prefiro que você use o commons-io em vez de reinventar a roda com um bug.
fonte
slf4j-api
e nenhum outro artefato relacionado, fornecido ou não. Veja slf4j.org/manual.html#projectDep .exclude
segundos) que eu tive que fazer quando determinados módulos em minhas dependências não "concordavam" com uma versão do slf4j. Na sua resposta, parece que se os projetistas de módulos o expusessemprovided
, não haveria problemas assim, correto?provided
- muito discreto.mvn dependency:analyze
estava trazendo versões ruins até excluídas) #Não.
"Inchaço" é um mito. Independentemente da quantidade de código existente na sua biblioteca, se algum código nunca for usado, ele não será paginado - ele não terá nenhum impacto no desempenho ou na pegada de memória.
Por outro lado, se você precisar dessa parte extra de funcionalidade, terá duas opções. Você pode escrevê-lo e gastar muito tempo e esforço resolvendo problemas que outras pessoas já resolveram antes ou pode optar por usar a solução que já existe (e foi testada / depurada / etc).
Isso nos deixa com tamanho de download e espaço em disco, e, a menos que você esteja falando de números tolos, em 2013 eles são dois fatores que devem estar próximos ao final da lista de itens com os quais você precisa se preocupar.
fonte