2011-03-31 17 views
5

Soy novato de maven y estoy teniendo algunos problemas para construir mi proyecto. he añadido la dependencia log4j en el fichero pomerror de compilación cuando se hace referencia a una biblioteca que usa maven

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
     <scope>runtime</scope> 
    </dependency> 

y lo estoy usando en un uso normal en una de mis clases

import org.apache.log4j.Logger; 

public class ConnectionPoolImpl implements Runnable, ConnectionPool { 
    static Logger logger = Logger.getLogger(ConnectionPoolImpl.class); 

la compilación fue bien hasta que he utilizado el mvn limpia mando. ahora cuando intento para construir mi proyecto utilizando mvn compile que estoy recibiendo:

[INFO] Compiling 2 source files to C:\Temp\cp\target\classes 
[INFO] ------------------------------------------------------------- 
[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] \Temp\cp\src\main\java\com\opower\connectionpool\ConnectionPoolImpl.java 
:[9,23] package org.apache.log4j does not exist 
[ERROR] \Temp\cp\src\main\java\com\opower\connectionpool\ConnectionPoolImpl.java 
:[19,9] cannot find symbol 
symbol : class Logger 
location: class com.opower.connectionpool.ConnectionPoolImpl 
[ERROR] \Temp\cp\src\main\java\com\opower\connectionpool\ConnectionPoolImpl.java 
:[19,25] cannot find symbol 
symbol : variable Logger 
location: class com.opower.connectionpool.ConnectionPoolImpl 
[INFO] 3 errors 

alguna idea de lo que estoy haciendo mal?

Respuesta

16

No soy un especialista en Maven, pero el alcance log4j debe ser compile en lugar de runtime. Por favor, corríjame si estoy equivocado.

De maven doc,

tiempo de ejecución - esto indica que el alcance no se requiere la dependencia para compilación, pero es para su ejecución. Está en el en los classpaths de tiempo de ejecución y prueba, pero no en el classpath de compilación.

+0

funcionó. ¡Gracias chicos! – special0ne

3

Si tenía el alcance como runtime, la intención original probablemente era usar SLF4J o somesuch en su lugar. Muy fácil de importar el espacio de nombres incorrecto para Logger.

0

Usando el alcance de compilación, todavía pone los tarros en la guerra.

Cuestiones relacionadas