Maven skip tests

226

Estou usando o Maven 2.2.1 e, para construir meu projeto, usei este comando

mvn clean install -Dmaven.test.skip=true

No entanto, a construção falhou dizendo que não conseguiu encontrar um dos artefatos. No entanto, quando eu usei:

mvn clean install -DskipTests

tudo funcionou bem.

Até agora, estive pensando que esses 2 comandos são equivalentes. No entanto, esse link parece sugerir que -Dmaven.test.skip=truetambém pula a compilação dos casos de teste.

No entanto, isso ainda não me explicou por que um comando está funcionando e outro não. Ficarei grato se alguém por favor me explicar isso.

Prabhjot
fonte
1
Qual versão do maven-surefire-plugin você está usando? É o mesmo que a versão do documento que você está lendo?
gerrytan
2
Um pula edifício, o outro pula correndo. Se você quer usar os dois.
Elliott Frisch
1
Você pode fornecer detalhes da falha - a mensagem de erro ou o rastreamento de pilha?
Raghuram
1
Por que você está usando uma versão mais antiga do Maven, que está definida como EoL .
khmarbaise
1
Então, é realmente verdade que, para pular completamente tudo relacionado ao teste, tenho que usar -Dmaven.test.skip=true -DskipTests? Um ou outro pode às vezes ser omitida, dependendo das circunstâncias, mas quem quer pensar sobre isso ..
Landon Kuhn

Respostas:

121

Como você observou, -Dmaven.test.skip=truepula a compilação dos testes. Mais ao ponto, ele pula a construção dos artefatos de teste. Uma prática comum para grandes projetos é ter utilitários de teste e classes base compartilhadas entre os módulos no mesmo projeto.

Isso é feito com um módulo que exige um test-jarmódulo construído anteriormente:

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

Se -Dmaven.test.skip=true(ou simplesmente -Dmaven.test.skip) for especificado, os test-jars não serão construídos, e qualquer módulo que dependa deles falhará em sua construção.

Por outro lado, quando você usa -DskipTests, o Maven não executa os testes, mas os compila e constrói o jar de teste, disponibilizando-o para os módulos subseqüentes.

Mureinik
fonte
2
Como resolver este problema? Como meu comando online do maven, use -Dmaven.test.skip.
netuno
2
@neptune que problema? Se você tiver uma nova pergunta, use uma nova postagem para fazer isso.
Mureinik
58

Eu tive alguma interdependência com os testes para criar o pacote.

O comando a seguir consegue substituir a necessidade do artefato de teste para concluir o objetivo:

mvn -DskipTests=true  package
Gilwo
fonte
29

Há uma diferença entre cada parâmetro.

  • A -DskipTests pula a fase de testes em execução, ou seja, no final deste processo, você terá seus testes compilados.

  • -Dmaven.test.skip = true ignora a fase de compilação e execução de testes.

Como o parâmetro -Dmaven.test.skip = true pula a compilação, você não tem o artefato de testes.

Para obter mais informações, basta ler a documentação da surfire: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html

Dennys Fredericci
fonte
15

Posso dar um exemplo que resulta com o mesmo problema, mas isso pode não dar uma resposta para sua pergunta. (Além disso, neste exemplo, estou usando meu conhecimento do Maven 3, que pode não se aplicar ao Maven 2.)

Em um projeto Maven multi-módulo (contém módulos Ae B, onde Bdepende A), você pode também adicionar uma dependência teste on Apartir B.

Essa dependência pode ter a seguinte aparência:

<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>

(para obter mais informações, consulte https://maven.apache.org/guides/mini/guide-attached-tests.html )
Observe que o projeto Aproduz artefato secundário com um classificador em testsque as classes e os recursos de teste estão localizados.

Se você construir seu projeto -Dmaven.test.skip=true, receberá um erro de resolução de dependência, desde que o artefato de teste não tenha sido encontrado em seu repositório local ou repositórios externos. O motivo é que as classes de teste não foram compiladas nem o testsartefato foi produzido.
No entanto, se você executar sua construção com -DskipTestsseu testsartefato, será produzido (embora os testes não sejam executados) e a dependência será resolvida.

Stepan Vavra
fonte
10

Para ignorar o caso de teste durante a instalação limpa maven, usei -DskipTests paramater no comando a seguir

mvn clean install -DskipTests

na janela do terminal

Niraj Trivedi
fonte
9

O parâmetro -DskipTests pode não funcionar, dependendo da sua versão do plugin surefire.

Você pode usar "-Dmaven.test.skip.exec" em vez de "-DskipTests"

Fonte: Detalhes do parâmetro Surefire

vtsamis
fonte
1

Durante a compilação do maven, você pode pular a execução do teste adicionando o seguinte plugin no 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>
Radadiya Nikunj
fonte
1
Ele pula os testes mesmo quando você fazmvn test
Pratik Singhal