You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2012/02/12 08:51:16 UTC

svn commit: r1243208 - in /karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling: features/CreateKarMojo.java features/InstallKarsMojo.java utils/MojoSupport.java

Author: jbonofre
Date: Sun Feb 12 07:51:16 2012
New Revision: 1243208

URL: http://svn.apache.org/viewvc?rev=1243208&view=rev
Log:
[KARAF-1198] Include maven-metadata-local.xml file for SNAPSHOT in KAR

Modified:
    karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CreateKarMojo.java
    karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
    karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/MojoSupport.java

Modified: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CreateKarMojo.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CreateKarMojo.java?rev=1243208&r1=1243207&r2=1243208&view=diff
==============================================================================
--- karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CreateKarMojo.java (original)
+++ karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CreateKarMojo.java Sun Feb 12 07:51:16 2012
@@ -18,10 +18,9 @@
  */
 package org.apache.karaf.tooling.features;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
+import java.io.*;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import org.apache.karaf.deployer.kar.KarArtifactInstaller;
@@ -36,6 +35,11 @@ import org.apache.maven.archiver.MavenAr
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.Snapshot;
+import org.apache.maven.artifact.repository.metadata.SnapshotVersion;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.codehaus.plexus.archiver.jar.JarArchiver;
@@ -52,7 +56,6 @@ import org.codehaus.plexus.archiver.jar.
  */
 public class CreateKarMojo extends MojoSupport {
 
-
     /**
      * The maven archive configuration to use.
      * <p/>
@@ -111,7 +114,7 @@ public class CreateKarMojo extends MojoS
      */
     private String repositoryPath = "repository/";
 
-    
+
     //
     // Mojo
     //
@@ -130,6 +133,7 @@ public class CreateKarMojo extends MojoS
 
     /**
      * Read bundles and configuration files in the features file.
+     *
      * @return
      * @throws MojoExecutionException
      */
@@ -162,6 +166,7 @@ public class CreateKarMojo extends MojoS
 
     /**
      * Generates the configuration archive.
+     *
      * @param bundles
      */
     private File createArchive(List<Artifact> bundles) throws MojoExecutionException {
@@ -194,9 +199,88 @@ public class CreateKarMojo extends MojoS
             Artifact featureArtifact = factory.createArtifactWithClassifier(project.getGroupId(), project.getArtifactId(), project.getVersion(), "xml", KarArtifactInstaller.FEATURE_CLASSIFIER);
             jarArchiver.addFile(featuresFile, repositoryPath + layout.pathOf(featureArtifact));
 
-            for (Artifact artifact: bundles) {
+            if (featureArtifact.isSnapshot()) {
+                // the artifact is a snapshot, create the maven-metadata-local.xml
+                getLog().debug("Feature artifact is a SNAPSHOT, handling the maven-metadata-local.xml");
+                File metadataTarget = new File(featuresFile.getParentFile(), "maven-metadata-local.xml");
+                getLog().debug("Looking for " + metadataTarget.getAbsolutePath());
+                if (!metadataTarget.exists()) {
+                    // the maven-metadata-local.xml doesn't exist, create it
+                    getLog().debug(metadataTarget.getAbsolutePath() + " doesn't exist, create it");
+                    Metadata metadata = new Metadata();
+                    metadata.setGroupId(featureArtifact.getGroupId());
+                    metadata.setArtifactId(featureArtifact.getArtifactId());
+                    metadata.setVersion(featureArtifact.getVersion());
+                    metadata.setModelVersion("1.1.0");
+
+                    Versioning versioning = new Versioning();
+                    versioning.setLastUpdatedTimestamp(new Date(System.currentTimeMillis()));
+                    Snapshot snapshot = new Snapshot();
+                    snapshot.setLocalCopy(true);
+                    versioning.setSnapshot(snapshot);
+                    SnapshotVersion snapshotVersion = new SnapshotVersion();
+                    snapshotVersion.setClassifier(featureArtifact.getClassifier());
+                    snapshotVersion.setVersion(featureArtifact.getVersion());
+                    snapshotVersion.setExtension(featureArtifact.getType());
+                    snapshotVersion.setUpdated(versioning.getLastUpdated());
+                    versioning.addSnapshotVersion(snapshotVersion);
+
+                    metadata.setVersioning(versioning);
+
+                    MetadataXpp3Writer metadataWriter = new MetadataXpp3Writer();
+                    try {
+                        Writer writer = new FileWriter(metadataTarget);
+                        metadataWriter.write(writer, metadata);
+                    } catch (Exception e) {
+                        getLog().warn("Could not create maven-metadata-local.xml", e);
+                        getLog().warn("It means that this SNAPSHOT could be overwritten by an older one present on remote repositories");
+                    }
+                }
+                getLog().debug("Adding file " + metadataTarget.getAbsolutePath() + " in the jar path " + repositoryPath + layout.pathOf(featureArtifact).substring(0, layout.pathOf(featureArtifact).lastIndexOf('/')) + "/maven-metadata-local.xml");
+                jarArchiver.addFile(metadataTarget, repositoryPath + layout.pathOf(featureArtifact).substring(0, layout.pathOf(featureArtifact).lastIndexOf('/')) + "/maven-metadata-local.xml");
+            }
+
+            for (Artifact artifact : bundles) {
                 resolver.resolve(artifact, remoteRepos, localRepo);
                 File localFile = artifact.getFile();
+
+                if (artifact.isSnapshot()) {
+                    // the artifact is a snapshot, create the maven-metadata-local.xml
+                    File metadataTarget = new File(localFile.getParentFile(), "maven-metadata-local.xml");
+                    if (!metadataTarget.exists()) {
+                        // the maven-metadata-local.xml doesn't exist, create it
+                        Metadata metadata = new Metadata();
+                        metadata.setGroupId(artifact.getGroupId());
+                        metadata.setArtifactId(artifact.getArtifactId());
+                        metadata.setVersion(artifact.getVersion());
+                        metadata.setModelVersion("1.1.0");
+
+                        Versioning versioning = new Versioning();
+                        versioning.setLastUpdatedTimestamp(new Date(System.currentTimeMillis()));
+                        Snapshot snapshot = new Snapshot();
+                        snapshot.setLocalCopy(true);
+                        versioning.setSnapshot(snapshot);
+                        SnapshotVersion snapshotVersion = new SnapshotVersion();
+                        snapshotVersion.setClassifier(artifact.getClassifier());
+                        snapshotVersion.setVersion(artifact.getVersion());
+                        snapshotVersion.setExtension(artifact.getType());
+                        snapshotVersion.setUpdated(versioning.getLastUpdated());
+                        versioning.addSnapshotVersion(snapshotVersion);
+
+                        metadata.setVersioning(versioning);
+
+                        MetadataXpp3Writer metadataWriter = new MetadataXpp3Writer();
+                        try {
+                            Writer writer = new FileWriter(metadataTarget);
+                            metadataWriter.write(writer, metadata);
+                        } catch (Exception e) {
+                            getLog().warn("Could not create maven-metadata-local.xml", e);
+                            getLog().warn("It means that this SNAPSHOT could be overwritten by an older one present on remote repositories");
+                        }
+                    }
+                    jarArchiver.addFile(metadataTarget, repositoryPath + layout.pathOf(artifact).substring(0, layout.pathOf(artifact).lastIndexOf('/')) + "/maven-metadata-local.xml");
+                }
+
                 //TODO this may not be reasonable, but... resolved snapshot artifacts have timestamped versions
                 //which do not work in startup.properties.
                 artifact.setVersion(artifact.getBaseVersion());

Modified: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java?rev=1243208&r1=1243207&r2=1243208&view=diff
==============================================================================
--- karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java (original)
+++ karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java Sun Feb 12 07:51:16 2012
@@ -27,7 +27,6 @@ import javax.xml.bind.JAXBException;
 import javax.xml.stream.XMLStreamException;
 
 import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.deployer.kar.KarArtifactInstaller;
 import org.apache.karaf.features.BundleInfo;
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.features.Repository;
@@ -43,7 +42,6 @@ import org.apache.maven.artifact.reposit
 import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.repository.RemoteRepository;

Modified: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/MojoSupport.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/MojoSupport.java?rev=1243208&r1=1243207&r2=1243208&view=diff
==============================================================================
--- karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/MojoSupport.java (original)
+++ karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/MojoSupport.java Sun Feb 12 07:51:16 2012
@@ -206,7 +206,6 @@ public abstract class MojoSupport extend
         return finalIncludes;
     }
 
-
     protected Map createManagedVersionMap(String projectId,
             DependencyManagement dependencyManagement) throws ProjectBuildingException {
         Map map;