You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2015/07/09 21:46:00 UTC

svn commit: r1690155 - /felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java

Author: gnodet
Date: Thu Jul  9 19:45:59 2015
New Revision: 1690155

URL: http://svn.apache.org/r1690155
Log:
[FELIX-3324] Allow maven-bundle-plugin:manifest to dump SCR component definitions generated by bnd

Modified:
    felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java

Modified: felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java?rev=1690155&r1=1690154&r2=1690155&view=diff
==============================================================================
--- felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java (original)
+++ felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java Thu Jul  9 19:45:59 2015
@@ -33,7 +33,9 @@ import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.jar.Manifest;
 
+import aQute.bnd.header.Parameters;
 import aQute.bnd.osgi.Instructions;
+import aQute.bnd.osgi.Processor;
 import aQute.lib.collections.ExtList;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -64,6 +66,18 @@ public class ManifestPlugin extends Bund
     @Parameter( property = "rebuildBundle" )
     protected boolean rebuildBundle;
 
+    /**
+     * Directory where the SCR files will be written
+     *
+     * @parameter expression="${scrLocation}" default-value="${project.build.outputDirectory}"
+     */
+    protected File scrLocation;
+
+    /**
+     * When true, dump the generated SCR files
+     * @parameter
+     */
+    protected boolean exportScr;
 
     @Override
     protected void execute( MavenProject project, DependencyNode dependencyGraph, Map<String, String> instructions, Properties properties, Jar[] classpath )
@@ -123,7 +137,38 @@ public class ManifestPlugin extends Bund
     {
         Analyzer analyzer = getAnalyzer(project, dependencyGraph, instructions, properties, classpath);
 
-        Manifest manifest = analyzer.getJar().getManifest();
+        Jar jar = analyzer.getJar();
+        Manifest manifest = jar.getManifest();
+
+        if (exportScr)
+        {
+            scrLocation.mkdirs();
+
+            String bpHeader = analyzer.getProperty(Analyzer.SERVICE_COMPONENT);
+            Parameters map = Processor.parseHeader(bpHeader, null);
+            for (String root : map.keySet())
+            {
+                Map<String, Resource> dir = jar.getDirectories().get(root);
+                File location = new File(scrLocation, root);
+                if (dir == null || dir.isEmpty())
+                {
+                    Resource resource = jar.getResource(root);
+                    if (resource != null)
+                    {
+                        writeSCR(resource, location);
+                    }
+                }
+                else
+                {
+                    for (Map.Entry<String, Resource> entry : dir.entrySet())
+                    {
+                        String path = entry.getKey();
+                        Resource resource = entry.getValue();
+                        writeSCR(resource, new File(location, path));
+                    }
+                }
+            }
+        }
 
         // cleanup...
         analyzer.close();
@@ -131,6 +176,19 @@ public class ManifestPlugin extends Bund
         return manifest;
     }
 
+    protected void writeSCR(Resource resource, File destination) throws Exception
+    {
+        destination.getParentFile().mkdirs();
+        OutputStream os = new FileOutputStream(destination);
+        try
+        {
+            resource.write(os);
+        }
+        finally
+        {
+            os.close();
+        }
+    }
 
     protected Analyzer getAnalyzer( MavenProject project, DependencyNode dependencyGraph, Jar[] classpath ) throws IOException, MojoExecutionException,
         Exception