2014-11-17 10 views
101

Guardando la documentazione http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html, possiamo vedere <scope> tag sotto <dependency>Che cosa è <scope> sotto <dependency> in pom.xml per?

Che cosa è questo e come possiamo usarlo per l'esecuzione di test?

+12

è tutto molto ben spiegato nella documentazione: http://maven.apache.org/guides /introduction/introduction-to-dependency-mechanism.html#Dependency_Scope –

+0

possibile duplicato di [Comprendere le dipendenze Compile- vs Run-time] (http://stackoverflow.com/questions/7070570/understanding-compile-vs-run-time -dipendenze) – arghtype

risposta

149

L'elemento <scope> può assumere 6 valori: compilare, disponibile, runtime, prova, sistema e importazione.

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

compilare

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

fornito

Questo è molto simile in fase di compilazione, ma indica che ci si aspetta il JDK o un contenitore per fornire la dipendenza in fase di esecuzione. Ad esempio, quando si crea un'applicazione Web per Java Enterprise Edition, si imposta la dipendenza sull'API servlet e le API Java EE correlate all'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

di tale scopo indica che la dipendenza non è necessaria per la compilazione, ma è per l'esecuzione. È nel runtime e verifica i percorsi di classe, ma non il classpath di compilazione.

prova

di tale scopo indica che la dipendenza non è necessaria per il normale utilizzo dell'applicazione, ed è disponibile solo per le fasi di test compilazione ed esecuzione.

sistema

Questo ambito è simile a condizione se non che è necessario fornire il JAR, che contiene in modo esplicito. L'artefatto è sempre disponibile e non è cercato in un repository.

importazione (disponibile solo in Maven 2.0.9 o successiva)

di tale scopo 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 quella POM. Dal momento che vengono sostituiti, le dipendenze con un ambito di importazione in realtà non partecipano a limitare la transitività di una dipendenza.

Per rispondere alla seconda parte della tua domanda:

Come possiamo usarlo per l'esecuzione di test?

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

Leggere il documentation per tutti i dettagli.

3

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

+6

Compilazione 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 è già disponibile un JAR fornito dall'ambiente in modo che non sia necessario incluso nella confezione dell'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 le sue funzionalità), quindi utilizzare "fornito" altrimenti utilizzare "compilazione". – Mukesh

+0

aggiungi questo commento nella tua risposta –

0

Se non forniamo alcun ambito, allora l'ambito di default è compilato, Se vuoi confermare, semplicemente vai alla scheda Pom effettivo nell'editor di Eclipse, ti mostrerà come compilato.

+0

L'OP ha chiesto quale sia l'ambito * è * e * fa *, non trovando quale sia l'ambito predefinito. – Wouter

2

sei Dipendenza Scopes in un'unica riga:

  • compilare: default
  • fornito: dal JDK o un contenitore in fase di esecuzione
  • runtime: non richiesto per la compilazione
  • test: utilizzato solo durante le prove
  • sistema: previsto localmente
  • importazione: disponibile solo in Maven 2.0.9 o successivo