Eu tenho um perfil no meu pom.xml que deve estar sempre ativo, a menos que seja explicitamente desativado (-P! FirstProfile). Resolvi isso usando o sinalizador activeByDefault:
<profiles>
<profile>
<id>firstProfile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
</profiles>
Agora no mesmo pom.xml tenho um segundo perfil definido que só deve estar ativo se o perfil estiver realmente ativado (-P secondProfile). Portanto, o comportamento padrão é: firstProfile ativo, secondProfile inativo. Em algum outro momento, gostaria de ativar o segundo perfil, além do primeiro perfil. O problema é que, se eu fizer isso com "-P secondProfile", o firstProfile infelizmente será desativado. A documentação do Maven afirma o seguinte:
... Este perfil ficará automaticamente ativo para todas as compilações, a menos que outro perfil no mesmo POM seja ativado usando um dos métodos descritos anteriormente. Todos os perfis que estão ativos por padrão são automaticamente desativados quando um perfil no POM é ativado na linha de comando ou por meio de sua configuração de ativação. ...
Existe alguma possibilidade de como manter o firstProfile sempre ativo (sem ter que declará-lo no settings.xml)?
Respostas:
Um truque é evitar
activeByDefault
e, em vez disso, ativar o perfil pela ausência de uma propriedade, por exemplo:Você deve então ser capaz de desativar o perfil com
-DskipFirstProfile
ou com-P !firstProfile
, mas, caso contrário, o perfil ficará ativo.Veja: Maven: A Referência Completa, Ativação de Perfil - Ativação pela Ausência de uma Propriedade
fonte
firstProfile
é desativado apenas se você especificar-DskipFirstProfile
(por exemplomvn verify -DskipFirstProfile
).Eu gostaria que houvesse essa possibilidade, sempre a perdi. O único problema relevante do JIRA que consegui encontrar é este:
E foi resolvido como
Not A Problem
.Parei de usar
activeByDefault
porque essa abordagem de "tudo ou nada" tornou-o inútil para mim.A única maneira de mudar este comportamento é escrever seu próprio substituto para
DefaultProfileSelector
, registrá-lo como um componente do plexo@Component( role = ProfileSelector.class )
e colocá-lo${MAVEN_HOME}/lib/ext
(assim ele será escolhido como seletor de perfil padrão). (Se você estiver usando o Maven 3.0.2 ou anterior, também terá que editar${MAVEN_HOME}/bin/m2.conf
para carregarlib/ext
antes de carregarlib
)fonte
Esta questão é antiga, mas parece que o problema pode ser resolvido usando em
activeProfile
vez deactiveByDefault
. Estou no Maven 3.3.9, mas a solução pode funcionar em versões anteriores.Simplesmente liste o seu
activeProfiles
em seusettings.xml
, assim:Em
my-awesome-profile
Eu tenho configurações como URLs de banco de dados e assim por diante, então elas sempre se aplicam. Aqui, eu ativo um segundo perfilresolve-from-central
:Observe como
my-awesome-profile
ainda está ativo. Yay!fonte
Você pode simplesmente listar todos os perfis que deseja ativar na linha de comando, como:
-P perfil-1, perfil-2
O maven foi projetado para permitir a ativação de vários perfis automaticamente; entretanto, se você substituir isso com o -P, apenas os perfis listados no parâmetro serão ativados.
fonte
-P
apenas desativa<activeByDefault>
perfis. Os perfis ativados por<activeProfiles>
emsettings.xml
ou por qualquer outro tipo de<activation>
permanecem ativos, a menos que sejam explicitamente desativados.Os perfis são uma boa maneira de colocar alguma ordem no POM. Especialmente se você usar várias execuções do mesmo plugin para finalidades diferentes.
Usando arquivos:
Isso sempre será verdade (a menos que alguém exclua o diretório durante a inicialização do Maven :). Testado com Maven 3.6.0.
Também pode ser uma boa maneira de diferenciar os tipos de projetos. Por exemplo, meu projeto sempre
module.json
esteve presente.Usando uma extensão de ativação de perfil
Existem algumas extensões Maven para ativação de perfil. Um deles em uma bifurcação aqui:
https://github.com/OndraZizka/el-profile-activator-extension
fonte
<file><exists>.</exists></file>
Você não pode manter o perfil padrão ativo, mas pode pegar o conteúdo desse perfil (o ... no seu exemplo) e simplesmente movê-lo para a seção principal do pom.
Só porque você está usando perfis, isso não significa que tudo o que você está fazendo precisa estar dentro de um perfil.
fonte