Mostrando entradas con la etiqueta Maven. Mostrar todas las entradas
Mostrando entradas con la etiqueta Maven. Mostrar todas las entradas

miércoles, 9 de abril de 2014

Eclipse Maven: 'Updating Maven Project' has encountered a problem.




'Updating Maven Project' has encountered a problem. 
An internal error ocurred during 'Updating Maven project'.
java.lang.NullPointerException

De repente comencé a tener este error con uno de mis proyectos de Maven. La mejor solución que encontré fue:


  1. Borrar el proyecto de Eclipse (no los archivos)
  2. Borrar el .project y el .settings/ del proyecto
  3. Re imporar el proyecto
  4. Convertirlo a un proyecto Maven 

viernes, 14 de marzo de 2014

SLF4J: Multiple bindings were found on the class path logback

En el proyecto que estoy trabajando utilizamos SLF4J como framework de logging. Estaba teniendo un problema en el cual mis llamados para registrar entradas en el log no estaban apareciendo. Al principio pensé que era un problema con el archivo de log4j ya que esta era la implentación final que se estaba utilizando. Sin embargo luego me dí cuenta de unos mensajes apareciendo al principio del arranque de la aplicación:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/atg-dev/.m2/repository/ch/qos/logback/logback-classic/0.9.28/logback-classic-0.9.28.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/atg-dev/.m2/repository/org/slf4j/slf4j-log4j12/1.6.2/slf4j-log4j12-1.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
2014-03-13 21:30:46.718:INFO:/search-indexer:Initializing Spring root WebApplicationContext


Los mensajes estaban indicando que habían varios bindings, es decir, varias implementaciones de logging dentro del classpath. En específico pude ver que aparte de Log4j estaba LogBack, el cual no encontré ninguna referencia en el pom.xml. Había que descubrir la dependencia indirecta/transitiva.

La mejor manera para hallar la dependencia transitiva fue una idea de un compañero de utilizar el plugin de Maven en Eclipse que permite ver la jerarquía de dependencias.



De esa manera pude ubicar la dependencia que incluía al logback y agregar la exclusión:



        <dependency>
            <groupId>com.xxx.content</groupId>
            <artifactId>content-dao-jar</artifactId>
            <version>xx.xx.x.x</version>
            <exclusions>                
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

viernes, 24 de junio de 2011

Eclipse IAM: Instalación para Eclipse Helios

Hay dos formas generales de usar Maven:
  • "A lo macho" a punta de comandos.
  • O a lo no tan macho usando un plugin de Maven.
Si no se quiere gastar neuronas recordando comandos de Maven, entonces la solución óptima es usar un itermediador, que en mi caso particular el que utilizo es un plugin de Maven para Eclipse llamado IAM (Integración de Apache Maven).

Es muy sencillo de instalar en la versión Helios de Eclipse:

1. Copiar el URL de actualización del sitio:
http://q4e.googlecode.com/svn/trunk/updatesite-iam/


2. Ir a la opción de menú: "Ayuda->Instalar Nuevo Software"


3. Pegar el URL en la opción de "Agregar Sitio". Dar clic a "Siguiente"


4. Seleccionar los paquetes deseados. Preferiblemente elegirlos todos para menos complicación.




5. Después de reiniciar el eclipse probar el plugin creando un nuevo proyecto Maven.




6. Seleccionar el checkbox de crear un proyecto simple de Java.



7. Si examinamos el archivo pom.xml observamos que se agregó una dependencia de JUnit.




8. Podemos probar la integración de la dependencia al proyecto corriendo la clase de prueba que se generó de ejemplo: "AppTest".




martes, 28 de septiembre de 2010

java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"

Estaba montando JCS en mi proyecto web donde tengo Strut 1.3 agregando la dependencia de Maven:
<dependency>
<groupId>jcs</groupId>
<artifactId>jcs</artifactId>
<version>1.3</version>
</dependency>

Y de repente comencé a tener la siguiente excepción al inicializar la aplicación en Tomcat:

2010-09-28 10:44:36 ERROR [ContainerBackgroundProcessor[StandardEngine[Catalina]]] (Digester.java:789) - Digester.getParser:
java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"
at javax.xml.parsers.SAXParserFactory.setXIncludeAware(SAXParserFactory.java:448)
at org.apache.commons.digester.Digester.getFactory(Digester.java:534)
at org.apache.commons.digester.Digester.getParser(Digester.java:786)
at org.apache.commons.digester.Digester.getXMLReader(Digester.java:1058)
at org.apache.commons.digester.Digester.parse(Digester.java:1887)
at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1144)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:328)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4187)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4496)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3228)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:403)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1309)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Thread.java:619)

Después de investigar un poco en Google descubrí una dependencia de JCS estaba causando este conflicto: Xerces

Así que aprendí algo nuevo del pom.xml, cómo agregar una exclusión:
<dependency>
<groupId>jcs</groupId>
<artifactId>jcs</artifactId>
<version>1.3</version>
<exclusions>
<exclusion>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
</exclusion>
</exclusions>
</dependency>