Precisamos ser capazes de pular um submódulo em determinados ambientes.
O módulo em questão contém testes de integração e leva meia hora para ser executado. Portanto, queremos incluí-lo na criação no servidor de IC, mas quando os desenvolvedores criam localmente (e os testes são executados), queremos pular esse módulo.
Existe uma maneira de fazer isso com uma configuração de perfil? Eu pesquisei no Google e olhei para as outras perguntas / respostas aqui e não encontrei uma boa solução.
Suponho que uma opção é remover completamente esse submódulo do pai pom.xml
e adicionar outro projeto em nosso servidor de IC para criar esse módulo.
Sugestões?
maven
continuous-integration
jenkins
denishaskin
fonte
fonte
Respostas:
Claro, isso pode ser feito usando perfis. Você pode fazer algo como o seguinte no pom.xml pai.
No seu IC, você executaria o maven com o
ci
perfil, ou seja,mvn -P ci clean install
fonte
activeByDefault
a esse perfil e tive que adicionar outro perfil vazio (por exemploskip-integration-tests
) para poder ignorá-los.A versão 3.2.1 do Maven adicionou esse recurso. Você pode usar a
-pl
opção ( atalho para--projects
lista) com!
ou-
( fonte ) para excluir determinados sub-módulos.Tenha cuidado em bater o personagem! é um caractere especial, então você precisa aspá-lo (como eu fiz) ou escapar com o caractere de barra invertida.
A sintaxe para excluir vários módulos é igual à inclusão
EDIT O Windows não parece gostar de aspas simples, mas é necessário no bash; no Windows, use aspas duplas (obrigado @awilkinson)
fonte
mvn -pl !com.acme:nestedmodule1
mvn -pl '!path/to/submodule/directory'
, sem usar groupId e artifactId. Minha resposta funciona sesubmodule1
esubmodule2
estiver localizada no diretório atual.-pl
emmvn install
, você provavelmente vai precisar usá-lo paramvn deploy
bemÉ possível decidir quais projetos de reatores serão construídos especificando o
-pl
argumento da linha de comando:Ele aceita uma lista de parâmetros separados por vírgula em uma das seguintes formas:
[groupId]:artifactId
Assim, dada a seguinte estrutura:
Você pode especificar a seguinte linha de comando:
para construir tudo. Remova os elementos da lista para criar apenas os módulos que desejar.
EDIT: como blackbuild apontou, a partir do Maven 3.2.1 você tem uma nova
-el
bandeira que exclui projetos do reator, da mesma forma que-pl
:fonte
mvn install -pl .
para instalar o pom pai apenas no repositório local sem construir módulos.A noção de projetos com vários módulos existe para atender às necessidades de segmentos co-dependentes de um projeto. Esse cliente depende dos serviços que, por sua vez, dependem dos EJBs ou das rotinas de acesso a dados. Você pode agrupar seus testes de integração contínua (IC) dessa maneira. Eu racionalizaria isso dizendo que os testes de IC precisam estar em sintonia com as alterações na lógica do aplicativo.
Suponha que seu projeto esteja estruturado como:
Os
project-root/pom.xml
módulos defineO
ci/pom.xml
define perfis como:Isso fará com que o Maven pule os testes neste módulo, exceto quando o perfil nomeado
CI
estiver ativo. Seu servidor de IC deve ser instruído para executarmvn clean package -P CI
. O site do Maven tem uma explicação detalhada do mecanismo de criação de perfil .fonte
agora existe (da versão 1.1.1) um sinalizador 'pular' no poço.
Então você pode fazer coisas como:
no seu módulo, e o pit pulará
[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module-selenium --- [INFO] Ignorando o projeto
fonte