Tengo un perfil en mi pom.xml que debería estar siempre activo a menos que esté desactivado explícitamente (-P! FirstProfile). Resolví esto usando la bandera activeByDefault:
<profiles>
<profile>
<id>firstProfile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
</profiles>
Ahora en el mismo pom.xml tengo un segundo perfil definido que solo debería estar activo si el perfil está realmente activado (-P secondProfile). Así que el comportamiento predeterminado es: firstProfile active, secondProfile inactive. En algún otro momento me gustaría activar el segundo perfil además del primer perfil. Ahora el problema es que si hago eso con "-P secondProfile", el firstProfile desafortunadamente se desactiva. La documentación de Maven dice esto:
... Este perfil se activará automáticamente para todas las compilaciones a menos que se active otro perfil en el mismo POM utilizando uno de los métodos descritos anteriormente. Todos los perfiles que están activos por defecto se desactivan automáticamente cuando se activa un perfil en el POM en la línea de comando o mediante su configuración de activación. ...
¿Existe de alguna manera la posibilidad de mantener el firstProfile siempre activo (sin tener que declararlo en settings.xml)?
Respuestas:
Un truco es evitar
activeByDefault
y, en cambio, activar el perfil por la ausencia de una propiedad, por ejemplo:A continuación, debería poder desactivar el perfil con
-DskipFirstProfile
o con-P !firstProfile
, pero de lo contrario, el perfil estará activo.Ver: Maven: La referencia completa, Activación de perfil - Activación por ausencia de una propiedad
fuente
firstProfile
está deshabilitado solo si lo especifica-DskipFirstProfile
(por ejemplomvn verify -DskipFirstProfile
).Ojalá existiera esa posibilidad, a menudo la he perdido. El único problema relevante de JIRA que pude encontrar es este:
Y se ha resuelto como
Not A Problem
.Dejé de usarlo
activeByDefault
porque este enfoque de "todo o nada" lo hacía inútil para mí.La única forma de cambiar este comportamiento es escribir su propio reemplazo
DefaultProfileSelector
, registrarlo como un componente de plexus@Component( role = ProfileSelector.class )
y colocarlo${MAVEN_HOME}/lib/ext
(de esa manera se seleccionará como selector de perfil predeterminado). (Si está usando Maven 3.0.2 o anterior, también tendrá que editar${MAVEN_HOME}/bin/m2.conf
para cargarlib/ext
antes de que se carguelib
)fuente
Esta pregunta es antigua, pero parece que el problema se puede resolver usando en
activeProfile
lugar deactiveByDefault
. Estoy en Maven 3.3.9, pero la solución puede funcionar en versiones anteriores.Simplemente enumere su
activeProfiles
en susettings.xml
, así:En
my-awesome-profile
tengo configuraciones como URL de base de datos, etc., por lo que siempre se aplican. Aquí, activo un segundo perfilresolve-from-central
,:Observe cómo
my-awesome-profile
sigue activo. ¡Hurra!fuente
Simplemente puede enumerar todos los perfiles que desea activar en la línea de comando como tal:
-P perfil-1, perfil-2
maven fue diseñado para permitir la activación de múltiples perfiles automáticamente; sin embargo, si anula eso con la -P, solo se activan los perfiles enumerados en el parámetro.
fuente
-P
solo desactiva<activeByDefault>
perfiles. Los perfiles activados por<activeProfiles>
ensettings.xml
o por cualquier otro tipo de<activation>
permanecen activos a menos que se desactiven explícitamente.Los perfiles son una buena forma de poner orden en POM. Especialmente si usa varias ejecuciones del mismo complemento para diferentes propósitos.
Usando archivos:
Esto siempre será cierto (a menos que alguien elimine el directorio durante el arranque de Maven :). Probado con Maven 3.6.0.
También podría ser una buena forma de diferenciar entre tipos de proyectos. Por ejemplo, mi proyecto siempre ha estado
module.json
presente.Usar una extensión de activación de perfil
Hay algunas extensiones de Maven para la activación de perfiles. Uno de ellos en una bifurcación aquí:
https://github.com/OndraZizka/el-profile-activator-extension
fuente
<file><exists>.</exists></file>
No puede mantener activo el perfil predeterminado, pero puede tomar el contenido de ese perfil (el ... en su ejemplo) y simplemente moverlo a la sección principal del pom.
El hecho de que esté utilizando perfiles no significa que todo lo que esté haciendo deba estar dentro de un perfil.
fuente