]> git.argeo.org Git - gpl/argeo-slc.git/blob - maven-argeo-osgi-plugin/src/main/java/org/argeo/slc/maven/plugins/osgi/PackageBundlesMojo.java
ec61d5a8761c52e6030b6fcd01d26c6be66fd7ba
[gpl/argeo-slc.git] / maven-argeo-osgi-plugin / src / main / java / org / argeo / slc / maven / plugins / osgi / PackageBundlesMojo.java
1 package org.argeo.slc.maven.plugins.osgi;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.FileWriter;
6 import java.io.IOException;
7 import java.util.Iterator;
8 import java.util.List;
9 import java.util.jar.Attributes;
10
11 import org.apache.maven.plugin.MojoExecutionException;
12 import org.apache.maven.plugin.MojoFailureException;
13 import org.codehaus.plexus.archiver.jar.JarArchiver;
14 import org.codehaus.plexus.archiver.util.DefaultFileSet;
15
16 /**
17 * @goal package-bundles
18 * @phase package
19 * @author mbaudier
20 *
21 */
22 public class PackageBundlesMojo extends AbstractBundlesPackagerMojo {
23
24 public void execute() throws MojoExecutionException, MojoFailureException {
25 StringBuffer bundlesPom = new StringBuffer();
26 // not using append() systematically for the sake of clarity
27 bundlesPom.append("<project>\n");
28 bundlesPom.append("\t<modelVersion>4.0.0</modelVersion>\n");
29 bundlesPom.append("\t<parent>\n");
30 bundlesPom.append("\t\t<groupId>"
31 + project.getParentArtifact().getGroupId() + "</groupId>\n");
32 bundlesPom.append("\t\t<artifactId>"
33 + project.getParentArtifact().getArtifactId()
34 + "</artifactId>\n");
35 bundlesPom
36 .append("\t\t<version>"
37 + project.getParentArtifact().getBaseVersion()
38 + "</version>\n");
39 bundlesPom.append("\t</parent>\n");
40 bundlesPom
41 .append("\t<groupId>" + project.getGroupId() + "</groupId>\n");
42 bundlesPom.append("\t<artifactId>" + bundlesPomArtifactId
43 + "</artifactId>\n");
44 bundlesPom.append("\t<packaging>pom</packaging>\n");
45 bundlesPom.append("\t<dependencies>\n");
46
47 List bundlePackages = analyze();
48
49 for (int i = 0; i < bundlePackages.size(); i++) {
50 AbstractBundlesPackagerMojo.BundlePackage bundlePackage = (BundlePackage) bundlePackages
51 .get(i);
52
53 File manifestFile = new File(bundlePackage.getPackageFile()
54 .getPath()
55 + ".MF");
56
57 // Package as jar
58 JarArchiver jarArchiver = new JarArchiver();
59 jarArchiver.setDestFile(bundlePackage.getPackageFile());
60 DefaultFileSet fileSet = new DefaultFileSet();
61 fileSet.setDirectory(bundlePackage.getBundleDir());
62 String[] includes = { "**/*" };
63 String[] excludes = { "**/.svn", "**/.svn/**" };
64 fileSet.setIncludes(includes);
65 fileSet.setExcludes(excludes);
66 try {
67 jarArchiver.addFileSet(fileSet);
68
69 // Write manifest
70 FileOutputStream out = new FileOutputStream(manifestFile);
71
72 System.out.println("\n# BUNDLE "
73 + bundlePackage.getArtifact().getArtifactId());
74 Attributes mainAttrs = bundlePackage.getManifest()
75 .getMainAttributes();
76 for (Iterator it = mainAttrs.keySet().iterator(); it.hasNext();) {
77 Object key = it.next();
78 Object value = mainAttrs.get(key);
79 System.out.println(key + ": " + value);
80 }
81
82 bundlePackage.getManifest().write(out);
83 out.close();
84 jarArchiver.setManifest(manifestFile);
85
86 jarArchiver.createArchive();
87 } catch (Exception e) {
88 throw new MojoExecutionException("Could not package bundle "
89 + bundlePackage.getBundleDir(), e);
90 }
91
92 // update dependencies POM
93 bundlesPom.append("\t\t<dependency>\n");
94 bundlesPom
95 .append("\t\t\t<groupId>"
96 + bundlePackage.getArtifact().getGroupId()
97 + "</groupId>\n");
98 bundlesPom.append("\t\t\t<artifactId>"
99 + bundlePackage.getArtifact().getArtifactId()
100 + "</artifactId>\n");
101 bundlesPom
102 .append("\t\t\t<version>"
103 + bundlePackage.getArtifact().getVersion()
104 + "</version>\n");
105 bundlesPom.append("\t\t</dependency>\n");
106
107 }
108
109 bundlesPom.append("\t</dependencies>\n");
110 bundlesPom.append("</project>\n");
111
112 try {
113 FileWriter writer = new FileWriter(bundlesPomFile());
114 writer.write(bundlesPom.toString());
115 writer.close();
116 } catch (IOException e) {
117 throw new MojoExecutionException("Could not write dependency pom",
118 e);
119 }
120 }
121
122 }