2010-06-27 12 views
29

estoy usando Guava-05 a la instantánea, la de Sun JDK 1.6 El código hace saltar la ejecución de este fragmento:hay tal error de método: ImmutableList.copyOf()

List<String> badpasswords = Lists.newArrayList(Password.badWords); 
Collections.sort(badpasswords); 
ImmutableList<String> tmp = ImmutableList.copyOf(badpasswords); 

Específicamente en el ImmutableList.copyOf () llamada. Este código ha funcionado durante meses, utilizando el antiguo código Google-Collections.

java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.copyOf(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableList; 

El Password.badWords es un ImmutableSet<String> y la creación de la matriz se puede escribir y el trabajo perfectamente especie. Pero los intentos de convertir la matriz en un ImmutableList fallan.

+0

El mismo problema se responde en su pregunta siguiente: http://stackoverflow.com/questions/3126276/splitter-blows-up-on-simple-pattern/3126420#3126420 – BalusC

+2

Probablemente deba votar/aceptar respuestas que son útiles, por cierto. – ColinD

Respuesta

41

La guayaba es un superconjunto totalmente compatible de Google Colecciones - No cambiamos nada de una manera incompatible. (. Esto se prueba mediante la ejecución de todo el conjunto de pruebas de Google Colecciones (que es extensa) contra el tarro de guayaba lastest)

Creo que tiene una copia de Google-recoja - *. Jar aún Makings su camino en su classpath. O explícitamente, o porque algún otro jar lo incluyó sin reempaquetarlo. Solo tienes que encontrarlo y eliminarlo.

En Google Collections, existía un método ImmutableList.copyOf(Iterable), y no había ningún método público ImmutableList.copyOf(Collection). Lo cual está bien, porque una colección también es iterable. En Guava, hemos agregado la sobrecarga de Colección. Esto es completamente compatible, ya que todas las fuentes que solían compilarse pueden hacerlo, y cualquier fuente compilada previamente simplemente seguirá haciendo referencia al método original.

El problema aparece si compila contra Guava pero luego se ejecuta contra Google Collections. Creo que eso es lo que está sucediendo.

+2

El problema fue un efecto secundario de Netbeans manteniendo demasiadas cosas en cachés. Un "limpiar y construir" no hizo nada para arreglar las cosas. Hice una limpieza completa y construí en cada jar en el proyecto. La solución fue salir de Netbeans, ir a ~/netbeans/6.7/var/cache y hacer un rm -rf * – fishtoprecords

+1

"Guava es un superconjunto completamente compatible de Google Collections" - ¿Aparentemente ya no? http://code.google.com/p/gdata-java-client/issues/detail?id=344#c2 –

+0

Sí, algunas cosas han alcanzado su punto de "fin de vida desaprobado durante 18 meses", es cierto. –

3

Este también funciona bien para mí usando la versión oficial (sin foto) guava-r05 de Maven. Por cierto, esto podría ser un poco más agradable manera de hacer la misma cosa:

ImmutableList<String> sorted = Ordering.natural() 
    .immutableSortedCopy(Password.badWords); 
+0

Me gusta esa versión. Gracias – fishtoprecords

0

Using Guava bundled with GWT trabajado.

Agregué ambos archivos de Guava Jar (Versión 13) desde aquí code.google.com/p/guava-libraries a mi guerra/WEB-INF/lib y agregué guava-13.0.1.jar a mi ruta de compilación (clic derecho & complemento para construir ruta)

1

Si el error se produce cuando se despliega una aplicación web para WebLogic 12c (pero el JAR de guava está en WEB-INF/lib), la siguiente configuración en weblogic.xml ayudará a resolverlo:

<container-descriptor> 
    <prefer-application-packages> 
     <package-name>com.google</package-name> 
    </prefer-application-packages> 
</container-descriptor> 
Cuestiones relacionadas