2011-01-29 14 views

Respuesta

19

Puede intentar MavenXpp3Reader que es parte de maven-model. Código de ejemplo:

MavenXpp3Reader reader = new MavenXpp3Reader(); 
Model model = reader.read(new FileReader(mypom)); 
29

En primer lugar, estoy asumiendo que no está ejecutando dentro de un plugin de Maven, ya que hay maneras más fáciles de lograr que con las API disponibles allí.

La solución MavenXpp3Reader publicada anteriormente le permitirá leer el POM fácilmente, sin embargo, no tiene en cuenta la herencia del padre y la interpolación de las expresiones.

Para eso, necesitarías usar la clase ModelBuilder.

El uso de este es bastante simple, por ejemplo, de Archiva es este fragmento de código:

ModelBuildingRequest req = new DefaultModelBuildingRequest(); 
req.setProcessPlugins(false); 
req.setPomFile(file); 
req.setModelResolver(new RepositoryModelResolver(basedir, pathTranslator)); 
req.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL); 

Model model; 
try 
{ 
    model = builder.build(req).getEffectiveModel(); 
} 
catch (ModelBuildingException e) 
{ 
    ... 
} 

Usted debe hacer dos cosas para ejecutar esto, sin embargo:

  1. instantiate y alambre de una instancia de ModelBuilder incluyendo sus campos privados
  2. use uno de los resolvedores de Maven para encontrar los POM originales, o escriba los suyos (como es el caso en el fragmento de arriba)

La mejor manera de hacerlo depende del marco DI que ya esté utilizando, o si simplemente desea incrustar el contenedor predeterminado de Maven.

+0

Por lo que tengo entendido, esta es la forma de hacerlo de Maven 3. ¿Cuál sería el enfoque de Maven 2.2.x, podría mostrarnos? Gracias por adelantado. – carlspring

+1

las bibliotecas son compatibles, por lo que recomendaría utilizar las bibliotecas de maven 3 para incrustarlas independientemente. Si realmente necesita utilizar las bibliotecas de Maven 2, puede encontrar un ejemplo aquí: https://github.com/brettporter/centrepoint/blob/master/centrepoint/modules/maven-importer/src/main/java/com/ effectivemaven/centerpoint/maven/repository/CentralRepositoryService.java –

+0

¡Gracias por esa aclaración! ¡Muy apreciado! – carlspring

2

Esto depende de lo que esté tratando de lograr. Si solo quieres tratarlo como un XML con archivos XML incrustados, sigue las sugerencias que ya se ofrecen.

Si está buscando implementar alguna forma de funcionalidad Maven en su aplicación, puede probar la nueva biblioteca aether. No lo he usado, pero parece lo suficientemente simple como para integrarlo y debería ofrecer la funcionalidad Maven con poco esfuerzo de su parte.

BTW, esta biblioteca es una biblioteca Maven 3, no Maven 2 (como se especifica en la etiqueta). No sé si eso hace mucha diferencia para usted

+0

¿Puedes leer las configuraciones de los complementos con éter? –

+1

Guau, tema zombie. De todos modos, como dije, depende de lo que trates de hacer. Si solo analizara la configuración externamente a maven, usaría un analizador XML normal. Si está escribiendo un complemento, me imagino que puede hacerlo, pero puede haber bibliotecas más nuevas disponibles (he estado fuera del desarrollador de Maven desde hace un tiempo). Puede consultar algunos de los documentos del complemento: http://maven.apache.org/plugin-developers/ PS. Noté que el enlace a éter ya no funciona. El nuevo enlace es - http://www.eclipse.org/aether/ – GKelly

Cuestiones relacionadas