]> git.argeo.org Git - gpl/argeo-slc.git/blob - maven/maven-argeo-osgi-plugin/src/main/java/org/argeo/slc/maven/plugins/osgi/PackageBundlesMojo.java
Equinox Execution
[gpl/argeo-slc.git] / maven / 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.append("\t\t<version>"
36 + project.getParentArtifact().getVersion() + "</version>\n");
37 bundlesPom.append("\t</parent>\n");
38 bundlesPom
39 .append("\t<groupId>" + project.getGroupId() + "</groupId>\n");
40 bundlesPom.append("\t<artifactId>" + bundlesPomArtifactId
41 + "</artifactId>\n");
42 bundlesPom.append("\t<packaging>pom</packaging>\n");
43 bundlesPom.append("\t<dependencies>\n");
44
45 List bundlePackages = analyze();
46
47 for (int i = 0; i < bundlePackages.size(); i++) {
48 AbstractBundlesPackagerMojo.BundlePackage bundlePackage = (BundlePackage) bundlePackages
49 .get(i);
50
51 File manifestFile = new File(bundlePackage.getPackageFile()
52 .getPath()
53 + ".MF");
54
55 // Package as jar
56 JarArchiver jarArchiver = new JarArchiver();
57 jarArchiver.setDestFile(bundlePackage.getPackageFile());
58 DefaultFileSet fileSet = new DefaultFileSet();
59 fileSet.setDirectory(bundlePackage.getBundleDir());
60 String[] includes = { "**/*" };
61 String[] excludes = { "**/.svn", "**/.svn/**" };
62 fileSet.setIncludes(includes);
63 fileSet.setExcludes(excludes);
64 try {
65 jarArchiver.addFileSet(fileSet);
66
67 // Write manifest
68 FileOutputStream out = new FileOutputStream(manifestFile);
69
70 System.out.println("\n# BUNDLE "
71 + bundlePackage.getArtifact().getArtifactId());
72 Attributes mainAttrs = bundlePackage.getManifest()
73 .getMainAttributes();
74 for (Iterator it = mainAttrs.keySet().iterator(); it.hasNext();) {
75 Object key = it.next();
76 Object value = mainAttrs.get(key);
77 System.out.println(key + ": " + value);
78 }
79
80 bundlePackage.getManifest().write(out);
81 out.close();
82 jarArchiver.setManifest(manifestFile);
83
84 jarArchiver.createArchive();
85 } catch (Exception e) {
86 throw new MojoExecutionException("Could not package bundle "
87 + bundlePackage.getBundleDir(), e);
88 }
89
90 // update dependencies POM
91 bundlesPom.append("\t\t<dependency>\n");
92 bundlesPom
93 .append("\t\t\t<groupId>"
94 + bundlePackage.getArtifact().getGroupId()
95 + "</groupId>\n");
96 bundlesPom.append("\t\t\t<artifactId>"
97 + bundlePackage.getArtifact().getArtifactId()
98 + "</artifactId>\n");
99 bundlesPom
100 .append("\t\t\t<version>"
101 + bundlePackage.getArtifact().getVersion()
102 + "</version>\n");
103 bundlesPom.append("\t\t</dependency>\n");
104
105 }
106
107 bundlesPom.append("\t</dependencies>\n");
108 bundlesPom.append("</project>\n");
109
110 try {
111 FileWriter writer = new FileWriter(bundlesPomFile());
112 writer.write(bundlesPom.toString());
113 writer.close();
114 } catch (IOException e) {
115 throw new MojoExecutionException("Could not write dependency pom",
116 e);
117 }
118 }
119
120 }