java - spanish - guava maven
no existe tal error de método: ImmutableList.copyOf() (5)
Estoy usando Guava-05-snapshot, con JDK 1.6 de Sun. El código explota al ejecutar este fragmento:
List<String> badpasswords = Lists.newArrayList( Password.badWords);
Collections.sort(badpasswords);
ImmutableList<String> tmp = ImmutableList.copyOf(badpasswords);
Específicamente en la llamada ImmutableList.copyOf (). 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;
Password.badWords
es un ImmutableSet<String>
y la creación de la matriz de escritura y el ordenamiento funcionan perfectamente. Pero los intentos de convertir la matriz en una ImmutableList
fallan.
1) descargue guava-XX.XXjar desde http://code.google.com/p/guava-libraries/ 2) en eclipse, haga clic con el botón derecho en la ruta de compilación de selección de proyecto y agregue este contenedor
Esto también funciona bien para mí usando la versión oficial (no instantánea) de guava-r05 de Maven. Por cierto, esta podría ser una forma más agradable de hacer lo mismo:
ImmutableList<String> sorted = Ordering.natural()
.immutableSortedCopy(Password.badWords);
Guava es un superconjunto totalmente compatible de Google Collections, no cambiamos nada de manera incompatible. (Esto se prueba ejecutando todo el conjunto de pruebas de Google Collections (que es extensivo ) en comparación con el último envase de guayaba).
Creo que tienes una copia de google-collect - *. Jar aún hace su camino a tu classpath. O explícitamente, o porque algún otro tarro lo incluyó sin volver a empaquetarlo. Solo tienes que encontrarlo y eliminarlo.
En Google Collections, hubo un método ImmutableList.copyOf(Iterable)
, y no hubo un método público ImmutableList.copyOf(Collection)
. Lo cual está bien, porque una colección también es un iterable. En Guava, hemos añadido la sobrecarga de la colección. Esto es completamente compatible, ya que todas las fuentes que se usaron para compilar aún pueden hacerlo, y cualquier fuente compilada previamente simplemente seguirá haciendo referencia al método original.
El problema viene si compilas contra Guava pero luego ejecutas contra Google Collections. Creo que eso es lo que está ocurriendo.
Si se produce el error al implementar una aplicación web en WebLogic 12c (pero el JAR de guayaba 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>
Usar Guava incluido con GWT funcionó.
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 y agregar para construir el camino)