public void parse(File f) {
        try {
            String manifestDir=f.getParent();
            Document doc=XML.docBuilder.parse(f);
            Element root=doc.getDocumentElement();
            if(root.getTagName().equals("manifest")) {
                NodeList moduleMap=XML.getElements(root,XML.xp_mf_modulemap);
                int n=moduleMap.getLength();
                for(int i=0;i<n;i++) {
                    Node mapItem=moduleMap.item(i);
                    String name=XML.getElementText(mapItem,XML.xp_mf_modulename);
                    String pom=XML.getElementText(mapItem,XML.xp_mf_modulepom);
                    projectPomMap.put(name,pom);
                }
                NodeList buildset=XML.getElements(root,XML.xp_mf_buildset);
                n=buildset.getLength();
                for(int i=0;i<n;i++) {
                    Node item=buildset.item(i);
                    if(item.getNodeType()==Node.ELEMENT_NODE&&
                       item.getNodeName().equals("module"))
                        buildProjects.add(item.getTextContent());
                }
            } else
                throw new RuntimeException("Root element 'manifest' is expected:"+f);
        } catch (RuntimeException x) {
            throw x;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }