|
Stanislav Ochotnicky |
1ae9fb1 |
package org.apache.maven.artifact.repository;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
import java.io.FileNotFoundException;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
import java.io.IOException;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
import java.util.Hashtable;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
import java.util.StringTokenizer;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
import javax.xml.parsers.DocumentBuilder;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
import javax.xml.parsers.DocumentBuilderFactory;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
import javax.xml.parsers.ParserConfigurationException;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
import org.xml.sax.SAXException;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
import org.w3c.dom.*;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
public class MavenJPackageDepmap {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
private static class ArtifactDefinition {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
String groupId = null;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
String artifactId = null;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
String version = null;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
private static MavenJPackageDepmap instance;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
private static Hashtable<String, String> jppArtifactMap;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
private MavenJPackageDepmap() {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppArtifactMap = new Hashtable<String,String>();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
buildJppArtifactMap();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
public static MavenJPackageDepmap getInstance() {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
if (instance == null) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
instance = new MavenJPackageDepmap();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return instance;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
public Hashtable<String, String> getMappedInfo(Hashtable<String, String> mavenDep) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return getMappedInfo((String) mavenDep.get("group"),
|
|
Stanislav Ochotnicky |
1ae9fb1 |
(String) mavenDep.get("artifact"),
|
|
Stanislav Ochotnicky |
1ae9fb1 |
(String) mavenDep.get("version"));
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
public Hashtable<String, String> getMappedInfo(String groupId, String artifactId, String version) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
Hashtable<String, String> jppDep;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
String idToCheck, jppCombination;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
f5501c5 |
if (System.getProperty("maven.ignore.versions") == null && System.getProperty("maven.local.mode") == null) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
idToCheck = groupId+","+artifactId+","+version;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} else {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
idToCheck = groupId+","+artifactId;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppCombination = (String) jppArtifactMap.get(idToCheck);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
//System.err.println("*** " + groupId+","+artifactId+","+version + " => " + jppCombination);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppDep = new Hashtable<String, String>();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
if (jppCombination != null && jppCombination != "") {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
StringTokenizer st = new StringTokenizer(jppCombination, ",");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppDep.put("group", st.nextToken());
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppDep.put("artifact",st.nextToken());
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppDep.put("version",st.nextToken());
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} else {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppDep.put("group", groupId);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppDep.put("artifact", artifactId);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppDep.put("version", version);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return jppDep;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
/**
|
|
Stanislav Ochotnicky |
1ae9fb1 |
* Returns whether or not the given dependency should be dropped.
|
|
Stanislav Ochotnicky |
1ae9fb1 |
*/
|
|
Stanislav Ochotnicky |
1ae9fb1 |
public boolean shouldEliminate(String groupId, String artifactId, String version) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
String idToCheck;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
f5501c5 |
if (System.getProperty("maven.ignore.versions") == null && System.getProperty("maven.local.mode") == null) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
idToCheck = groupId+","+artifactId+","+version;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} else {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
idToCheck = groupId+","+artifactId;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return jppArtifactMap.get(idToCheck) != null && jppArtifactMap.get(idToCheck).equals("");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
private static void buildJppArtifactMap() {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
f5501c5 |
if (System.getProperty("maven.ignore.versions") != null || System.getProperty("maven.local.mode") != null) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("Processing file: /usr/share/java-utils/xml/maven2-versionless-depmap.xml");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
processDepmapFile("/etc/maven/maven2-versionless-depmap.xml");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("Processing file: /usr/share/java-utils/xml/maven2-depmap.xml");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
processDepmapFile("/etc/maven/maven2-depmap.xml");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
f5501c5 |
String customFileName = System.getProperty("maven.local.depmap.file", null);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
if (customFileName != null) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("Processing file: " + customFileName);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
processDepmapFile(customFileName);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
private static void processDepmapFile(String fileName) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
Document mapDocument;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("Loading depmap file: " + fileName);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
try {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
fact.setNamespaceAware(true);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
DocumentBuilder builder = fact.newDocumentBuilder();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
mapDocument = builder.parse(fileName);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} catch (FileNotFoundException fnfe) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
System.err.println("ERROR: Unable to find map file: " + fileName);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
fnfe.printStackTrace();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} catch (IOException ioe) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
System.err.println("ERROR: I/O exception occured when opening map file");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
ioe.printStackTrace();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} catch (ParserConfigurationException pce) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
System.err.println("ERROR: Parsing of depmap file failed - configuration");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
pce.printStackTrace();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} catch (SAXException se) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
System.err.println("ERROR: Parsing of depmap file failed");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
se.printStackTrace();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
NodeList depNodes = (NodeList) mapDocument.getElementsByTagName("dependency");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
for (int i = 0; i < depNodes.getLength(); i++) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
Element depNode = (Element) depNodes.item(i);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
NodeList mavenNodeList = (NodeList) depNode.getElementsByTagName("maven");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
if (mavenNodeList.getLength() != 1) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("Number of maven sub-elements is not 1. Bailing from depmap generation");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("Maven node: " + depNode.getTextContent());
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
ArtifactDefinition mavenAD = getArtifactDefinition((Element) mavenNodeList.item(0));
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
ArtifactDefinition jppAD = null;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
NodeList jppNodeList = (NodeList) depNode.getElementsByTagName("jpp");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
if (jppNodeList.getLength() == 1) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppAD = getArtifactDefinition((Element) jppNodeList.item(0));
|
|
Stanislav Ochotnicky |
f5501c5 |
if (System.getProperty("maven.ignore.versions") == null && System.getProperty("maven.local.mode") == null) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("*** Adding: " + mavenAD.groupId + "," + mavenAD.artifactId + "," + mavenAD.version + " => "
|
|
Stanislav Ochotnicky |
1ae9fb1 |
+ jppAD.groupId + "," + jppAD.artifactId + "," + jppAD.version + " to map...");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppArtifactMap.put(mavenAD.groupId + "," + mavenAD.artifactId + "," + mavenAD.version,
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppAD.groupId + "," + jppAD.artifactId + "," + jppAD.version);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} else {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("*** Adding: " + mavenAD.groupId+"," + mavenAD.artifactId + " => "
|
|
Stanislav Ochotnicky |
1ae9fb1 |
+ jppAD.groupId + "," + jppAD.artifactId + "," + jppAD.version + " to map...");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppArtifactMap.put(mavenAD.groupId+","+mavenAD.artifactId,
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppAD.groupId + "," + jppAD.artifactId + "," + jppAD.version);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} else {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("Number of jpp sub-elements is not 1. Dropping dependency");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("*** Adding: " + mavenAD.groupId+","+mavenAD.artifactId+"," + " => " + "JPP/maven2,empty-dep,"+mavenAD.version + " to map...");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
jppArtifactMap.put(mavenAD.groupId+","+mavenAD.artifactId, "JPP/maven2,empty-dep,"+mavenAD.version);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
private static ArtifactDefinition getArtifactDefinition(Element element) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
ArtifactDefinition ad = new ArtifactDefinition();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
NodeList nodes = element.getElementsByTagName("groupId");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
if (nodes.getLength() != 1) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("groupId definition not found in depmap");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return null;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
ad.groupId = nodes.item(0).getTextContent();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
nodes = element.getElementsByTagName("artifactId");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
if (nodes.getLength() != 1) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
debug("artifactId definition not found in depmap");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return null;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
ad.artifactId = nodes.item(0).getTextContent();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
nodes = element.getElementsByTagName("version");
|
|
Stanislav Ochotnicky |
1ae9fb1 |
if (nodes.getLength() != 1) {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
ad.version = "DUMMY_VER";
|
|
Stanislav Ochotnicky |
1ae9fb1 |
} else {
|
|
Stanislav Ochotnicky |
1ae9fb1 |
ad.version = nodes.item(0).getTextContent();
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
return ad;
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
|
|
Stanislav Ochotnicky |
1ae9fb1 |
public static void debug(String msg) {
|
|
Stanislav Ochotnicky |
f5501c5 |
if (System.getProperty("maven.local.debug") != null)
|
|
Stanislav Ochotnicky |
1ae9fb1 |
System.err.println(msg);
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|
|
Stanislav Ochotnicky |
1ae9fb1 |
}
|