Olá,
Notei hoje que meu projeto esta com versões diferentes da mesma biblioteca no classpath WEB-INF/lib. Eu tenho por exemplo:
commons-beanutils-1.7.0.jar // commons-beanutils-1.7.jar (mesma versão na verdade)
commons-digester-1.7.jar // commons-digester-1.8.jar
commons-logging-1.0.2.jar // commons-logging-1.1.1.jar // commons-logging-api-1.0.2.jar
commons-collections-2.1.jar // commons-collections-3.1.jar
É um erro simples de configuração das libraries no netbeans. Minhas pergunta são:
Como o classloader vai cuidar disso?
Ele vai carregar tudo?
Vai carregar a primeira que achar por algum criterio qualquer?
Aconselham a utilizar a versão mais recente ou mais antiga?
Agradeço desde já por qualquer ajuda,
Sérgio
Vai pegar a primeira classe que achar, por algum critério. Isso pode ocasionar alguns problemas do tipo “classe nova que surgiu na 1.8 usa um método em uma classe antiga que havia na 1.7”, e obviamente isso vai dar problemas.
Infelizmente não posso indicar que deva ser usada a mais recente ou a mais antiga; você precisa usar o conjunto de jars que seja compatível entre si, e com sua aplicação.
Obrigado pela resposta thingol.
Estou tendo alguns problemas na verdade. Meus servidores windows e linux usando a mesma versão do tomcat, JDK e WAR do meu aplicativo Web. Tenho problemas no servidor linux e estou achando que é este conflito de bibliotecas, talvez esse critério qualquer para carregar os JARs seja diferente nos 2 sistemas operacionais.
Enfim, outra pergunta, para carregar versões diferentes eu poderia colocar, por exemplo:
WEB-INF/lib/hibernate/ (bibliotecas do hibernate)
WEB-INF/lib/a4j/ (bibliotecas do a4j)
Isto faria com que o classloader carrega-se versões diferentes da mesma biblioteca para o hibernate e para o a4j respectivamente?
Boa pergunta. Não sei se o classloader do Tomcat consegue pegar dentro de subdiretórios de WEB-INF/lib.