il nostro sito utilizza cookie tecnici e di terze parti per migliorare la tua esperienza di navigazione.


Ho cercato su Google un po ' ancora confuso su cosa significhi esattamente ciascuno dei precedenti.

Ecco la mia comprensione di esso:

  • jaxrs-api: contiene solo api. Nessuna implementazione. Ma come è diverso da JSR311
  • jsr311-api: JSR311 è una richiesta specifica. Il che significa che dovrebbe essere un documento. Perché allora è un barattolo?
  • javax.ws.rs-api : È un attuazione?
  • jersey-core (/jersey client): È un'implementazione di JSR311.

Ho scaricato ogni jar e ho provato a decompilare e vedere cosa c'è al suo interno, ma sono solo in grado di trovare interfacce in tutte e non nell'implementazione.

Sto affrontando queste domande nel contesto di avvisi duplicati generati dal plugin maven shade, e ho bisogno di una corretta comprensione di quanto sopra per capire quali escludere e perché.

Author: Paul Samsotha, 2015-08-20

1 answers

Prima arriverò alla domanda

"JSR311 è una richiesta specifica. Il che significa che dovrebbe essere un documento. Perché allora è un barattolo?"

Tranne l'ultimo (jersey-core), tutti quei vasi sono vasi "specifiche". Le specifiche JAX-RS (così come molte altre Java) definiscono i contratti (o le interfacce) per cui gli implementatori dovrebbero implementare il comportamento specificato.

Quindi fondamentalmente tutte le classi specificate nella specifica dovrebbero essere nel jar come contratto. Gli utenti finali dei vasi possono usarli per i contratti. ma non c'è implementazione. È necessario disporre di un'implementazione effettiva per eseguire l'applicazione, sebbene il jar API spec sia sufficiente per compilare un'applicazione completa compatibile con JAX-RS.

Ad esempio, se abbiamo uno di quei jar API spec sul classpath, possiamo creare un'intera applicazione JAX-RS e compilarla, ma per eseguirla, se non abbiamo l'implementazione effettiva, dobbiamo distribuire in un server che ha l'effettiva implementazione di quella versione specifica, ad esempio JBoss o Glassfish


  • Jaxrs-api - Questo è Il packaging di RESTeasy delle specifiche. Non è il barattolo delle specifiche ufficiali, ma aderisce ai contratti delle specifiche. RESTeasy utilizza questo jar per l'intera linea spec, cioè 1.x-corrente. Anche se il jar cambia gli interni per aderire alle diverse versioni di JAX-RS.

  • Jsr311-api - Questo è il funzionario vaso spec per la JAX-RS 1.linea x.

  • Javax. ws. rs-api - Questo è il barattolo delle specifiche ufficiali per JAX-RS 2.linea x.

  • Jersey-core - Questa è un'implementazione parziale delle specifiche. Il resto dell'implementazione è contenuto all'interno di altri vasi Jersey. Si noti che nelle versioni precedenti di Jersey, in realtà impacchettavano le API specifiche JAX-RS in questo jar. Non è stato fino a più tardi che Jersey ha iniziato a utilizzare le specifiche ufficiali Giare.

  • Jaxrs-ri - Questa è la maglia completa 2.implementazione x confezionato in un vaso. Il " ri " significa implementazione di riferimento , che è ciò che Jersey è: l'implementazione di riferimento JAX-RS. Se non stai usando un gestore di dipendenze come Maven, potresti voler usare questo singolo barattolo invece di dover usare tutti i barattoli separati con cui Jersey viene fornito.

Altre risorse

Si noti inoltre che sebbene diverse implementazioni aderiscano alle specifiche, ogni implementazione ha il proprio set di funzionalità extra. Per saperne di più si dovrebbe passare attraverso la documentazione della diversa implementazione. Le tre implementazioni più popolari sono Jersey, RESTeasy e CXF

 35
Author: Paul Samsotha, 2018-09-30 23:01:45