Skip to content

Instantly share code, notes, and snippets.

@tfedyanin
Last active November 23, 2017 19:06
Show Gist options
  • Save tfedyanin/9fa6ffdac9cb7d84faafacc730302c1b to your computer and use it in GitHub Desktop.
Save tfedyanin/9fa6ffdac9cb7d84faafacc730302c1b to your computer and use it in GitHub Desktop.
pom generator
/**
* Generate default pom, considerate exclusion rules. For transitive dependencies exclude all
*
* @param confs for dependencies acquisition
* @return action as argument in maven-publish publication in method pom.withXml
*/
public static Action<XmlProvider> getPomAction(Configuration... confs) {
return xml -> {
Object dependencies = xml.asNode().get("dependencies");
if (dependencies != null && dependencies instanceof NodeList) {
log.debug("Pom generator: delete existing dependencies block");
((NodeList) dependencies).forEach(o -> {
xml.asNode().remove((Node) o);
});
}
Node dependenciesNode = xml.asNode().appendNode("dependencies");
for (Configuration configuration : confs) {
configuration.getDependencies().forEach(dep -> {
Node dependencyNode = dependenciesNode.appendNode("dependency");
dependencyNode.appendNode("groupId", dep.getGroup());
dependencyNode.appendNode("artifactId", dep.getName());
dependencyNode.appendNode("version", dep.getVersion());
switch (configuration.getName()) {
case "compile":
case "compileOnly":
case "compileClasspath":
dependencyNode.appendNode("scope", "compile");
break;
case "runtime":
dependencyNode.appendNode("scope", "runtime");
break;
case "testCompile":
case "testCompileOnly":
case "testCompileClasspath":
case "testRuntime":
dependencyNode.appendNode("scope", "test");
break;
default:
log.debug("Skip unsupported configuration {}", configuration.getName());
}
//If there are any exclusions in dependency
if (dep instanceof ModuleDependency) {
ModuleDependency moduleDep = (ModuleDependency) dep;
if (!((ModuleDependency) dep).isTransitive()) {
Node node = dependencyNode.appendNode("exclusions").appendNode("exclusion");
node.appendNode("groupId", "*");
node.appendNode("artifactId", "*");
return;
}
if (moduleDep.getExcludeRules().size() > 0) {
log.debug("Exclude rules found");
Node exclusionsNode = dependencyNode.appendNode("exclusions");
moduleDep.getExcludeRules().forEach(rule -> {
Node exclusionNode = exclusionsNode.appendNode("exclusion");
exclusionNode.appendNode("groupId", rule.getGroup());
String module = rule.getModule() == null ? "*" : rule.getModule();
exclusionNode.appendNode("artifactId", module);
});
}
}
log.debug("Pom generator: add dependency to pom {}", dependenciesNode);
});
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment