2008-09-24 5 views

Respuesta

0

No estoy seguro de cómo lo haría exactamente, pero me parece que esta podría no ser la mejor decisión de diseño. Si es posible, debe intentar desacoplar su Mojo de cualquier otro complemento.

En su lugar, recomendaría el uso de propiedades personalizadas para factorizar cualquier duplicación en la configuración de complementos separados.

Puede establecer una propiedad personalizada "foo" en su pom mediante el uso de la sección de propiedades:

<project> 
    ... 
    <properties> 
    <foo>value</foo> 
    </properties> 
    ... 
</project> 

La propiedad foo es ahora accesible en cualquier parte del pom utilizando el signo de dólar + notación de corchete:

<somePluginProperty>${foo}</somePluginProperty> 
3

El uso de propiedades es, sin duda, una manera de hacerlo, pero no es ideal. Todavía requiere que el usuario defina $ {propertyName} en múltiples lugares en todo el pom. Quiero permitir que mi complemento funcione sin modificaciones en el pom del usuario, aparte de la definición del complemento en sí.

No veo el acceso a las propiedades de tiempo de ejecución de otro MOJO como un acoplamiento demasiado apretado. Si el otro MOJO se define en cualquier parte de la jerarquía de compilación, quiero que mi MOJO respete la misma configuración.

Mi solución actual es:

private Plugin lookupPlugin(String key) { 

    List plugins = getProject().getBuildPlugins(); 

    for (Iterator iterator = plugins.iterator(); iterator.hasNext();) { 
     Plugin plugin = (Plugin) iterator.next(); 
     if(key.equalsIgnoreCase(plugin.getKey())) { 
      return plugin; 
     } 
    } 
    return null; 
} 


/** 
* Extracts nested values from the given config object into a List. 
* 
* @param childname the name of the first subelement that contains the list 
* @param config the actual config object 
*/ 
private List extractNestedStrings(String childname, Xpp3Dom config) { 

    final Xpp3Dom subelement = config.getChild(childname); 
    if (subelement != null) { 
     List result = new LinkedList(); 
     final Xpp3Dom[] children = subelement.getChildren(); 
     for (int i = 0; i < children.length; i++) { 
      final Xpp3Dom child = children[i]; 
      result.add(child.getValue()); 
     } 
     getLog().info("Extracted strings: " + result); 
     return result; 
    } 

    return null; 
} 

Esto ha funcionado para los pocos pequeña construye He probado con. Incluyendo una construcción de múltiples módulos.

3

Usted puede obtener una lista de plugins actualmente han utilizado en la construcción utilizando los siguientes pasos:

En primer lugar tiene que conseguir Maven para inyectar el proyecto actual en su mojo, se utiliza la variable de clase se define a continuación para obtener esta.

/** 
* The maven project. 
* 
* @parameter expression="${project}" 
* @readonly 
*/ 
private MavenProject project; 

Luego puede usar lo siguiente para obtener una lista de los complementos utilizados en esta compilación.

mavenProject.getBuildPlugins() 

Puede repetir esta lista hasta que encuentre el complemento desde el que desea extraer la configuración.

Finalmente, puede obtener la configuración como un Xpp3Dom.

plugin.getConfiguration() 

Nota: Si su alterando la otra configuración plugins (en lugar de simplemente extraer la información), sólo quedará alterada para la fase actual y no las fases posteriores.

+0

¿En qué se diferencia esto de mi solución anterior? Además, ¿getBuildPlugins devuelve únicamente los complementos definidos en la sección del pom.xml, o todos los complementos, incluso los definidos en los perfiles, etc.? – npellow

+1

El uso de getBuildPlugins() solo devolverá los complementos que se encuentran en la sección del pom.xml y complementos que se definen en la sección de los perfiles activos. – Kingamajick

+0

@Kingamajick ¿Debo lavar cambios alterados de alguna manera? Cambié las dependencias de los complementos (durante esta ejecución del complemento) y no puedo ver el resultado esperado –

Cuestiones relacionadas