From 60cd6cf6bfdb20a639acdbe9d881240711cd7529 Mon Sep 17 00:00:00 2001 From: rfeng Date: Fri, 21 Nov 2008 01:11:07 +0000 Subject: Fix the issue with duplicate packages for 3rd party jars Add the capability to generate an equinox configuration to launch and validate the bundles git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@719440 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/tools/bundle/plugin/BundleUtil.java | 19 ++++--- .../bundle/plugin/ModuleBundlesBuildMojo.java | 60 +++++++++++++++++++--- 2 files changed, 66 insertions(+), 13 deletions(-) diff --git a/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/BundleUtil.java b/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/BundleUtil.java index f104225483..7b078887c7 100644 --- a/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/BundleUtil.java +++ b/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/BundleUtil.java @@ -38,6 +38,7 @@ import java.util.Set; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; +import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -51,7 +52,7 @@ import org.osgi.framework.Version; * @version $Rev$ $Date$ */ final class BundleUtil { - + private final static Logger logger = Logger.getLogger(BundleUtil.class.getName()); /** * Returns the name of a bundle, or null if the given file is not a bundle. * @@ -116,7 +117,7 @@ final class BundleUtil { // Generate export-package and import-package declarations StringBuffer exports = new StringBuffer(); StringBuffer imports = new StringBuffer(); - Set importedPackages = new HashSet(); + Set pkgs = new HashSet(); for (String export : exportedPackages) { // Add export declaration @@ -125,13 +126,17 @@ final class BundleUtil { // Add corresponding import declaration String packageName = packageName(export); - if (!importedPackages.contains(packageName)) { - importedPackages.add(packageName); - imports.append(packageName); - imports.append(','); + if (!pkgs.contains(packageName)) { +// imports.append(export); +// imports.append(','); + pkgs.add(packageName); + exports.append(export); + exports.append(','); + } else { + logger.warning("Duplicate package skipped: " + export); } } - + // Create a manifest Manifest manifest = new Manifest(); Attributes attributes = manifest.getMainAttributes(); diff --git a/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/ModuleBundlesBuildMojo.java b/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/ModuleBundlesBuildMojo.java index de03d0d6d2..7db367b4f0 100644 --- a/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/ModuleBundlesBuildMojo.java +++ b/java/sca/tools/maven/maven-bundle-plugin/src/main/java/org/apache/tuscany/sca/tools/bundle/plugin/ModuleBundlesBuildMojo.java @@ -96,6 +96,12 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { * @parameter */ private String[] eclipseFeatures; + + /** + * If we use the running eclipse as the default location for the target + * @parameter + */ + private boolean useDefaultLocation = true; /** * Set to true to generate a plugin.xml. @@ -103,6 +109,12 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { * @parameter */ private boolean generatePlugin; + + /** + * Generate a configuration/config.ini for equinox + * @parameter + */ + private boolean generateConfig; /** * @parameter @@ -149,6 +161,7 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { // Process all the dependency artifacts Set bundleSymbolicNames = new HashSet(); + Set fileNames = new HashSet(); for (Object o : project.getArtifacts()) { Artifact artifact = (Artifact)o; @@ -208,6 +221,7 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { log.info("Adding OSGi bundle artifact: " + artifact); copyFile(artifactFile, root); bundleSymbolicNames.add(bundleName); + fileNames.add(artifactFile.getName()); } else if ("war".equals(artifact.getType())) { @@ -223,7 +237,12 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { } else { - File dir = new File(root, artifactFile.getName().substring(0, artifactFile.getName().length() - 4)); +// String version = BundleUtil.osgiVersion(artifact.getVersion()); +// String symbolicName = (artifact.getGroupId() + "." + artifact.getArtifactId()); +// String dirName = symbolicName + "_" + version; + + String dirName = artifactFile.getName().substring(0, artifactFile.getName().length() - 4); + File dir = new File(root, dirName); // Exclude artifact if its file name is excluded if (excludedFileNames.contains(dir.getName())) { @@ -262,6 +281,7 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { fos.close(); copyFile(artifactFile, dir); bundleSymbolicNames.add(symbolicName); + fileNames.add(dir.getName()); } } @@ -289,13 +309,18 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { write(mf, fos); fos.close(); bundleSymbolicNames.add(symbolicName); + fileNames.add(dir.getName()); } } // Generate a PDE target if (generateTargetPlatform) { File target = new File(project.getBuild().getDirectory(), project.getArtifactId() + ".target"); + log.info("Generating target definition: " + target); FileOutputStream targetFile = new FileOutputStream(target); + if (!bundleSymbolicNames.contains("org.eclipse.osgi")) { + bundleSymbolicNames.add("org.eclipse.osgi"); + } writeTarget(new PrintStream(targetFile), bundleSymbolicNames, eclipseFeatures); targetFile.close(); } @@ -307,6 +332,23 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { writePluginXML(new PrintStream(pluginXMLFile)); pluginXMLFile.close(); } + + if(generateConfig) { + File config = new File(root, "configuration"); + config.mkdir(); + File ini = new File(config, "config.ini"); + log.info("Generating configuation: " + ini); + FileOutputStream fos = new FileOutputStream(ini); + PrintStream ps = new PrintStream(fos); + ps.print("osgi.bundles="); + for(String f: fileNames) { + ps.print(f); + ps.print("@:start,"); + } + ps.println(); + ps.println("eclipse.ignoreApp=true"); + ps.close(); + } } catch (Exception e) { throw new MojoExecutionException(e.getMessage(), e); @@ -341,7 +383,11 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { ps.println(" J2SE-1.5"); ps.println(" "); - ps.println(" "); + if(useDefaultLocation) { + ps.println(" "); + } else { + ps.println(" "); + } // ps.println(""); ps.println(" "); @@ -357,10 +403,12 @@ public class ModuleBundlesBuildMojo extends AbstractMojo { } } ps.println(" "); - ps.println(" "); - // Not sure why the extra path needs to the plugins folder - ps.println(" "); - ps.println(" "); + if (useDefaultLocation) { + ps.println(" "); + // Not sure why the extra path needs to the plugins folder + ps.println(" "); + ps.println(" "); + } ps.println(" "); ps.println(""); -- cgit v1.2.3