Temos um projeto Maven 2 com vários módulos. Exemplo:
<modules>
<module>common</module>
<module>foo</module>
<module>data</module>
<module>bar</module>
... more ...
</module>
Digamos que o módulo de "dados" consuma muito tempo para construir e queremos excluí-lo quando o projeto é construído por um servidor CI. Atualmente, usamos dois arquivos pom.xml para fazer isso. Um tem todos os módulos e o outro tem todos os módulos, exceto aqueles que podem ser deixados de fora para o CI. Mas isso é muito chato porque às vezes esquecemos de colocar um novo módulo em ambos os arquivos.
Existe uma solução que não precisa de duas listas de módulos separadas?
Com o Maven 3.2.1, agora você pode usar
-pl !<module_name>,!<module_name>
para excluir certos módulos da construção do reator.Veja esta solicitação de recurso: https://issues.apache.org/jira/browse/MNG-5230
fonte
-
vez de!
, ou seja,-pl -<module_name>
Os projetos a serem construídos também podem ser especificados na linha de comando mvn. Isso eliminaria a necessidade de um pom separado, mas, em vez disso, você teria que alterar a configuração do CI sempre que houver um novo módulo.
Talvez uma combinação deste sinalizador e /
--also-make-dependents
ou--also-make
reduzisse novamente a carga de manutenção.fonte
mvn clean install -pl mysubproject
Presumo que você queira que a construção padrão sempre crie tudo, independentemente da velocidade, para que novos desenvolvedores possam começar rapidamente sem ter que entender muito sobre o POM. Você pode usar perfis como este:
O problema com isso é que, se um desenvolvedor especificar outro perfil na linha de comando, o
expensive-modules-to-build
não será incluído (a menos que o desenvolvedor também o especifique). Isso torna complicado lembrar quais perfis devem ser incluídos.Aqui está uma maneira hacky de contornar isso. Ambos os perfis estão sempre incluídos, porque o arquivo pom.xml sempre existe. Então, para excluir os módulos caros, você pode usar
-P!full-build
na linha de comando.fonte
-pl !<module_name>,!<module_name>
é melhor do que a anteriorOutra ideia: os módulos do Reactor podem ser aninhados, portanto, deve ser possível agrupar seus módulos de construção rápida e lenta em poms separados e, em seguida, adicionar outro pom agregador contendo esses dois como módulos. Seu servidor CI só poderia fazer referência ao pom que contém os módulos de construção rápida.
fonte
Você poderia usar perfis maven . Em nosso ambiente de construção, criamos um perfil
quick
que desabilita muitos plug-ins e execução de teste.Isso é feito por
E então invocamos o maven da seguinte maneira
Você pode desabilitar a compilação e outros plug-ins padrão no pom do seu módulo para acelerá-lo.
fonte
Não era exatamente a resposta que essas pessoas estavam pedindo. Minha situação era que eu queria implantar apenas o pom pai. Estou usando o
spring-boot-thin-layout
módulo em um filho. Isso requer que o módulo pai seja implantado no artifactory. Eu adicionei o seguinte em meu projeto. Ele permite o saltoinstall
e / oudeploy
fase.No meu pai pom:
E no meu pom (s) filho (s) ou qualquer módulo que você não deseja implantado com o pai:
Então, efetivamente, quando eu executar
mvn deploy
no pom pai, ele compilará todos os módulos, não executará a instalação em nada e, no final, implementará qualquer módulo que não tenha<maven.deploy.skip>${disable.deploy}</maven.deploy.skip>
em suas propriedades. Portanto, no meu caso, apenas implantar o pai.fonte