tutorial pom homepage consola comandos central maven-2

maven 2 - pom - Usando perfiles de Maven para controlar la ejecución de la construcción.



maven repository url (2)

Lo estás pensando un poco al revés: haz que el perfil habilite el comportamiento, no lo deshabilite. Esto es justo en lo que son mejores los perfiles, y es exactamente tu caso: solo quieres que los pasos se ejecuten en ciertas circunstancias. Entonces podrías tener algo como:

<profile> <id>source-jars</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> ...

Y, de hecho, hay un ejemplo como este en la página de uso de maven-source-plugin . Cuando necesites generar tu artefacto, usa mvn -P source-jars (o lo que sea). ¡Eso es! Si solo necesita hacer esto en el momento del lanzamiento , el complemento de lanzamiento incluso ofrece una manera de definir los perfiles que se utilizarán directamente en la configuración del complemento de lanzamiento.

Necesito modificar la compilación de Maven para que un proyecto grande omita ciertos pasos durante las compilaciones de desarrollo típicas (es decir, no compile los archivos * -source.jar). He buscado "ejecución condicional" para maven, pero no he encontrado nada.

Un perfil de desarrollo suena como la forma intuitiva de hacer esto, pero no sé cuán intuitivo es el experto. Los documentos para perfiles muestran cómo configurar diferentes propiedades (es decir, parámetros de conexión de base de datos) para diferentes perfiles. Supongo que podría establecer una propiedad y luego probar si esa propiedad está configurada en la etiqueta de ejecución de maven-source-plugin - executions -.

¿Es esta la forma correcta de hacer la ejecución condicional en maven?

¿Cuál es la forma "correcta" de hacer esto en maven?


Puede lograr su objetivo real de habilitar el complemento de fuente-jars de forma predeterminada agregando dos perfiles a su POM. La documentación de los perfiles de Maven indica que puede agregar un elemento <activeByDefault>true</activeByDefault> a la sección de activation y establece que

Este perfil se activará automáticamente para todas las compilaciones, a menos que se active otro perfil en el mismo POM mediante uno de los métodos descritos anteriormente.

Por lo tanto, puede agregar dos perfiles, uno de los cuales es activeByDefault , que incluye el complemento relevante, y otro, que se puede activar de cualquiera de las formas estándar (como -P desde la línea de comandos) para evitar que se ejecute el perfil predeterminado . La sección de profiles en su pom.xml (o la configuración de Maven o lo que sea) podría verse así:

<profile> <id>source-jars</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> ... </plugin> </plugins> </build> </profile> <profile> <!-- active this profile to disable the source-jars plugin --> <id>no-optional-plugins</id> </profile>

Desafortunadamente, no puedo ver una manera de hacer que este método se amplíe bien para controlar múltiples complementos. Creo que necesita perfiles O(n^2) para n complementos, pero para este simple caso debería funcionar bien.

Otra opción posiblemente más simple con Maven ≥ 2.0.10 es tener el perfil de origen de los activeByDefault desde arriba (aún activeByDefault ) y desactivar manualmente el perfil cuando lo desee, prefijando el ID de perfil con - o ! después de -P bandera de CLI:

$ mvn -P !source-jars

Este método no tiene los mismos problemas O(n^2) con múltiples complementos, pero también es menos flexible, ya que la desactivación no puede ser activada por una propiedad del sistema, una variable de entorno, una versión JDK, etc.