Cosa significa <scope> in <dipendenza> in pom.xml per?


Risposte:


266

L' <scope>elemento può assumere 6 valori: compilazione , fornito , runtime , test , sistema e importazione .

Questo ambito viene utilizzato per limitare la transitività di una dipendenza e anche per influire sul percorso di classe utilizzato per varie attività di compilazione.

compilare

Questo è l'ambito predefinito, usato se non ne viene specificato nessuno. Le dipendenze di compilazione sono disponibili in tutti i percorsi di classe di un progetto. Inoltre, tali dipendenze vengono propagate a progetti dipendenti.

fornito

È molto simile alla compilazione, ma indica che ci si aspetta che JDK o un contenitore forniscano la dipendenza in fase di esecuzione. Ad esempio, quando si crea un'applicazione Web per Java Enterprise Edition, è necessario impostare la dipendenza dall'API Servlet e dalle relative API Java EE sull'ambito fornito poiché il contenitore Web fornisce tali classi. Questo ambito è disponibile solo sul percorso di classe di compilazione e test e non è transitivo.

runtime

Questo ambito indica che la dipendenza non è richiesta per la compilazione, ma per l'esecuzione. È in runtime e test classpaths, ma non il compilare classpath.

test

Questo ambito indica che la dipendenza non è richiesta per l'uso normale dell'applicazione ed è disponibile solo per le fasi di compilazione ed esecuzione del test.

sistema

Questo ambito è simile a quello fornito, tranne per il fatto che è necessario fornire il JAR che lo contiene esplicitamente. Il manufatto è sempre disponibile e non viene cercato in un repository.

import (disponibile solo in Maven 2.0.9 o successivo)

Questo ambito viene utilizzato solo su una dipendenza di tipo pom nella sezione. Indica che il POM specificato deve essere sostituito con le dipendenze nella sezione di quel POM. Poiché vengono sostituite, le dipendenze con un ambito di importazione non partecipano effettivamente alla limitazione della transitività di una dipendenza.

Per rispondere alla seconda parte della tua domanda:

Come possiamo usarlo per eseguire il test?

Si noti che l' testambito consente di utilizzare le dipendenze solo per la fase di test.

Leggi la documentazione per tutti i dettagli.


Quindi se usi "test", finisce nel .jar creato?
markthegrea,

1
cosa succede se è necessaria una dipendenza in fase di compilazione e runtime?
Albin,


12

Sei ambiti di dipendenza:

  • compilare : ambito predefinito, classpath è disponibile per entrambi src/mainesrc/test
  • test : classpath è disponibile persrc/test
  • fornito : come complie ma fornito da JDK o da un container in fase di esecuzione
  • runtime : non richiesto per la compilazione richiede solo in fase di runtime
  • sistema : fornito localmente fornire classpath
  • import : può importare solo altri POM in <dependencyManagement/>, disponibile solo in Maven 2.0.9 o successivo


4

Il tag Scope viene sempre utilizzato per limitare le dipendenze transitive e la disponibilità del jar a livello del percorso di classe. Se non forniamo alcun ambito, l'ambito predefinito funzionerà, ad esempio Compile .


11
Compilare significa che è necessario il JAR per compilare ed eseguire l'app. Per un'applicazione Web, ad esempio, il JAR verrà inserito nella directory WEB-INF / lib. Fornito significa che è necessario il JAR per la compilazione, ma in fase di esecuzione esiste già un JAR fornito dall'ambiente, quindi non è necessario che sia impacchettato con l'app. Per un'app Web, ciò significa che il file JAR non verrà inserito nella directory WEB-INF / lib. Per un'app Web, se il server delle app fornisce già il JAR (o la sua funzionalità), utilizza "fornito", altrimenti usa "compila".
Mukesh,

1
per favore, aggiungi il tuo commento nella tua risposta
Supun Wijerathne,

0

Se non forniamo alcun ambito, allora l'ambito predefinito è compilare, Se vuoi confermare, vai semplicemente alla scheda Pom efficace nell'editor eclipse, ti mostrerà come compilare.


OP ha chiesto che cosa il campo di applicazione è e lo fa , non trovare quello l'ambito predefinito è.
Wouter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.