2011-10-19 14 views
7

¿Se admiten Predicate sy Function en GWT 2.4.0 y Guava GWT 10.0.1? Ambas interfaces están marcadas como @GwtCompatible.Uso de las interfaces Predicate y Función de Guava 10 con GWT 2.4.0

Cuando se ejecuta el proyecto en modo de depuración alojado, recibo errores de validación en tiempo de ejecución en los usos de Predicate:

[ERROR] [MiProyecto] - Línea XXY: La importación javax.annotation.Nullable no se puede resolver

[eRROR] [MiProyecto] - YYY Línea: Posibilidad de nulos no se puede resolver a un tipo

de otros mensajes StackOverflow, creo que estos errores no deben requerir incluído Ivery JSR 305 en el camino a partir de Guava versión 09 (incluido JSR 305 en la ruta no solucionó el problema, de todos modos).

también aparezco para recibir un par de interfaz errores de desadaptación:

[ERROR] [MiProyecto] - Línea XXX: El tipo nuevo function() {} debe implementar el método abstracto heredado Function.apply (objeto)

[ERROR] [MiProyecto] - YYY Línea: aplicar el método (MyType) de nuevo tipo function() {} debe anular o implementar un supertipo método

, y similares errores en los usos de Predicate que presenté como un error: http://code.google.com/p/guava-libraries/issues/detail?id=765

Alguna idea de lo que podría ser mal con mi configuración?

Mi Proyecto archivo .gwt.xml contiene las siguientes líneas:

<inherits name="com.google.common.collect.Collect" /> 
<inherits name="com.google.common.base.Base" /> 

Mi archivo Java incluye las siguientes importaciones:

import com.google.common.base.Function; 
import com.google.common.base.Predicate; 

Estoy usando Eclipse 3.7.1 y JavaSE- 1.6

+1

¿Qué JAR estás incluyendo en tu proyecto de webapp? 'guava-10.0.1.jar' o' guava-gwt-10.0.1.jar'? – Strelok

+0

@Strelok: ambos están en guerra/WEB-INF/lib y la ruta de compilación del proyecto (como JAR no externos) –

+0

Función y Predicado se usan en Transformar y Filtrar. Verifica esas importaciones. Tuve un problema de métodos no coincidentes porque Transform venía de algún lugar wonky en lugar de google.common. –

Respuesta

0

Este es un tipo de known bug que necesita para tener jsr305.jar en su WEB-INF/lib eso es.

Otra cosa a tener en cuenta es el hecho de que las partes de guayaba se agrupan en el lado GWT * .jar pero allí se colocan en el paquete separado com.google.gwt.thirdparty.guava.common ..... Y como suele ocurrir con Eclipse, al resolver las importaciones toma la importación incorrecta y esto causa un lío en el tiempo de ejecución ya que las clases que se empaquetan en com.google.gwt.thirdparty.guava son de otra versión y NO DEBEN hacer referencia.

Mi consejo:

hacer una búsqueda de texto en todos sus archivos .java * para "thirdparty" subcadena y reemplazarla con las importaciones correctas - que trabajó para mí.

Una explicación un poco más profunda es que en versiones anteriores de Guava jsr305 estaba incluido en el jar guava pero esta versión lo sacaron y su dependencia aparece en el Maven pom de la lib pero no estaba bien documentada en el sitio web. Esto causó mucha confusión entre los usuarios.

2

Acabo de tener el mismo problema y encontré una solución para esto. El problema es que el código fuente JSR 305 no es parte de un módulo GWT y, por lo tanto, GWT lo ignora. Para solucionarlo, haga lo siguiente:

  • Agregue un descriptor del módulo GWT a jsr305-2.0.0.jar. En el interior del frasco que debe contener al menos las fuentes de Java en la subcarpeta javax/annotation añadir un archivo Annotation.gwt.xml con el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?> 
<module> 
    <source path="" /> 
</module> 
  • Añadir la jsr305-2.0.0.jar modificado a la ruta de clase de su proyecto GWT en eclipse. Aunque dicho en otro lugar se no Requiere añadir este frasco para WEB-INF/lib

  • Que módulos de su proyecto heredan desde el módulo de GWT recién creado añadiendo la siguiente línea a usted de módulos .gwt.xml archivos:

<inherits name='javax.annotation.Annotation'/> 

Eso es todo! Ahora su proyecto eclipse se compilará con éxito y el modo desarrollo/hospedaje también funcionará.