commit a5fe562c034142d884cdb8c2d396d33216a48b4a Author: Stanislav Ochotnicky sochotnicky@redhat.com Date: Fri Jun 24 12:10:16 2011 +0200
Fix resolver to process poms and fragments from datadir
- No more need to update_maven_depmap after this update
maven2-2.2.1-jpp.patch | 85 ++++++++++++++++---- maven2-JPackageRepositoryLayout.java | 53 ++++++++----- maven2-MavenJPackageDepmap.java | 143 +++++++++++++++++++++++++++------ maven2.spec | 12 ++- 4 files changed, 223 insertions(+), 70 deletions(-) --- diff --git a/maven2-2.2.1-jpp.patch b/maven2-2.2.1-jpp.patch index 8b676f8..9a1485f 100644 --- a/maven2-2.2.1-jpp.patch +++ b/maven2-2.2.1-jpp.patch @@ -1,24 +1,24 @@ -From 1633026ab5ef24701ce8617db283079a185d6205 Mon Sep 17 00:00:00 2001 +From b92cdde39ab29334826a6eb9daf1c187c0ca67af Mon Sep 17 00:00:00 2001 From: Stanislav Ochotnicky sochotnicky@redhat.com Date: Tue, 18 Jan 2011 10:40:00 +0100 Subject: [PATCH 2/7] Maven JPP mode patch
--- - .../artifact/manager/DefaultWagonManager.java | 31 ++++++++++++++++++++ + .../artifact/manager/DefaultWagonManager.java | 31 +++++++++ .../metadata/DefaultRepositoryMetadataManager.java | 2 +- .../artifact/resolver/DefaultArtifactResolver.java | 3 +- - maven-artifact/pom.xml | 5 +++ - .../repository/layout/DefaultRepositoryLayout.java | 17 ++++++++++- - .../resolver/DefaultArtifactCollector.java | 9 ++++- - .../main/resources/META-INF/plexus/components.xml | 6 ++++ - .../apache/maven/plugin/MavenPluginCollector.java | 18 +++++++++++ - .../apache/maven/plugin/MavenPluginValidator.java | 6 ++- - .../java/org/apache/maven/plugin/PluginUtils.java | 8 ++++- - .../version/DefaultPluginVersionManager.java | 8 ++++- - .../project/validation/DefaultModelValidator.java | 10 +++++- - .../org/apache/maven/project/pom-4.0.0.xml | 22 ++++++++++++++ - pom.xml | 5 +++ - 14 files changed, 139 insertions(+), 11 deletions(-) + maven-artifact/pom.xml | 5 ++ + .../repository/layout/DefaultRepositoryLayout.java | 17 +++++- + .../resolver/DefaultArtifactCollector.java | 9 ++- + .../main/resources/META-INF/plexus/components.xml | 6 ++ + .../apache/maven/plugin/MavenPluginCollector.java | 18 +++++ + .../apache/maven/plugin/MavenPluginValidator.java | 6 +- + .../java/org/apache/maven/plugin/PluginUtils.java | 8 ++- + .../version/DefaultPluginVersionManager.java | 8 ++- + .../project/validation/DefaultModelValidator.java | 10 ++- + .../org/apache/maven/project/pom-4.0.0.xml | 71 ++++++++++++++++++++ + pom.xml | 5 ++ + 14 files changed, 188 insertions(+), 11 deletions(-)
diff --git a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java index 6318435..e4f8bb1 100644 @@ -336,10 +336,10 @@ index ede61f4..dba7bca 100644 if ( Artifact.SCOPE_SYSTEM.equals( d.getScope() ) ) { diff --git a/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml b/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml -index 00e84c1..b0e4289 100644 +index 00e84c1..3a659aa 100644 --- a/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml +++ b/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml -@@ -32,6 +32,15 @@ under the License. +@@ -32,6 +32,39 @@ under the License. <enabled>false</enabled> </snapshots> </repository> @@ -352,10 +352,34 @@ index 00e84c1..b0e4289 100644 + <enabled>true</enabled> + </snapshots> + </repository> ++ <repository> ++ <id>__jpp_repo2__</id> ++ <name>JPackage Maven 3 Repository</name> ++ <layout>jpp</layout> ++ <url>file:///usr/share/maven/repository</url> ++ <snapshots> ++ <enabled>true</enabled> ++ </snapshots> ++ <releases> ++ <updatePolicy>never</updatePolicy> ++ </releases> ++ </repository> ++ <repository> ++ <id>__jpp_pom_repo__</id> ++ <name>JPackage POM Repository</name> ++ <layout>jpp</layout> ++ <url>file:///usr/share/maven-poms</url> ++ <snapshots> ++ <enabled>true</enabled> ++ </snapshots> ++ <releases> ++ <updatePolicy>never</updatePolicy> ++ </releases> ++ </repository> </repositories>
<pluginRepositories> -@@ -47,6 +56,19 @@ under the License. +@@ -47,6 +80,44 @@ under the License. <updatePolicy>never</updatePolicy> </releases> </pluginRepository> @@ -371,6 +395,31 @@ index 00e84c1..b0e4289 100644 + <updatePolicy>never</updatePolicy> + </releases> + </pluginRepository> ++ <pluginRepository> ++ <id>__jpp_repo2__</id> ++ <name>JPackage Maven 3 Repository</name> ++ <layout>jpp</layout> ++ <url>file:///usr/share/maven/repository</url> ++ <snapshots> ++ <enabled>true</enabled> ++ </snapshots> ++ <releases> ++ <updatePolicy>never</updatePolicy> ++ </releases> ++ </pluginRepository> ++ <pluginRepository> ++ <id>__jpp_pom_repo__</id> ++ <name>JPackage POM Repository</name> ++ <layout>jpp</layout> ++ <url>file:///usr/share/maven-poms</url> ++ <snapshots> ++ <enabled>true</enabled> ++ </snapshots> ++ <releases> ++ <updatePolicy>never</updatePolicy> ++ </releases> ++ </pluginRepository> ++ + </pluginRepositories>
@@ -392,5 +441,5 @@ index e2fde29..3fe31f5 100644 <!--start--> </dependencyManagement> -- -1.7.3.4 +1.7.5.4
diff --git a/maven2-JPackageRepositoryLayout.java b/maven2-JPackageRepositoryLayout.java index b214312..530c5c3 100644 --- a/maven2-JPackageRepositoryLayout.java +++ b/maven2-JPackageRepositoryLayout.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.Hashtable; import java.util.Iterator; import java.util.List; +import java.io.File;
import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.handler.ArtifactHandler; @@ -34,8 +35,8 @@ import org.jdom.input.SAXBuilder; import org.xml.sax.InputSource;
/** - * Repository layout for jpackage based repositories. - * This class resolves items for jpp style repos (i.e things located in + * Repository layout for jpackage based repositories. + * This class resolves items for jpp style repos (i.e things located in * /usr/share/java). */
@@ -60,7 +61,7 @@ public class JPackageRepositoryLayout if (!groupId.startsWith("JPP")) { MavenJPackageDepmap map = MavenJPackageDepmap.getInstance(); Hashtable newInfo = map.getMappedInfo(groupId, artifactId, version); - + groupId = (String) newInfo.get("group"); artifactId = (String) newInfo.get("artifact"); } @@ -81,24 +82,34 @@ public class JPackageRepositoryLayout }
private StringBuffer getPOMPath(String groupId, String artifactId) { - - StringBuffer path = new StringBuffer(); - String fName = groupId.replace(PATH_SEPARATOR, GROUP_SEPARATOR) + "-" + artifactId + ".pom"; - path.append(System.getProperty("maven2.jpp.pom.path", "JPP/maven2/poms")).append("/").append(fName); - java.io.File f; - - // NOTE: We are returning default_poms/ as the path for this pom - // even though it may not exist there. This may cause an error, - // but that is fine because if the pom is not there, there is - // a serious problem anyways.. - f = new java.io.File(System.getProperty("maven2.jpp.default.repo", "/usr/share/maven2/repository") + "/" + path.toString()); - //System.err.println("Checking path " + f.getAbsolutePath() + " for the pom"); - if (!f.exists()) { - path = new StringBuffer(); - path.append(System.getProperty("maven2.jpp.default.pom.path", "JPP/maven2/default_poms")).append("/").append(fName); - } - - return path; + String checkdir; + String fName = groupId.replace(PATH_SEPARATOR, GROUP_SEPARATOR) + "-" + + artifactId + ".pom"; + File f; + + // let's try maven 2 repo first + checkdir = "JPP/maven2/poms/"; + f = new File("/usr/share/maven2/repository/" + checkdir + fName); + if (f.exists()) { + return new StringBuffer(checkdir + fName); + } + + // now maven 3 specific repository + checkdir = "JPP/maven/poms/"; + f = new File("/usr/share/maven/repository/" + checkdir + fName); + if (f.exists()) { + return new StringBuffer(checkdir + fName); + } + + // now try new path in /usr. This will be the only check after all + // packages are rebuilt + f = new File("/usr/share/maven-poms/" + fName); + if (f.exists()) { + return new StringBuffer(fName); + } + + // final fallback to m2 default poms + return new StringBuffer("JPP/maven2/default_poms/" + fName); }
public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository ) diff --git a/maven2-MavenJPackageDepmap.java b/maven2-MavenJPackageDepmap.java index e32f919..3c78efc 100644 --- a/maven2-MavenJPackageDepmap.java +++ b/maven2-MavenJPackageDepmap.java @@ -7,6 +7,8 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; +import java.io.InputStream; +import java.io.File;
import org.jdom.Document; import org.jdom.Element; @@ -18,23 +20,66 @@ public class MavenJPackageDepmap {
private static MavenJPackageDepmap instance; private static Hashtable jppArtifactMap; + /** + * + * @author Stanislav Ochotnicky sochotnicky@redhat.com + * + * This class is used to wrap around fragments that are mapping + * artifacts to jar files in our _javadir. These used to be + * processed in a macro after every package installation. Fragments + * themselves are not proper xml files (they have no root element) + * so we have to fix them by wrapping them in one root element. + */ + private static class WrapFragmentStream extends InputStream { + String startTag = "<deps>"; + String endTag = "</deps>"; + byte fragmentContent[]; + int position; + + WrapFragmentStream(String fragmentPath) throws IOException { + FileInputStream fin = new FileInputStream(fragmentPath); + int nBytes = fin.available(); + byte tmpContent[] = new byte[nBytes]; + fin.read(tmpContent); + fin.close(); + byte startBytes[] = startTag.getBytes(); + byte endBytes[] = endTag.getBytes(); + fragmentContent = new byte[nBytes + startBytes.length + + endBytes.length]; + System.arraycopy(startBytes, 0, fragmentContent, 0, + startBytes.length); + System.arraycopy(tmpContent, 0, fragmentContent, startBytes.length, + tmpContent.length); + System.arraycopy(endBytes, 0, fragmentContent, startBytes.length + + tmpContent.length, endBytes.length); + position = 0; + } + + public int read() throws IOException { + if (position < fragmentContent.length) { + return fragmentContent[position++]; + } else { + return -1; + } + } + }
private MavenJPackageDepmap() { jppArtifactMap = new Hashtable(); buildJppArtifactMap(); } - + public static MavenJPackageDepmap getInstance() { if (instance == null) { instance = new MavenJPackageDepmap(); } - + return instance; }
public Hashtable getMappedInfo(Hashtable mavenDep) { - return getMappedInfo((String) mavenDep.get("group"), - (String) mavenDep.get("artifact"), + return getMappedInfo((String) mavenDep.get("group"), + (String) mavenDep.get("artifact"), (String) mavenDep.get("version")); }
@@ -52,7 +97,7 @@ public class MavenJPackageDepmap { jppCombination = (String) jppArtifactMap.get(idToCheck);
//System.err.println("*** " + groupId+","+artifactId+","+version + " => " + jppCombination); - + jppDep = new Hashtable(); if (jppCombination != null && jppCombination != "") {
@@ -90,31 +135,77 @@ public class MavenJPackageDepmap {
private static void buildJppArtifactMap() {
- if (System.getProperty("maven2.ignore.versions") != null || System.getProperty("maven2.jpp.mode") != null) { + try{ + if (System.getProperty("maven2.ignore.versions") != null || System.getProperty("maven2.jpp.mode") != null) { debug("Processing file: /usr/share/java-utils/xml/maven2-versionless-depmap.xml"); - processDepmapFile("/etc/maven/maven2-versionless-depmap.xml"); - } + processDepmapFile(new FileInputStream("/etc/maven/maven2-versionless-depmap.xml")); + } + } + catch (FileNotFoundException e) { + System.err.println("WARNING: Unable to find versionless map" ); + e.printStackTrace(); + } + catch (IOException e) { + System.err.println("WARNING: I/O exception occured when opening versionless map file"); + e.printStackTrace(); + } + + // process fragments in etc + File fragmentDir = new File("/etc/maven/fragments"); + String flist[] = fragmentDir.list(); + if (flist != null) { + java.util.Arrays.sort(flist); + for (String fragFilename : flist) { + try { + processDepmapFile(new WrapFragmentStream("/etc/maven/fragments/" + fragFilename)); + } + catch (IOException e) { + System.err.println("WARNING: I/O exception occured when opening etc map file" + fragFilename); + e.printStackTrace(); + } + } + }
- debug("Processing file: /usr/share/java-utils/xml/maven2-depmap.xml"); - processDepmapFile("/etc/maven/maven2-depmap.xml"); + // process fragments is usr. Once packages are rebuilt, we can skip + // fragments in /etc + fragmentDir = new File("/usr/share/maven-fragments"); + flist = fragmentDir.list(); + if (flist != null) { + java.util.Arrays.sort(flist); + for (String fragFilename : flist) { + try { + processDepmapFile(new WrapFragmentStream("/usr/share/maven-fragments/" + fragFilename)); + } + catch (IOException e) { + System.err.println("WARNING: I/O exception occured when opening usr map file" + fragFilename); + e.printStackTrace(); + } + } + }
- String customFileName = System.getProperty("maven2.jpp.depmap.file", null); - if (customFileName != null) { + String customFileName = System.getProperty("maven2.jpp.depmap.file", null); + try { + if (customFileName != null) { debug("Processing file: " + customFileName); - processDepmapFile(customFileName); - } + processDepmapFile(new FileInputStream(customFileName)); + } + } + catch (FileNotFoundException e) { + System.err.println("ERROR: Unable to find custom map file: " + customFileName); + e.printStackTrace(); + } + catch (IOException e) { + System.err.println("ERROR: I/O exception occured when opening map file"); + e.printStackTrace(); + } }
- private static void processDepmapFile(String fileName) { - + private static void processDepmapFile(InputStream file) { + Document mapDocument;
try { - mapDocument = (new SAXBuilder()).build(new InputSource(new FileInputStream(fileName))); - } catch (FileNotFoundException fnfe) { - System.err.println("ERROR: Unable to find map file: " + fileName); - fnfe.printStackTrace(); - return; + mapDocument = (new SAXBuilder()).build(new InputSource(file)); } catch (IOException ioe) { System.err.println("ERROR: I/O exception occured when opening map file"); ioe.printStackTrace(); @@ -124,16 +215,16 @@ public class MavenJPackageDepmap { jde.printStackTrace(); return; } - + List l = mapDocument.getRootElement().getChildren("dependency"); - + Iterator i = l.iterator(); while (i.hasNext()) { Element depElement = (Element) i.next();
Element mElem = depElement.getChild("maven"); Element jppElem = depElement.getChild("jpp"); - + String mG = mElem.getChildText("groupId"); String mA = mElem.getChildText("artifactId"); String mV = mElem.getChildText("version"); diff --git a/maven2.spec b/maven2.spec index 03f03b7..1e15ded 100644 --- a/maven2.spec +++ b/maven2.spec @@ -3,7 +3,7 @@
Name: maven2 Version: 2.2.1 -Release: 22%{?dist} +Release: 23%{?dist} Summary: Java project management and project comprehension tool
Group: Development/Build Tools @@ -146,6 +146,7 @@ BuildRequires: jakarta-oro BuildRequires: regexp BuildRequires: slf4j BuildRequires: velocity +BuildRequires: maven2 %endif
Requires: classworlds @@ -493,11 +494,7 @@ install -m 644 pom.xml $RPM_BUILD_ROOT%{_datadir}/%{name}/poms/JPP.%{name}-maven %postun %update_maven_depmap
-%clean -rm -rf $RPM_BUILD_ROOT - %files -%defattr(-,root,root,-) %attr(0755,root,root) %{_bindir}/mvn %attr(0755,root,root) %{_bindir}/mvn-jpp %dir %{_datadir}/%{name} @@ -518,7 +515,12 @@ rm -rf $RPM_BUILD_ROOT %endif %doc
+ %changelog +* Fri Jun 24 2011 Stanislav Ochotnicky sochotnicky@redhat.com - 2.2.1-23 +- Fix resolver to process poms and fragments from datadir +- No more need to update_maven_depmap after this update + * Mon Apr 18 2011 Stanislav Ochotnicky sochotnicky@redhat.com - 2.2.1-22 - Fix jpp script to limit maven2.jpp.mode scope