Foros del Web » Programación para mayores de 30 ;) » Java »

Leer Pom Maven

Estas en el tema de Leer Pom Maven en el foro de Java en Foros del Web. Hola a todos: Estoy desarrollando un plugin de Maven que al aplicarse a otro proyecto cree carpetas con los nombres de los subproeyctos (y luego ...
  #1 (permalink)  
Antiguo 30/11/2010, 07:41
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Leer Pom Maven

Hola a todos:

Estoy desarrollando un plugin de Maven que al aplicarse a otro proyecto cree carpetas con los nombres de los subproeyctos (y luego mueva los ficheros a las carpetas correspondientes).

El caso es que estoy realizando la implementacion recorriendo los Nodelist leyendo el XML y queria saber si hay alguna manera mas eficiente o mas sencilla ya que estoy un poco atascado y estoy empezando a plantearme otras posibles implementaciones. Un saludo

Añado el ccodigo que estoy implementando por si alguien ve mi fallo

Código:
	public String leerPom(String tag1, String tag2) {

		Document doc = crearDocument();
		doc.getDocumentElement().normalize();

		NodeList listaProjects = numeroNodos(tag1);
		for (int i = 0; i < listaProjects.getLength(); i++) {

			Node artifact = listaProjects.item(i);

			if (artifact.getNodeType() == Node.ELEMENT_NODE) {

				Element elemento = (Element) artifact;

				return (getTagValue(tag2, elemento).toString());

			} else {
				return "FALLO";
			}
		}
		return "FIN";
	}
Código:
private static String getTagValue(String sTag, Element eElement) {
		NodeList nlList = eElement.getElementsByTagName(sTag).item(0)
				.getChildNodes();
		Node nValue = (Node) nlList.item(0);
		return nValue.getNodeValue();
	}
La llamada a la funcion la hago con
Código:
int subProyectos = numeroNodos("module").getLength();
if (subProyectos > 0) {
					for (int j = 0; j < subProyectos; j++) {

						File myFolder6 = new File(DIRECTORIO + "\\"
								+ constantes[i] + "\\" + aux + "\\"
								+ leerPom(MODULE, MODULES));
						crearDirectorio(myFolder6);
					}
mi problema es que Subproyectos tiene valor 3 pero cuando recorre el pom solo crea la carpeta con el valor de la primera etiqueta module es decir teniendo este codigo

Código:
 <modules>
    <module>Uno</module>
    <module>Dos</module>
    <module>Tres</module>
  </modules>
Solo se me crea la carpeta Uno. alguien ve algo mal?

Última edición por Ciberyo; 30/11/2010 a las 09:14
  #2 (permalink)  
Antiguo 30/11/2010, 12:40
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Leer Pom Maven

Yo te recomendaria usar un API más "friendly" para atacar XML desde Java, como Dom4J o JDom... el API estándar es útil si quieres conseguir un dolor de cabeza o batir el record de lineas de código para conseguir las cosas, pero poco más .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 01/12/2010, 03:18
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Leer Pom Maven

Gracias por la sugerencia, le estoy echando un ojo y estoy teniendo 1 par de problemillas
En todos los ejemplos que encuentro
cuando se esta realizando la construccion incluyen lo siguiente
Código:
Document doc=  mySax.build(myFile);
pero a mi em dice que a la fuerza tengo que parsear a document

Código:
Document doc= (Document) mySax.build(myFile);
El problema viene que luego (supongo) que por ese parse no me deja hacer el

Código:
doc.getRootElement();
por el momento y como la raiz del pom siempre es la etiqueta <project> voy a tratar de hacer trampa

Código:
Element raizXml=doc.getElementById("project");
aunque no se si estare haciendo alguna burrada

Edito ya esta apañado no me coge bien lal ibreria y tengo que indicar

Código:
org.jdom.Element raizXml=doc.getRootElement();
Voy a probar el codigo a ver que tal , he podido seguir el ejemplo con solo 1 problema , que no me reconoce el .getChild creo que lo han debido sustituir por getAttribute

Ya he encontrado el problema (que no la solucion)

como en el xml la etiqueta de cada proyecto es siempre la misma etiqueta <module> cuando le pido que busque solo busca la primera

Última edición por Ciberyo; 01/12/2010 a las 04:48
  #4 (permalink)  
Antiguo 01/12/2010, 07:09
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Leer Pom Maven

Si tiene mas de uno, en vez de usar el metodo que te devuelve un elemento has de usar el que te devuelve una lista, como getChildren() etc. Es cuestión de investigar en el API y ver lo que mas conviene.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 02/12/2010, 01:40
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Leer Pom Maven

Ya lo he conseguido arreglar el problema estaba aqui
Código:
private static String getTagValue(String sTag, Element eElement) {
		NodeList nlList = eElement.getElementsByTagName(sTag).item(0)
				.getChildNodes();
		Node nValue = (Node) nlList.item(0);
		return nValue.getNodeValue();
	}
en lugar de item(0) habia que incluir ahi un bucle e ir almacenando el valor correspondiente a la iteracion en una lista.

Ahora que ya lo tengo implementado aunque sea con la api estandar puedo mirar implementaciones mas eficientes.

Gracias por la ayuda

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:21.