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;