Pergunta

Temos uma construção de módulos múltiplos com módulos usando diferentes tecnologias, como Java e Flex. De alguma forma, é possível ativar diferentes perfis com base no módulo que é compilado atualmente?

Eu tentei com uma ativação como

<profile>
  <id>flex</id>
  <activation>
    <file>
      <exists>${basedir}/src/main/flex</exists>
    </file>
  </activation>
  ...
</profile

Mas não funcionou, embora o uso de $ {baseado} seja documentado na documentação do Maven (Este é um bug no maven). Existe uma possibilidade diferente de ter ativações diferentes com base no módulo atual? Ou o MAVEN permite apenas ativar um perfil para todos os módulos ou não?

Foi útil?

Solução

Para aqueles como eu lendo essa pergunta em busca de respostas, esse caso de uso agora funciona no Maven 3.

Houve um bug afetando esse recurso nas versões iniciais de 3 (ver http://jira.codehaus.org/browse/mng-2363) Mas funciona para mim corretamente usando o Maven 3.0.4.

Outras dicas

Depois de mais algumas pesquisas, finalmente cheguei à conclusão de que isso não é possível por duas razões na versão atual do Maven (2.1.0):

  • Os perfis do MAVEN não são herdados, portanto você não pode definir um perfil no POM dos pais e ativá -lo em um pom infantil.
  • Não encontrei a possibilidade de ativar um perfil de um POM. A ativação não funciona com $ {baseado} e a resposta de ativação da propriedade apenas às configurações do sistema, que são especificadas globalmente através da opção -d.

Em 2.2.1, os perfis são herdados, mas a edição $ {baseada} ainda está lá. Estou no mesmo barco - preciso ativar um perfil com base na existência de um arquivo em um determinado projeto. Meu filho constrói a execução individualmente bem (perfil herdado ativado pela existência de arquivo local), mas se eu executar a compilação do principal pai, eles falham porque o arquivo não é encontrado.

No que diz respeito à ativação baseada em arquivo, você pode tentar remover $ {basearir}. Nós usamos assim:

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>

Não sei se isso ajuda, mas resolvi um problema semelhante com a seguinte abordagem:

  1. Eu criei e descrevi o perfil no pai Pom, que tem activeByDefault=false. A seção do pluginmanagement contém as configurações para diferentes plugins.
  2. As crianças podem reutilizar este perfil e definir activeByDefault=trueIsso torna o perfil ativo, mas ainda nenhum dos plugins é ativado.
  3. Felizmente, porém, as configurações de plug -in descritas estão disponíveis. Você pode reutilizá-los em crianças definindo-as na seção de plugins. Você apenas fornece o grupo e o artifactid e define inherited=true Para cada plug -in que você deseja reutilizar nas crianças.

Espero que isso ajude. Desculpe por não incluir nenhum trecho de código, mas espero que as Soutions sejam compreensíveis.

Você pode definir uma propriedade em cada módulo que deseja usar o perfil e, em seguida, usar a ativação "Propriedade" em seus perfis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top