Maven salta i test


226

Sto usando Maven 2.2.1 e per costruire il mio progetto ho usato questo comando

mvn clean install -Dmaven.test.skip=true

Tuttavia, la build non è riuscita dicendo che non è stato possibile trovare uno dei manufatti. Tuttavia, quando ho usato:

mvn clean install -DskipTests

tutto ha funzionato bene.

Finora ho pensato che questi 2 comandi fossero equivalenti. Tuttavia, questo collegamento sembra suggerire che -Dmaven.test.skip=truesalta anche la compilazione dei casi di test.

Tuttavia, ciò non mi ha ancora spiegato perché un comando funzioni e un altro no. Saremo grati se qualcuno per favore mi spieghi questo.


1
Quale versione di maven-surefire-plugin stai usando? È uguale alla versione doc che stai leggendo?
Gerrytan,

2
Uno salta la costruzione, l'altro salta in esecuzione. Se vuoi entrambi usa entrambi.
Elliott Frisch,

1
Potete fornire dettagli sull'errore - il messaggio di errore o stacktrace?
Raghuram,

1
Perché stai usando una versione Maven così vecchia che è già definita EoL .
Khmarbaise,

1
Quindi è davvero vero che per saltare completamente tutto ciò che riguarda il test devo usare -Dmaven.test.skip=true -DskipTests? L'uno o l'altro a volte può essere omesso, a seconda delle circostanze, ma chi vuole pensarci ..
Landon Kuhn

Risposte:


121

Come hai notato, -Dmaven.test.skip=truesalta la compilazione dei test. Più precisamente, salta la costruzione dei manufatti di prova. Una pratica comune per i grandi progetti è quella di avere utility di test e classi di base condivise tra i moduli nello stesso progetto.

Ciò si ottiene avendo un modulo che richiede uno test-jardi un modulo precedentemente costruito:

<dependency>
  <groupId>org.myproject.mygroup</groupId>
  <artifactId>common</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

Se viene specificato -Dmaven.test.skip=true(o semplicemente -Dmaven.test.skip), gli test-jars non vengono creati e qualsiasi modulo che si basa su di essi non riuscirà a realizzarsi.

Al contrario, quando si utilizza -DskipTests, Maven non esegue i test, ma li compila e crea il test-jar, rendendolo disponibile per i moduli successivi.


2
Come risolvere questo problema? Come comando di maven online usa -Dmaven.test.skip.
nettuno

2
@nettuno quale problema? Se hai una nuova domanda, ti preghiamo di utilizzare un nuovo post per porlo.
Mureinik,

58

Ho avuto una certa interdipendenza con i test per compilare il pacchetto.

Il seguente comando riesce a sovrascrivere la necessità per l'artefatto di test al fine di completare l'obiettivo:

mvn -DskipTests=true  package

29

C'è una differenza tra ogni parametro.

  • La fase -DskipTest salta la fase di test, significa che alla fine di questo processo avrai compilato i tuoi test.

  • La fase -Dmaven.test.skip = true salta la compilazione e l'esecuzione dei test.

Poiché il parametro -Dmaven.test.skip = true salta la compilazione non hai l'artefatto dei test.

Per maggiori informazioni basta leggere la documentazione di surfire: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html


15

Posso darti un esempio che risulta con lo stesso problema, ma potrebbe non darti una risposta alla tua domanda. (Inoltre, in questo esempio, sto usando la mia conoscenza di Maven 3, che potrebbe non essere applicabile per Maven 2.)

In un progetto Maven multi-modulo (contiene i moduli Ae B, dove Bdipende A), è possibile aggiungere anche una dipendenza di prova su Ada B.

Questa dipendenza può apparire come segue:

<dependency>
     <groupId>com.foo</groupId>
     <artifactId>A</artifactId>
     <type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 2. -->
     <scope>test</scope>
</dependency>

(per ulteriori informazioni consultare https://maven.apache.org/guides/mini/guide-attached-tests.html )
Si noti che il progetto Aproduce artefatto secondario con un classificatore in testscui si trovano le classi di test e le risorse di test.

Se si crea il progetto con -Dmaven.test.skip=true, si otterrà un errore di risoluzione delle dipendenze finché l' artefatto di test non è stato trovato nel repository locale o nei repository esterni. Il motivo è che le classi dei test non sono state né compilate né testsprodotto manufatto.
Tuttavia, se esegui la tua build con il -DskipTeststuo testsartefatto verrà prodotto (anche se i test non verranno eseguiti) e la dipendenza verrà risolta.


10

Per saltare il test case durante l'installazione pulita maven ho usato il parametro -DskipTests nel seguente comando

mvn clean install -DskipTests

nella finestra del terminale


9

Il parametro -DskipTests potrebbe non funzionare a seconda della versione del plug-in surefire.

È possibile utilizzare "-Dmaven.test.skip.exec" invece di "-DskipTests"

Fonte: Surefire Parameter Details


1

Durante la compilazione di Maven puoi saltare l'esecuzione del test aggiungendo il seguente plugin in pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
         <skipTests>true</skipTests>
    </configuration>
</plugin>

1
Salta i test anche quando lo faimvn test
Pratik Singhal
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.