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