@Override public Set<Module> discover(GitInfo gitInfo) throws IOException { GHRepository repository = repositoryFor(gitInfo); GHTree tree = treeFor(repository, gitInfo); Set<String> poms = new HashSet<>(); for (GHTreeEntry entry : tree.getTree()) { if (isPom(entry.getPath())) { poms.add(entry.getPath()); } } Set<Module> modules = new HashSet<>(); for (String path : poms) { final ProjectObjectModel pom; try { JsonParser parser = xmlFactory.createParser(contentsFor(path, repository, gitInfo)); pom = objectMapper.readValue(parser, ProjectObjectModel.class); } catch (IOException e) { LOG.error( "Error parsing POM at path {} for repo {}@{}", path, gitInfo.getFullRepositoryName(), gitInfo.getBranch()); continue; } final String glob; if ("pom".equals(pom.getPackaging())) { glob = path; } else { glob = (path.contains("/") ? path.substring(0, path.lastIndexOf('/') + 1) : "") + "**"; } modules.add(new Module(pom.getArtifactId(), path, glob, BUILDPACK)); } return modules; }