commit a5fe562c034142d884cdb8c2d396d33216a48b4a
Author: Stanislav Ochotnicky <sochotnicky(a)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(a)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(a)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(a)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(a)redhat.com> - 2.2.1-22
- Fix jpp script to limit maven2.jpp.mode scope