Author: rfeng
Date: Tue Jan 20 14:01:48 2009
New Revision: 736130
URL: http://svn.apache.org/viewvc?rev=736130&view=rev
Log:
Add the capability to generate a manifest jar to simplify the JSE launching
Modified:
tuscany/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/ModuleBundlesBuildMojo.java
Modified:
tuscany/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/ModuleBundlesBuildMojo.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/ModuleBundlesBuildMojo.java?rev=736130&r1=736129&r2=736130&view=diff
==============================================================================
---
tuscany/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/ModuleBundlesBuildMojo.java
(original)
+++
tuscany/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/ModuleBundlesBuildMojo.java
Tue Jan 20 14:01:48 2009
@@ -28,6 +28,8 @@
import java.io.PrintStream;
import java.util.HashSet;
import java.util.Set;
+import java.util.jar.Attributes;
+import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import org.apache.maven.artifact.Artifact;
@@ -120,6 +122,12 @@
* @parameter
*/
private boolean generateConfig;
+
+ /**
+ * Generete startup/-manifest.jar
+ * @parameter
+ */
+ private boolean generateManifestJar;
/**
* @parameter
@@ -166,7 +174,8 @@
// Process all the dependency artifacts
Set<String> bundleSymbolicNames = new HashSet<String>();
- Set<String> fileNames = new HashSet<String>();
+ Set<String> bundleLocations = new HashSet<String>();
+ Set<String> jarNames = new HashSet<String>();
for (Object o : project.getArtifacts()) {
Artifact artifact = (Artifact)o;
@@ -226,7 +235,8 @@
log.info("Adding OSGi bundle artifact: " + artifact);
copyFile(artifactFile, root);
bundleSymbolicNames.add(bundleName);
- fileNames.add(artifactFile.getName());
+ bundleLocations.add(artifactFile.getName());
+ jarNames.add(artifactFile.getName());
} else if ("war".equals(artifact.getType())) {
@@ -286,7 +296,8 @@
fos.close();
copyFile(artifactFile, dir);
bundleSymbolicNames.add(symbolicName);
- fileNames.add(dir.getName());
+ bundleLocations.add(dir.getName());
+ jarNames.add(dirName + "/" + artifactFile.getName());
}
}
@@ -304,7 +315,8 @@
log.info("Aggragating JAR artifact: " + a);
jarFiles.add(a.getFile());
copyFile(a.getFile(), dir);
- }
+ jarNames.add(symbolicName + "-" + version + "/" +
a.getFile().getName());
+ }
Manifest mf = BundleUtil.libraryManifest(jarFiles,
symbolicName, symbolicName, version, null);
File file = new File(dir, "META-INF");
file.mkdirs();
@@ -314,7 +326,7 @@
write(mf, fos);
fos.close();
bundleSymbolicNames.add(symbolicName);
- fileNames.add(dir.getName());
+ bundleLocations.add(dir.getName());
}
}
@@ -346,7 +358,7 @@
FileOutputStream fos = new FileOutputStream(ini);
PrintStream ps = new PrintStream(fos);
ps.print("osgi.bundles=");
- for(String f: fileNames) {
+ for(String f: bundleLocations) {
ps.print(f);
ps.print("@:start,");
}
@@ -354,6 +366,31 @@
ps.println("eclipse.ignoreApp=true");
ps.close();
}
+
+ if (generateManifestJar) {
+ File startup = new File(new
File(project.getBuild().getDirectory()), "startup");
+ startup.mkdir();
+ File mfJar = new File(startup, project.getArtifactId() +
"-manifest.jar");
+ log.info("Generating manifest jar: " + mfJar);
+ FileOutputStream fos = new FileOutputStream(mfJar);
+ Manifest mf = new Manifest();
+ StringBuffer cp = new StringBuffer();
+ for (String jar : jarNames) {
+ cp.append(jar).append(',');
+ }
+ if (cp.length() > 0) {
+ cp.deleteCharAt(cp.length() - 1);
+ }
+ Attributes attrs = mf.getMainAttributes();
+ attrs.putValue("Manifest-Version", "1.0");
+ attrs.putValue("Implementation-Title", project.getName());
+ attrs.putValue("Implementation-Vendor", "The Apache Software
Foundation");
+ attrs.putValue("Implementation-Vendor-Id", "org.apache");
+ attrs.putValue("Implementation-Version", project.getVersion());
+ attrs.putValue("Class-Path", cp.toString());
+ JarOutputStream jos = new JarOutputStream(fos, mf);
+ jos.close();
+ }
} catch (Exception e) {
throw new MojoExecutionException(e.getMessage(), e);