tutorial jax example rest jersey jax-rs jsr jsr311

rest - jax - jersey java download



jaxrs-api VS jsr311-api VS javax.ws.rs-api VS jersey-core VS jaxrs-ri (1)

He buscado en Google un poco todavía estoy confundido en cuanto a lo que cada uno de los anteriores significa exactamente.

Aquí está mi entendimiento de ello:

  • jaxrs-api : contiene solo api. No hay implementación. Pero en qué se diferencia de JSR311
  • jsr311-api : JSR311 es una solicitud de especificación. Lo que significa que se supone que es un documento. ¿Por qué entonces es un tarro?
  • javax.ws.rs-api : ¿Es una implementación?
  • jersey-core (/ jersey cliente): es una implementación de JSR311.

Descargué cada jarro e intenté descompilarlo y ver qué hay dentro, pero solo puedo encontrar interfaces en todos ellos y no en la implementación.

Me enfrento a estas preguntas en el contexto de las advertencias duplicadas generadas por el complemento Maven Shade, y necesito una comprensión adecuada de lo anterior para determinar cuáles excluir y por qué.


Primero voy a la pregunta

"JSR311 es una solicitud de especificación. Lo que significa que se supone que es un documento. ¿Por qué entonces es un tarro?"

Excepto el último ( jersey-core ), todos esos frascos son frascos de "especificación". Las especificaciones JAX-RS (así como muchas otras de Java) definen los contratos (o interfaces) para los cuales los implementadores deben implementar el comportamiento especificado.

Básicamente, todas las clases especificadas en la especificación deberían estar en el contenedor como contratos. Los usuarios finales de los frascos pueden usarlos para los contratos. Pero no hay implementación. Debe tener una implementación real para ejecutar la aplicación, aunque el tar API de especificaciones es suficiente para compilar una aplicación completa compatible con JAX-RS.

Por ejemplo, si tenemos uno de esos archivos API de especificación en la ruta de clase, podemos crear una aplicación JAX-RS completa y compilarla, pero para ejecutarla, si no tenemos la implementación real, necesitamos implementar a un servidor que tiene la implementación real de esa versión de especificación, por ejemplo JBoss o Glassfish

  • jaxrs-api - Este es RESTeasy''s paquete de RESTeasy''s de la especificación. No es el tarro oficial de especificaciones, pero sí cumple con los contratos de especificaciones. RESTeasy usa este jar para toda la línea de especificaciones, es decir, 1.x - actual. Aunque el frasco cambia las partes internas para adherirse a las diferentes versiones de JAX-RS.

  • jsr311-api : este es el archivo oficial de especificaciones para la línea JAX-RS 1.x.

  • javax.ws.rs-api : este es el archivo oficial de especificaciones para la línea JAX-RS 2.x.

  • jersey-core - Esta es una implementación parcial de la especificación. El resto de la implementación está contenida dentro de otros tarros de Jersey. Tenga en cuenta que en versiones anteriores de Jersey, en realidad empaquetaban las API de especificaciones de JAX-RS en este contenedor. No fue hasta más tarde que Jersey comenzó a usar los frascos de especificaciones oficiales.

  • jaxrs-ri : esta es la implementación completa de Jersey 2.x empaquetada en un solo contenedor. La "ri" significa la implementación de referencia , que es lo que Jersey es: la implementación de referencia de JAX-RS. Si no está utilizando un administrador de dependencias como Maven, es posible que desee usar este único frasco en lugar de tener que usar todos los frascos separados que viene con Jersey.

Otros recursos

También tenga en cuenta que aunque una implementación diferente se adhiere a la especificación, cada implementación tiene su propio conjunto de características adicionales. Para obtener más información, consulte la documentación de las diferentes implementaciones. Las tres implementaciones más populares son Jersey , RESTeasy y CXF