Index: src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java
===================================================================
--- src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java	(revision 1202818)
+++ src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java	(revision )
@@ -17,22 +17,15 @@
  */
 package org.apache.karaf.tooling.features;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintStream;
-import java.io.StringWriter;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
+import java.util.jar.JarInputStream;
+import java.util.jar.Manifest;
 
 import javax.xml.bind.JAXBException;
 import javax.xml.parsers.ParserConfigurationException;
@@ -284,6 +277,12 @@
                 }
             } else {
                 String bundleName = MvnUrlUtil.artifactToMvn(artifact);
+                File bundleFile = resolve(artifact);
+
+                if (!ManifestUtils.isBundle(getManifest(bundleFile))) {
+                  bundleName = "wrap:" + bundleName;
+                }
+
                 Bundle bundle = objectFactory.createBundle();
                 bundle.setLocation(bundleName);
                 if ("runtime".equals(entry.getValue())) {
@@ -310,6 +309,37 @@
         getLogger().info("...done!");
     }
 
+
+    /*
+     * Extract the META-INF/MANIFEST.MF file from an artifact
+     */
+    private Manifest getManifest(File file) throws ArtifactResolutionException, ArtifactNotFoundException,
+      IOException {
+      InputStream is = null;
+      try {
+        is = new BufferedInputStream(new FileInputStream(file));
+      } catch (Exception e){
+        getLog().warn("Error while opening artifact", e);
+      }
+
+      try {
+        is.mark(256 * 1024);
+        JarInputStream jar = new JarInputStream(is);
+        Manifest m = jar.getManifest();
+        if(m == null) {
+          throw new IOException("Manifest not present in the first entry of the zip");
+        }
+
+        return m;
+      } finally {
+        if (is != null) { // just in case when we did not open bundle
+          is.close();
+        }
+      }
+
+    }
+
+
     private File resolve(Artifact artifact) {
         ArtifactRequest request = new ArtifactRequest();
         request.setArtifact(artifact);
