geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ga...@apache.org
Subject svn commit: r836317 [1/2] - in /geronimo/server/trunk: ./ framework/ framework/buildsupport/ framework/buildsupport/car-maven-plugin/ framework/buildsupport/geronimo-osgi-plugin/ framework/buildsupport/geronimo-osgi-plugin/src/ framework/buildsupport/g...
Date Sun, 15 Nov 2009 02:25:48 GMT
Author: gawor
Date: Sun Nov 15 02:25:47 2009
New Revision: 836317

URL: http://svn.apache.org/viewvc?rev=836317&view=rev
Log:
Add plugin for validating the generated manifest against the dependencies (bundles) using the osgi rules. Plugin borrows code from Tuscany maven eclipse compiler module

Added:
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/pom.xml   (with props)
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugin/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugin/osgi/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/DisplayManifestMojo.java   (with props)
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/VerifyManifestMojo.java   (with props)
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleResolver.java   (with props)
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleUtil.java   (with props)
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/OSGIArtifactVersion.java   (with props)
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/tuscany/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/tuscany/maven/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/tuscany/maven/compiler/
    geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/tuscany/maven/compiler/osgi/
Modified:
    geronimo/server/trunk/framework/buildsupport/car-maven-plugin/pom.xml
    geronimo/server/trunk/framework/buildsupport/pom.xml
    geronimo/server/trunk/framework/modules/geronimo-jmx-remoting/pom.xml
    geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml
    geronimo/server/trunk/framework/modules/geronimo-security/pom.xml
    geronimo/server/trunk/framework/modules/pom.xml
    geronimo/server/trunk/framework/pom.xml
    geronimo/server/trunk/pom.xml

Modified: geronimo/server/trunk/framework/buildsupport/car-maven-plugin/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/car-maven-plugin/pom.xml?rev=836317&r1=836316&r2=836317&view=diff
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/car-maven-plugin/pom.xml (original)
+++ geronimo/server/trunk/framework/buildsupport/car-maven-plugin/pom.xml Sun Nov 15 02:25:47 2009
@@ -224,6 +224,13 @@
             <artifactId>org.osgi.core</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.geronimo.testsupport</groupId>
+            <artifactId>testsupport-common</artifactId>
+            <version>${version}</version>
+            <scope>test</scope>
+        </dependency>
+
     </dependencies>
 
 </project>

Added: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/pom.xml?rev=836317&view=auto
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/pom.xml (added)
+++ geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/pom.xml Sun Nov 15 02:25:47 2009
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.geronimo.buildsupport</groupId>
+        <artifactId>buildsupport</artifactId>
+        <version>3.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>geronimo-osgi-plugin</artifactId>
+    <name>Geronimo Build Support :: OSGi Plugin</name>
+    <packaging>maven-plugin</packaging>
+
+    <repositories>
+        <!-- Tuscany repository to hold artifacts that are not published in the public maven repos -->
+        <repository>
+            <id>tuscany.repo</id>
+            <name>Tuscany Maven 2.x Repository</name>
+            <url>http://svn.apache.org/repos/asf/tuscany/maven</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-project</artifactId>
+            <version>2.0.8</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>junit</groupId>
+                    <artifactId>junit</artifactId>
+                </exclusion>
+            </exclusions>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-artifact</artifactId>
+            <version>2.0.8</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-plugin-api</artifactId>
+            <version>2.0.8</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse</groupId>
+            <artifactId>osgi</artifactId>
+            <version>3.5.0-v20090520</version>
+            <scope>compile</scope>
+        </dependency>
+
+    </dependencies>
+
+</project>

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/DisplayManifestMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/DisplayManifestMojo.java?rev=836317&view=auto
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/DisplayManifestMojo.java (added)
+++ geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/DisplayManifestMojo.java Sun Nov 15 02:25:47 2009
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.geronimo.mavenplugins.osgi;
+
+import java.io.File;
+
+import org.apache.geronimo.mavenplugins.osgi.utils.BundleResolver;
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugin.logging.SystemStreamLog;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.ExportPackageDescription;
+import org.eclipse.osgi.service.resolver.ImportPackageSpecification;
+import org.osgi.framework.BundleException;
+
+/** 
+ * @goal display-manifest
+ */
+public class DisplayManifestMojo extends AbstractLogEnabled implements Mojo {
+
+    private Log log;
+
+    /**
+     * The maven project.
+     *
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    protected MavenProject project;
+        
+    /**
+     * Output directory.
+     *
+     * @parameter expression="${project.build.directory}/classes"
+     * @required
+     */
+    protected File targetDir = null;
+    
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        
+        if (!targetDir.exists()) {
+            return;
+        }
+                
+        BundleResolver stateController = new BundleResolver(getLogger());
+                
+        try {
+            stateController.addBundle(targetDir);
+        } catch (BundleException e) {
+            log.error(e.getMessage(), e);
+        }        
+        stateController.resolveState();
+        BundleDescription b = stateController.getBundleDescription(targetDir);                
+        if (b != null) {
+            displayImportExports(b);
+        }    
+    }
+
+    private void displayImportExports(BundleDescription b) {
+        System.out.println("Bundle: " + b.getSymbolicName());
+        System.out.println();
+        System.out.println("Imports:");
+        ImportPackageSpecification[] importPackages = b.getImportPackages();
+        if (importPackages != null) {
+            for (ImportPackageSpecification importPackage : importPackages) {
+                System.out.println(importPackage);
+            }
+        }
+                    
+        System.out.println();       
+        System.out.println("Exports:");
+        ExportPackageDescription[] exportPackages = b.getExportPackages();
+        if (exportPackages != null) {
+            for (ExportPackageDescription exportPackage : exportPackages) {
+                System.out.println(exportPackage);
+            }
+        }
+    }
+    
+    public void setLog(Log log) {
+        this.log = log;
+    }
+
+    public Log getLog() {
+        if (log == null) {
+            setLog(new SystemStreamLog());
+        }
+        return log;
+    }
+           
+}

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/DisplayManifestMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/DisplayManifestMojo.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/DisplayManifestMojo.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/VerifyManifestMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/VerifyManifestMojo.java?rev=836317&view=auto
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/VerifyManifestMojo.java (added)
+++ geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/VerifyManifestMojo.java Sun Nov 15 02:25:47 2009
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.geronimo.mavenplugins.osgi;
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.geronimo.mavenplugins.osgi.utils.BundleResolver;
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugin.logging.SystemStreamLog;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.osgi.framework.BundleException;
+
+/** 
+ * @goal verify-manifest
+ */
+public class VerifyManifestMojo extends AbstractLogEnabled implements Mojo {
+
+    private Log log;
+
+    /**
+     * The maven project.
+     *
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    protected MavenProject project;
+        
+    /**
+     * Output directory.
+     *
+     * @parameter expression="${project.build.directory}/classes"
+     * @required
+     */
+    protected File targetDir = null;
+    
+    /**
+     * @parameter   
+     */
+    protected boolean failOnError = true;
+
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        
+        if (!targetDir.exists()) {
+            return;
+        }
+                
+        BundleResolver stateController = new BundleResolver(getLogger());
+        
+        List<String> classpath;
+        try {
+            classpath = (List<String>)project.getCompileClasspathElements();
+        } catch (DependencyResolutionRequiredException e) {
+            throw new MojoExecutionException(e.getMessage(), e);
+        }
+        
+        for (String path : classpath) {
+            try {
+                File cp = new File(path);
+                if (log.isDebugEnabled()) {
+                    log.debug("Adding bundle: " + cp);
+                }
+                if (cp.exists()) {
+                    stateController.addBundle(cp);
+                }
+            } catch (BundleException e) {
+                log.error(e.getMessage(), e);
+            }
+        }
+        
+        stateController.resolveState();
+        BundleDescription b = stateController.getBundleDescription(targetDir);                
+        if (b != null) {
+            log.info("Resolving OSGi bundle: " + b.getSymbolicName());
+            try {
+                stateController.assertResolved(b);
+                log.info("OSGi bundle is resolved: " + b.getSymbolicName());
+            } catch (BundleException e) {
+               // stateController.analyzeErrors(b);
+                if (failOnError) {
+                    log.error(stateController.reportErrors(b));
+                    throw new MojoExecutionException("OSGi bundle resolution failed");
+                } else {
+                    log.warn(stateController.reportErrors(b));
+                }
+            }
+        }    
+    }
+
+    public void setLog(Log log) {
+        this.log = log;
+    }
+
+    public Log getLog() {
+        if (log == null) {
+            setLog(new SystemStreamLog());
+        }
+        return log;
+    }
+           
+}

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/VerifyManifestMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/VerifyManifestMojo.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/VerifyManifestMojo.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleResolver.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleResolver.java?rev=836317&view=auto
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleResolver.java (added)
+++ geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleResolver.java Sun Nov 15 02:25:47 2009
@@ -0,0 +1,490 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.geronimo.mavenplugins.osgi.utils;
+
+import static org.eclipse.osgi.service.resolver.ResolverError.IMPORT_PACKAGE_USES_CONFLICT;
+import static org.eclipse.osgi.service.resolver.ResolverError.MISSING_FRAGMENT_HOST;
+import static org.eclipse.osgi.service.resolver.ResolverError.MISSING_IMPORT_PACKAGE;
+import static org.eclipse.osgi.service.resolver.ResolverError.MISSING_REQUIRE_BUNDLE;
+import static org.eclipse.osgi.service.resolver.ResolverError.REQUIRE_BUNDLE_USES_CONFLICT;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.BundleSpecification;
+import org.eclipse.osgi.service.resolver.ExportPackageDescription;
+import org.eclipse.osgi.service.resolver.HostSpecification;
+import org.eclipse.osgi.service.resolver.ImportPackageSpecification;
+import org.eclipse.osgi.service.resolver.ResolverError;
+import org.eclipse.osgi.service.resolver.State;
+import org.eclipse.osgi.service.resolver.StateObjectFactory;
+import org.eclipse.osgi.service.resolver.VersionConstraint;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+
+public class BundleResolver {
+    private static final String PROP_MAVEN_PROJECT = "MavenProject";
+    private static final String PROP_MANIFEST = "BundleManifest";
+
+    private StateObjectFactory factory = StateObjectFactory.defaultFactory;
+    private State state;
+    private long id = 0;
+    private Logger logger;
+
+    public static BundleDescription[] getDependentBundles(BundleDescription root) {
+        if (root == null)
+            return new BundleDescription[0];
+        BundleDescription[] imported = getImportedBundles(root);
+        BundleDescription[] required = getRequiredBundles(root);
+        BundleDescription[] dependents = new BundleDescription[imported.length + required.length];
+        System.arraycopy(imported, 0, dependents, 0, imported.length);
+        System.arraycopy(required, 0, dependents, imported.length, required.length);
+        return dependents;
+    }
+
+    public static BundleDescription[] getImportedBundles(BundleDescription root) {
+        if (root == null)
+            return new BundleDescription[0];
+        ExportPackageDescription[] packages = root.getResolvedImports();
+        List<BundleDescription> resolvedImports = new ArrayList<BundleDescription>(packages.length);
+        for (int i = 0; i < packages.length; i++)
+            if (!root.getLocation().equals(packages[i].getExporter().getLocation()) && !resolvedImports
+                .contains(packages[i].getExporter()))
+                resolvedImports.add(packages[i].getExporter());
+        return (BundleDescription[])resolvedImports.toArray(new BundleDescription[resolvedImports.size()]);
+    }
+
+    public static BundleDescription[] getRequiredBundles(BundleDescription root) {
+        if (root == null)
+            return new BundleDescription[0];
+        return root.getResolvedRequires();
+    }
+
+    public BundleResolver(Logger logger) {
+        this.logger = logger;
+        this.state = factory.createState(true);
+        Properties props = new Properties();
+        props.putAll(System.getProperties());
+        BundleUtil.loadVMProfile(props);
+        state.setPlatformProperties(props);
+        URL url = Bundle.class.getProtectionDomain().getCodeSource().getLocation();
+
+        File osgi = toFile(url);
+        try {
+            addBundle(osgi);
+        } catch (BundleException e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    private long getNextId() {
+        return ++id;
+    }
+
+    public BundleDescription addBundle(File bundleLocation) throws BundleException {
+        return addBundle(bundleLocation, false);
+    }
+
+    public BundleDescription addBundle(File bundleLocation, boolean override) throws BundleException {
+        if (bundleLocation == null || !bundleLocation.exists())
+            throw new IllegalArgumentException("bundleLocation not found: " + bundleLocation);
+        Dictionary manifest = loadManifestAttributes(bundleLocation);
+        if (manifest == null) {
+            // throw new BundleException("manifest not found in " + bundleLocation);
+            return null;
+        }
+        return addBundle(manifest, bundleLocation, override);
+    }
+
+    public BundleDescription addBundle(File manifestLocation, File bundleLocation, boolean override)
+        throws BundleException {
+        if (bundleLocation == null || !bundleLocation.exists())
+            throw new IllegalArgumentException("bundleLocation not found: " + bundleLocation);
+        Dictionary manifest = loadManifestAttributes(manifestLocation);
+        if (manifest == null)
+            throw new IllegalArgumentException("manifest not found in " + manifestLocation);
+        return addBundle(manifest, bundleLocation, override);
+    }
+
+    private Dictionary loadManifestAttributes(File bundleLocation) {
+        Manifest m = loadManifest(bundleLocation);
+        if (m == null) {
+            return null;
+        }
+
+        return manifestToProperties(m.getMainAttributes());
+    }
+
+    public Manifest loadManifest(File bundleLocation) {
+        try {
+            return BundleUtil.getManifest(bundleLocation);
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    private Properties manifestToProperties(Attributes d) {
+        Iterator iter = d.keySet().iterator();
+        Properties result = new Properties();
+        while (iter.hasNext()) {
+            Attributes.Name key = (Attributes.Name)iter.next();
+            result.put(key.toString(), d.get(key));
+        }
+        return result;
+    }
+
+    private BundleDescription addBundle(Dictionary enhancedManifest, File bundleLocation, boolean override)
+        throws BundleException {
+
+        BundleDescription descriptor =
+            factory.createBundleDescription(state, enhancedManifest, bundleLocation.getAbsolutePath(), getNextId());
+
+        setUserProperty(descriptor, PROP_MANIFEST, enhancedManifest);
+        if (override) {
+            BundleDescription[] conflicts = state.getBundles(descriptor.getSymbolicName());
+            if (conflicts != null) {
+                for (BundleDescription conflict : conflicts) {
+                    state.removeBundle(conflict);
+                    logger
+                        .warn(conflict.toString() + " has been replaced by another bundle with the same symbolic name "
+                            + descriptor.toString());
+                }
+            }
+        }
+
+        state.addBundle(descriptor);
+        return descriptor;
+    }
+
+    public BundleDescription getResolvedBundle(String bundleId) {
+        BundleDescription[] description = state.getBundles(bundleId);
+        if (description == null)
+            return null;
+        for (int i = 0; i < description.length; i++) {
+            if (description[i].isResolved())
+                return description[i];
+        }
+        return null;
+    }
+
+    public void resolveState() {
+        state.resolve(false);
+
+        if (logger.isDebugEnabled()) {
+            StringBuilder sb = new StringBuilder("Resolved OSGi state\n");
+            for (BundleDescription bundle : state.getBundles()) {
+                if (!bundle.isResolved()) {
+                    sb.append("[X] ");
+                } else {
+                    sb.append("[V] ");
+                }
+                sb.append(bundle).append(": (").append(bundle.getLocation());
+                sb.append(")\n");
+                for (ResolverError error : state.getResolverErrors(bundle)) {
+                    sb.append("    ").append(error.toString()).append('\n');
+                }
+            }
+            logger.debug(sb.toString());
+        }
+    }
+
+    public State getState() {
+        return state;
+    }
+
+    public BundleDescription[] getBundles() {
+        return state.getBundles();
+    }
+
+    public ResolverError[] getResolverErrors(BundleDescription bundle) {
+        Set<ResolverError> errors = new LinkedHashSet<ResolverError>();
+        getRelevantErrors(errors, bundle);
+        return (ResolverError[])errors.toArray(new ResolverError[errors.size()]);
+    }
+
+    private void getRelevantErrors(Set<ResolverError> errors, BundleDescription bundle) {
+        ResolverError[] bundleErrors = state.getResolverErrors(bundle);
+        for (int j = 0; j < bundleErrors.length; j++) {
+            ResolverError error = bundleErrors[j];
+            errors.add(error);
+
+            VersionConstraint constraint = error.getUnsatisfiedConstraint();
+            if (constraint instanceof BundleSpecification || constraint instanceof HostSpecification) {
+                BundleDescription[] requiredBundles = state.getBundles(constraint.getName());
+                for (int i = 0; i < requiredBundles.length; i++) {
+                    getRelevantErrors(errors, requiredBundles[i]);
+                }
+            }
+        }
+    }
+
+    private void logError(BundleDescription bundle, int level, Object object) {
+        StringBuffer msg = new StringBuffer();
+        for (int i = 0; i < level; i++) {
+            msg.append("--");
+        }
+        msg.append("> [").append(bundle.getSymbolicName()).append("] ");
+        msg.append(object);
+        logger.error(msg.toString());
+    }
+
+    public void analyzeErrors(BundleDescription bundle) {
+        analyzeErrors(bundle, new HashSet<BundleDescription>(), 1);
+    }
+
+    private void analyzeErrors(BundleDescription bundle, Set<BundleDescription> bundles, int level) {
+        if (bundles.contains(bundle)) {
+            return;
+        }
+        bundles.add(bundle);
+        ResolverError[] errors = state.getResolverErrors(bundle);
+        for (ResolverError error : errors) {
+            logError(bundle, level, error);
+            VersionConstraint constraint = error.getUnsatisfiedConstraint();
+            switch (error.getType()) {
+                case MISSING_IMPORT_PACKAGE:
+                    ImportPackageSpecification pkgSpec = (ImportPackageSpecification)constraint;
+                    for (BundleDescription b : getBundles()) {
+                        for (ExportPackageDescription pkg : b.getExportPackages()) {
+                            if (pkg.getName().equals(pkgSpec.getName())) {
+                                if (pkgSpec.getVersionRange().isIncluded(pkg.getVersion())) {
+                                    if (!pkg.getExporter().isResolved()) {
+                                        logError(b, level, "Bundle unresolved: " + pkg);
+                                        analyzeErrors(pkg.getExporter(), bundles, level + 1);
+                                    }
+                                } else {
+                                    logError(b, level, "Version mismatch: " + pkgSpec + " " + pkg);
+                                }
+                            }
+                        }
+                    }
+                    break;
+                case MISSING_REQUIRE_BUNDLE:
+                case MISSING_FRAGMENT_HOST:
+                    // BundleSpecification bundleSpec = (BundleSpecification)constraint;
+                    for (BundleDescription b : getBundles()) {
+                        if (b == bundle) {
+                            continue;
+                        }
+                        if (b.getSymbolicName().equals(constraint.getName())) {
+                            if (constraint.getVersionRange().isIncluded(b.getVersion())) {
+                                // There must be something wrong in the bundle
+                                analyzeErrors(b, bundles, level);
+                            } else {
+                                logError(bundle, level, "Version mismatch: " + constraint + " " + b);
+                            }
+                        }
+                    }
+                    break;
+                case IMPORT_PACKAGE_USES_CONFLICT:
+                case REQUIRE_BUNDLE_USES_CONFLICT:
+                default: 
+                    logger.error(reportErrors(bundle));
+                    break;
+            }
+        }
+
+    }
+
+    public Set<ResolverError> getAllErrors() {
+        BundleDescription[] bundles = state.getBundles();
+        Set<ResolverError> errors = new LinkedHashSet<ResolverError>();
+        for (int i = 0; i < bundles.length; i++) {
+            BundleDescription bundle = bundles[i];
+            ResolverError[] bundleErrors = state.getResolverErrors(bundle);
+            if (bundleErrors != null) {
+                errors.addAll(Arrays.asList(bundleErrors));
+            }
+        }
+        return errors;
+    }
+
+    public List<BundleDescription> getDependencies(BundleDescription desc) {
+        Set<Long> bundleIds = new LinkedHashSet<Long>();
+        addBundleAndDependencies(desc, bundleIds, true);
+        List<BundleDescription> dependencies = new ArrayList<BundleDescription>();
+        for (long bundleId : bundleIds) {
+            if (desc.getBundleId() != bundleId) {
+                BundleDescription dependency = state.getBundle(bundleId);
+                BundleDescription supplier = dependency.getSupplier().getSupplier();
+                HostSpecification host = supplier.getHost();
+                if (host == null || !desc.equals(host.getSupplier())) {
+                    dependencies.add(dependency);
+                }
+            }
+        }
+        return dependencies;
+    }
+
+    /**
+     * Code below is copy&paste from org.eclipse.pde.internal.core.DependencyManager
+     * which seems to calculate runtime dependencies. In particular, it adds
+     * fragments' dependencies to the host bundle (see TychoTest#testFragment unit test).
+     * This may or may not cause problems...
+     * 
+     * RequiredPluginsClasspathContainer#computePluginEntries has the logic to
+     * calculate compile-time dependencies in IDE.
+     * 
+     * TODO find the code used by PDE/Build  
+     */
+    private static void addBundleAndDependencies(BundleDescription desc, Set<Long> bundleIds, boolean includeOptional) {
+        if (desc != null && bundleIds.add(new Long(desc.getBundleId()))) {
+            BundleSpecification[] required = desc.getRequiredBundles();
+            for (int i = 0; i < required.length; i++) {
+                if (includeOptional || !required[i].isOptional())
+                    addBundleAndDependencies((BundleDescription)required[i].getSupplier(), bundleIds, includeOptional);
+            }
+            ImportPackageSpecification[] importedPkgs = desc.getImportPackages();
+            for (int i = 0; i < importedPkgs.length; i++) {
+                ExportPackageDescription exporter = (ExportPackageDescription)importedPkgs[i].getSupplier();
+                // Continue if the Imported Package is unresolved of the package is optional and don't want optional packages
+                if (exporter == null || (!includeOptional && Constants.RESOLUTION_OPTIONAL.equals(importedPkgs[i]
+                    .getDirective(Constants.RESOLUTION_DIRECTIVE))))
+                    continue;
+                addBundleAndDependencies(exporter.getExporter(), bundleIds, includeOptional);
+            }
+            BundleDescription[] fragments = desc.getFragments();
+            for (int i = 0; i < fragments.length; i++) {
+                if (!fragments[i].isResolved())
+                    continue;
+                String id = fragments[i].getSymbolicName();
+                if (!"org.eclipse.ui.workbench.compatibility".equals(id)) //$NON-NLS-1$
+                    addBundleAndDependencies(fragments[i], bundleIds, includeOptional);
+            }
+            HostSpecification host = desc.getHost();
+            if (host != null)
+                addBundleAndDependencies((BundleDescription)host.getSupplier(), bundleIds, includeOptional);
+        }
+    }
+
+    public BundleDescription getBundleDescription(MavenProject project) {
+        String location = project.getFile().getParentFile().getAbsolutePath();
+        return state.getBundleByLocation(location);
+    }
+
+    public BundleDescription getBundleDescription(File location) {
+        String absolutePath = location.getAbsolutePath();
+        return state.getBundleByLocation(absolutePath);
+    }
+
+    private static void setUserProperty(BundleDescription desc, String name, Object value) {
+        Object userObject = desc.getUserObject();
+
+        if (userObject != null && !(userObject instanceof Map)) {
+            throw new IllegalStateException("Unexpected user object " + desc.toString());
+        }
+
+        Map props = (Map)userObject;
+        if (props == null) {
+            props = new HashMap();
+            desc.setUserObject(props);
+        }
+
+        props.put(name, value);
+    }
+
+    private static Object getUserProperty(BundleDescription desc, String name) {
+        Object userObject = desc.getUserObject();
+        if (userObject instanceof Map) {
+            return ((Map)userObject).get(name);
+        }
+        return null;
+    }
+
+    public MavenProject getMavenProject(BundleDescription desc) {
+        return (MavenProject)getUserProperty(desc, PROP_MAVEN_PROJECT);
+    }
+
+    public void assertResolved(BundleDescription desc) throws BundleException {
+        if (!desc.isResolved()) {
+            throw new BundleException("Bundle cannot be resolved: " + desc);
+        }
+    }
+
+    public String reportErrors(BundleDescription desc) {
+        StringBuffer msg = new StringBuffer();
+        msg.append("Bundle ").append(desc.getSymbolicName()).append(" cannot be resolved: \n");
+        BundleDescription[] bundles = state.getBundles();
+        int index = 0;
+        for (BundleDescription b : bundles) {
+            if (b.isResolved()) {
+                continue;
+            }
+            ResolverError[] errors = state.getResolverErrors(b);
+            if (errors.length > 0) {
+                msg.append("  ").append("[").append(index++).append("] ").append(b.getSymbolicName()).append("\n");
+            }
+            for (int i = 0; i < errors.length; i++) {
+                ResolverError error = errors[i];
+                msg.append("  -->").append(error).append("\n");
+            }
+        }
+        return msg.toString();
+    }
+
+    public String getManifestAttribute(BundleDescription desc, String attr) {
+        Dictionary mf = (Dictionary)getUserProperty(desc, PROP_MANIFEST);
+        if (mf != null) {
+            return (String)mf.get(attr);
+        }
+        return null;
+    }
+
+    private static File toFile(URL url) {
+        if (url.getProtocol().equals("file") == false) {
+            return null;
+        } else {
+            String filename = url.getFile().replace('/', File.separatorChar).replace("%20", " ");
+            return new File(filename);
+        }
+    }
+
+    /*
+    public static void main(String[] args) throws Exception {
+        BundleResolver resolver = new BundleResolver(new ConsoleLogger(Logger.LEVEL_INFO, "tuscany"));
+
+        String home = System.getProperty("user.home");
+        File jar =
+            new File(new File(home),
+                     ".m2/repository/org/apache/tuscany/sca/tuscany-sca-api/1.4-EQUINOX-SNAPSHOT/tuscany-sca-api-1.4-EQUINOX-SNAPSHOT.jar");
+        BundleDescription bundle = resolver.addBundle(jar);
+        resolver.resolveState();
+        resolver.assertResolved(bundle);
+    }
+    */
+}

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleResolver.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleResolver.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleUtil.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleUtil.java?rev=836317&view=auto
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleUtil.java (added)
+++ geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleUtil.java Sun Nov 15 02:25:47 2009
@@ -0,0 +1,616 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.mavenplugins.osgi.utils;
+
+import static org.osgi.framework.Constants.BUNDLE_CLASSPATH;
+import static org.osgi.framework.Constants.BUNDLE_MANIFESTVERSION;
+import static org.osgi.framework.Constants.BUNDLE_NAME;
+import static org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME;
+import static org.osgi.framework.Constants.BUNDLE_VERSION;
+import static org.osgi.framework.Constants.DYNAMICIMPORT_PACKAGE;
+import static org.osgi.framework.Constants.EXPORT_PACKAGE;
+import static org.osgi.framework.Constants.IMPORT_PACKAGE;
+
+import java.io.BufferedInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.eclipse.osgi.framework.internal.core.Constants;
+import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
+import org.eclipse.osgi.util.ManifestElement;
+import org.osgi.framework.Version;
+
+/**
+ * Common functions used by the plugin.
+ *
+ * @version $Rev$ $Date$
+ */
+public final class BundleUtil {
+
+    /**
+     * Returns the name of a bundle, or null if the given file is not a bundle.
+     *
+     * @param file
+     * @return
+     * @throws IOException
+     */
+    public static String getBundleSymbolicName(File file) throws IOException {
+        if (!file.exists()) {
+            return null;
+        }
+        String bundleName = null;
+        if (file.isDirectory()) {
+            File mf = new File(file, JarFile.MANIFEST_NAME);
+            if (!mf.isFile()) {
+                mf = new File(file, "../../" + JarFile.MANIFEST_NAME);
+            }
+            if (mf.isFile()) {
+                Manifest manifest = new Manifest(new FileInputStream(mf));
+                bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
+            }
+        } else {
+            JarFile jar = new JarFile(file, false);
+            Manifest manifest = jar.getManifest();
+            bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
+            jar.close();
+        }
+        if (bundleName == null) {
+            return bundleName;
+        }
+        int sc = bundleName.indexOf(';');
+        if (sc != -1) {
+            bundleName = bundleName.substring(0, sc);
+        }
+        return bundleName;
+    }
+
+    static Manifest getManifest(File file) throws IOException {
+        if (!file.exists()) {
+            return null;
+        }
+        Manifest manifest = null;
+        String bundleName = null;
+        if (file.isDirectory()) {
+            File mf = new File(file, JarFile.MANIFEST_NAME);
+            if (!mf.isFile()) {
+                mf = new File(file, "../../" + JarFile.MANIFEST_NAME);
+            }
+            if (mf.isFile()) {
+                manifest = new Manifest(new FileInputStream(mf));
+                bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
+            }
+        } else {
+            JarFile jar = new JarFile(file, false);
+            manifest = jar.getManifest();
+            bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
+            jar.close();
+        }
+        if (bundleName != null) {
+            return manifest;
+        }
+
+        if (file.isFile()) {
+            Set<File> jars = new HashSet<File>();
+            jars.add(file);
+            String name = file.getName();
+            manifest = libraryManifest(jars, name, name, getOSGiVersion(name), null);
+        }
+        return manifest;
+    }
+
+    /**
+     * Generate a Bundle manifest for a set of JAR files.
+     *
+     * @param jarFiles
+     * @param name
+     * @param symbolicName
+     * @param version
+     * @param dir
+     * @return
+     * @throws IllegalStateException
+     */
+    static Manifest libraryManifest(Set<File> jarFiles, String name, String symbolicName, String version, String dir)
+        throws IllegalStateException {
+        try {
+
+            // List exported packages and bundle classpath entries
+            StringBuffer classpath = new StringBuffer();
+            Set<String> exportedPackages = new HashSet<String>();
+            for (File jarFile : jarFiles) {
+                addPackages(jarFile, exportedPackages, version);
+                if (dir != null) {
+                    classpath.append(dir).append("/");
+                    classpath.append(jarFile.getName());
+                } else {
+                    classpath.append("\"external:");
+                    classpath.append(jarFile.getPath().replace(File.separatorChar, '/'));
+                    classpath.append("\"");
+                }
+                classpath.append(",");
+            }
+
+            // Generate export-package and import-package declarations
+            StringBuffer exports = new StringBuffer();
+            StringBuffer imports = new StringBuffer();
+            Set<String> importedPackages = new HashSet<String>();
+            for (String export : exportedPackages) {
+
+                // Add export declaration
+                exports.append(export);
+                exports.append(',');
+
+                // Add corresponding import declaration
+                String packageName = packageName(export);
+                if (!importedPackages.contains(packageName)) {
+                    importedPackages.add(packageName);
+                    imports.append(packageName);
+                    imports.append(',');
+                }
+            }
+
+            // Create a manifest
+            Manifest manifest = new Manifest();
+            Attributes attributes = manifest.getMainAttributes();
+            attributes.putValue("Manifest-Version", "1.0");
+            attributes.putValue(BUNDLE_MANIFESTVERSION, "2");
+            attributes.putValue(BUNDLE_SYMBOLICNAME, symbolicName);
+            attributes.putValue(BUNDLE_NAME, name);
+            attributes.putValue(BUNDLE_VERSION, version);
+            attributes.putValue(DYNAMICIMPORT_PACKAGE, "*");
+            if (exports.length() > 1) {
+                attributes.putValue(EXPORT_PACKAGE, exports.substring(0, exports.length() - 1));
+            }
+            if (imports.length() > 1) {
+                attributes.putValue(IMPORT_PACKAGE, imports.substring(0, imports.length() - 1));
+            }
+            if (classpath.length() > 1) {
+                attributes.putValue(BUNDLE_CLASSPATH, classpath.substring(0, classpath.length() - 1));
+            }
+
+            return manifest;
+        } catch (IOException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    /**
+     * Write a bundle manifest.
+     *
+     * @param manifest
+     * @param out
+     * @throws IOException
+     */
+    static void write(Manifest manifest, OutputStream out) throws IOException {
+        DataOutputStream dos = new DataOutputStream(out);
+        Attributes attributes = manifest.getMainAttributes();
+        write(attributes, "Manifest-Version", dos);
+        write(attributes, BUNDLE_MANIFESTVERSION, dos);
+        write(attributes, BUNDLE_SYMBOLICNAME, dos);
+        write(attributes, BUNDLE_NAME, dos);
+        write(attributes, BUNDLE_VERSION, dos);
+        write(attributes, DYNAMICIMPORT_PACKAGE, dos);
+        write(attributes, BUNDLE_CLASSPATH, dos);
+        write(attributes, IMPORT_PACKAGE, dos);
+        write(attributes, EXPORT_PACKAGE, dos);
+        dos.flush();
+    }
+
+    /**
+     * Add packages to be exported out of a JAR file.
+     *
+     * @param jarFile
+     * @param packages
+     * @throws IOException
+     */
+    private static void addPackages(File jarFile, Set<String> packages, String version) throws IOException {
+        if (getBundleSymbolicName(jarFile) == null) {
+            String ver = ";version=" + version;
+            addAllPackages(jarFile, packages, ver);
+        } else {
+            addExportedPackages(jarFile, packages);
+        }
+    }
+
+    /**
+     * Write manifest attributes.
+     *
+     * @param attributes
+     * @param key
+     * @param dos
+     * @throws IOException
+     */
+    private static void write(Attributes attributes, String key, DataOutputStream dos) throws IOException {
+        String value = attributes.getValue(key);
+        if (value == null) {
+            return;
+        }
+        StringBuffer line = new StringBuffer();
+        line.append(key);
+        line.append(": ");
+        line.append(new String(value.getBytes("UTF8")));
+        line.append("\r\n");
+        int l = line.length();
+        if (l > 72) {
+            for (int i = 70; i < l - 2;) {
+                line.insert(i, "\r\n ");
+                i += 72;
+                l += 3;
+            }
+        }
+        dos.writeBytes(line.toString());
+    }
+
+    /**
+     * Strip an OSGi export, only retain the package name and version.
+     *
+     * @param export
+     * @return
+     */
+    private static String stripExport(String export) {
+        int sc = export.indexOf(';');
+        if (sc == -1) {
+            return export;
+        }
+        String base = export.substring(0, sc);
+        int v = export.indexOf("version=");
+        if (v != -1) {
+            sc = export.indexOf(';', v + 1);
+            if (sc != -1) {
+                return base + ";" + export.substring(v, sc);
+            } else {
+                return base + ";" + export.substring(v);
+            }
+        } else {
+            return base;
+        }
+    }
+
+    /**
+     * Add all the packages out of a JAR.
+     *
+     * @param jarFile
+     * @param packages
+     * @param version
+     * @throws IOException
+     */
+    private static void addAllPackages(File jarFile, Set<String> packages, String version) throws IOException {
+        ZipInputStream is = new ZipInputStream(new FileInputStream(jarFile));
+        ZipEntry entry;
+        while ((entry = is.getNextEntry()) != null) {
+            String entryName = entry.getName();
+            if (!entry.isDirectory() && entryName != null
+                && entryName.length() > 0
+                && !entryName.startsWith(".")
+                && entryName.endsWith(".class") // Exclude resources from Export-Package
+                && entryName.lastIndexOf("/") > 0
+                && Character.isJavaIdentifierStart(entryName.charAt(0))) {
+                String pkg = entryName.substring(0, entryName.lastIndexOf("/")).replace('/', '.');
+                if (!pkg.endsWith(".enum")) {
+                    packages.add(pkg + version);
+                }
+            }
+        }
+        is.close();
+    }
+
+    /**
+     * Returns the name of the exported package in the given export.
+     * @param export
+     * @return
+     */
+    private static String packageName(String export) {
+        int sc = export.indexOf(';');
+        if (sc != -1) {
+            export = export.substring(0, sc);
+        }
+        return export;
+    }
+
+    /**
+     * Add the packages exported by a bundle.
+     *
+     * @param file
+     * @param packages
+     * @return
+     * @throws IOException
+     */
+    private static void addExportedPackages(File file, Set<String> packages) throws IOException {
+        if (!file.exists()) {
+            return;
+        }
+
+        // Read the export-package declaration and get a list of the packages available in a JAR
+        Set<String> existingPackages = null;
+        String exports = null;
+        if (file.isDirectory()) {
+            File mf = new File(file, "META-INF/MANIFEST.MF");
+            if (mf.isFile()) {
+                Manifest manifest = new Manifest(new FileInputStream(mf));
+                exports = manifest.getMainAttributes().getValue(EXPORT_PACKAGE);
+            }
+        } else {
+            JarFile jar = new JarFile(file, false);
+            Manifest manifest = jar.getManifest();
+            exports = manifest.getMainAttributes().getValue(EXPORT_PACKAGE);
+            jar.close();
+            existingPackages = new HashSet<String>();
+            addAllPackages(file, existingPackages, "");
+        }
+        if (exports == null) {
+            return;
+        }
+
+        // Parse the export-package declaration, and extract the individual packages
+        StringBuffer buffer = new StringBuffer();
+        boolean q = false;
+        for (int i = 0, n = exports.length(); i < n; i++) {
+            char c = exports.charAt(i);
+            if (c == '\"') {
+                q = !q;
+            }
+            if (!q) {
+                if (c == ',') {
+
+                    // Add the exported package to the set, after making sure it really exists in
+                    // the JAR
+                    String export = buffer.toString();
+                    if (existingPackages == null || existingPackages.contains(packageName(export))) {
+                        packages.add(stripExport(export));
+                    }
+                    buffer = new StringBuffer();
+                    continue;
+                }
+            }
+            buffer.append(c);
+        }
+        if (buffer.length() != 0) {
+
+            // Add the exported package to the set, after making sure it really exists in
+            // the JAR
+            String export = buffer.toString();
+            if (existingPackages == null || existingPackages.contains(packageName(export))) {
+                packages.add(stripExport(export));
+            }
+        }
+    }
+
+    /**
+     * starting with -, then some digits, then . or - or _, then some digits again
+     *
+     */
+    private static Pattern pattern = Pattern.compile("-(\\d)+((\\.|-|_)(\\d)+)*");
+
+    /**
+     * Returns the version number to use for the given JAR file.
+     *
+     * @param fileName
+     * @return
+     */
+    static String getOSGiVersion(String fileName) {
+        String name = fileName;
+        int index = name.lastIndexOf('.');
+        if (index != -1) {
+            // Trim the extension
+            name = name.substring(0, index);
+        }
+
+        Matcher matcher = pattern.matcher(name);
+        String version = "0.0.0";
+        if (matcher.find()) {
+            version = matcher.group();
+            version = version.substring(1);
+
+        }
+        return osgiVersion(version);
+    }
+
+    /**
+     * Convert the maven version into OSGi version
+     * @param mavenVersion
+     * @return
+     */
+    static String osgiVersion(String mavenVersion) {
+        ArtifactVersion ver = new OSGIArtifactVersion(mavenVersion);
+        String qualifer = ver.getQualifier();
+        if (qualifer != null) {
+            StringBuffer buf = new StringBuffer(qualifer);
+            for (int i = 0; i < buf.length(); i++) {
+                char c = buf.charAt(i);
+                if (Character.isLetterOrDigit(c) || c == '-' || c == '_') {
+                    // Keep as-is
+                } else {
+                    buf.setCharAt(i, '_');
+                }
+            }
+            qualifer = buf.toString();
+        }
+        Version osgiVersion =
+            new Version(ver.getMajorVersion(), ver.getMinorVersion(), ver.getIncrementalVersion(), qualifer);
+        String version = osgiVersion.toString();
+        return version;
+    }
+
+    private static String J2SE = "J2SE-";
+    private static String JAVASE = "JavaSE-";
+    private static String PROFILE_EXT = ".profile";
+
+    public static void loadVMProfile(Properties properties) {
+        Properties profileProps = findVMProfile(properties);
+        String systemExports = properties.getProperty(Constants.FRAMEWORK_SYSTEMPACKAGES);
+        // set the system exports property using the vm profile; only if the property is not already set
+        if (systemExports == null) {
+            systemExports = profileProps.getProperty(Constants.FRAMEWORK_SYSTEMPACKAGES);
+            if (systemExports != null)
+                properties.put(Constants.FRAMEWORK_SYSTEMPACKAGES, systemExports);
+        }
+        // set the org.osgi.framework.bootdelegation property according to the java profile
+        String type = properties.getProperty(Constants.OSGI_JAVA_PROFILE_BOOTDELEGATION); // a null value means ignore
+        String profileBootDelegation = profileProps.getProperty(Constants.FRAMEWORK_BOOTDELEGATION);
+        if (Constants.OSGI_BOOTDELEGATION_OVERRIDE.equals(type)) {
+            if (profileBootDelegation == null)
+                properties.remove(Constants.FRAMEWORK_BOOTDELEGATION); // override with a null value
+            else
+                properties.put(Constants.FRAMEWORK_BOOTDELEGATION, profileBootDelegation); // override with the profile value
+        } else if (Constants.OSGI_BOOTDELEGATION_NONE.equals(type))
+            properties.remove(Constants.FRAMEWORK_BOOTDELEGATION); // remove the bootdelegation property in case it was set
+        // set the org.osgi.framework.executionenvironment property according to the java profile
+        if (properties.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT) == null) {
+            // get the ee from the java profile; if no ee is defined then try the java profile name
+            String ee =
+                profileProps.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, profileProps
+                    .getProperty(Constants.OSGI_JAVA_PROFILE_NAME));
+            if (ee != null)
+                properties.put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, ee);
+        }
+    }
+
+    private static Properties findVMProfile(Properties properties) {
+        Properties result = new Properties();
+        // Find the VM profile name using J2ME properties
+        String j2meConfig = properties.getProperty(Constants.J2ME_MICROEDITION_CONFIGURATION);
+        String j2meProfiles = properties.getProperty(Constants.J2ME_MICROEDITION_PROFILES);
+        String vmProfile = null;
+        String javaEdition = null;
+        Version javaVersion = null;
+        if (j2meConfig != null && j2meConfig.length() > 0 && j2meProfiles != null && j2meProfiles.length() > 0) {
+            // save the vmProfile based off of the config and profile
+            // use the last profile; assuming that is the highest one
+            String[] j2meProfileList = ManifestElement.getArrayFromList(j2meProfiles, " "); //$NON-NLS-1$
+            if (j2meProfileList != null && j2meProfileList.length > 0)
+                vmProfile = j2meConfig + '_' + j2meProfileList[j2meProfileList.length - 1];
+        } else {
+            // No J2ME properties; use J2SE properties
+            // Note that the CDC spec appears not to require VM implementations to set the
+            // javax.microedition properties!!  So we will try to fall back to the 
+            // java.specification.name property, but this is pretty ridiculous!!
+            String javaSpecVersion = properties.getProperty("java.specification.version"); //$NON-NLS-1$
+            // set the profile and EE based off of the java.specification.version
+            // TODO We assume J2ME Foundation and J2SE here.  need to support other profiles J2EE ...
+            if (javaSpecVersion != null) {
+                StringTokenizer st = new StringTokenizer(javaSpecVersion, " _-"); //$NON-NLS-1$
+                javaSpecVersion = st.nextToken();
+                String javaSpecName = properties.getProperty("java.specification.name"); //$NON-NLS-1$
+                if ("J2ME Foundation Specification".equals(javaSpecName)) //$NON-NLS-1$
+                    vmProfile = "CDC-" + javaSpecVersion + "_Foundation-" + javaSpecVersion; //$NON-NLS-1$ //$NON-NLS-2$
+                else {
+                    // look for JavaSE if 1.6 or greater; otherwise look for J2SE
+                    Version v16 = new Version("1.6"); //$NON-NLS-1$
+                    javaEdition = J2SE;
+                    try {
+                        javaVersion = new Version(javaSpecVersion);
+                        if (v16.compareTo(javaVersion) <= 0)
+                            javaEdition = JAVASE;
+                    } catch (IllegalArgumentException e) {
+                        // do nothing
+                    }
+                    vmProfile = javaEdition + javaSpecVersion;
+                }
+            }
+        }
+        URL url = null;
+        // check for the java profile property for a url
+        String propJavaProfile = FrameworkProperties.getProperty(Constants.OSGI_JAVA_PROFILE);
+        if (propJavaProfile != null)
+            try {
+                // we assume a URL
+                url = new URL(propJavaProfile);
+            } catch (MalformedURLException e1) {
+                // try using a relative path in the system bundle
+                url = findInSystemBundle(propJavaProfile);
+            }
+        if (url == null && vmProfile != null) {
+            // look for a profile in the system bundle based on the vm profile
+            String javaProfile = vmProfile + PROFILE_EXT;
+            url = findInSystemBundle(javaProfile);
+            if (url == null)
+                url = getNextBestProfile(javaEdition, javaVersion);
+        }
+        if (url == null)
+            // the profile url is still null then use the osgi min profile in OSGi by default
+            url = findInSystemBundle("OSGi_Minimum-1.2.profile"); //$NON-NLS-1$
+        if (url != null) {
+            InputStream in = null;
+            try {
+                in = url.openStream();
+                result.load(new BufferedInputStream(in));
+            } catch (IOException e) {
+                // TODO consider logging ...
+            } finally {
+                if (in != null)
+                    try {
+                        in.close();
+                    } catch (IOException ee) {
+                        // do nothing
+                    }
+            }
+        }
+        // set the profile name if it does not provide one
+        if (result.getProperty(Constants.OSGI_JAVA_PROFILE_NAME) == null)
+            if (vmProfile != null)
+                result.put(Constants.OSGI_JAVA_PROFILE_NAME, vmProfile.replace('_', '/'));
+            else
+                // last resort; default to the absolute minimum profile name for the framework
+                result.put(Constants.OSGI_JAVA_PROFILE_NAME, "OSGi/Minimum-1.2"); //$NON-NLS-1$
+        return result;
+    }
+
+    private static URL getNextBestProfile(String javaEdition, Version javaVersion) {
+        if (javaVersion == null || (javaEdition != J2SE && javaEdition != JAVASE))
+            return null; // we cannot automatically choose the next best profile unless this is a J2SE or JavaSE vm
+        URL bestProfile = findNextBestProfile(javaEdition, javaVersion);
+        if (bestProfile == null && javaEdition == JAVASE)
+            // if this is a JavaSE VM then search for a lower J2SE profile
+            bestProfile = findNextBestProfile(J2SE, javaVersion);
+        return bestProfile;
+    }
+
+    private static URL findNextBestProfile(String javaEdition, Version javaVersion) {
+        URL result = null;
+        int minor = javaVersion.getMinor();
+        do {
+            result = findInSystemBundle(javaEdition + javaVersion.getMajor() + "." + minor + PROFILE_EXT); //$NON-NLS-1$
+            minor = minor - 1;
+        } while (result == null && minor > 0);
+        return result;
+    }
+
+    private static URL findInSystemBundle(String entry) {
+        ClassLoader loader = BundleUtil.class.getClassLoader();
+        return loader == null ? ClassLoader.getSystemResource(entry) : loader.getResource(entry);
+    }
+
+}

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleUtil.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/BundleUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/OSGIArtifactVersion.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/OSGIArtifactVersion.java?rev=836317&view=auto
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/OSGIArtifactVersion.java (added)
+++ geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/OSGIArtifactVersion.java Sun Nov 15 02:25:47 2009
@@ -0,0 +1,219 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.mavenplugins.osgi.utils;
+
+import java.util.StringTokenizer;
+
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+
+public class OSGIArtifactVersion implements ArtifactVersion {
+    private Integer buildNumber;
+
+    private Integer incrementalVersion;
+
+    private Integer majorVersion;
+
+    private Integer minorVersion;
+
+    private String qualifier;
+
+    private String unparsed;
+
+    public OSGIArtifactVersion(String version) {
+        parseVersion(version);
+    }
+
+    public int compareTo(Object o) {
+        ArtifactVersion otherVersion = (ArtifactVersion)o;
+
+        int result = getMajorVersion() - otherVersion.getMajorVersion();
+        if (result == 0) {
+            result = getMinorVersion() - otherVersion.getMinorVersion();
+        }
+        if (result == 0) {
+            result = getIncrementalVersion() - otherVersion.getIncrementalVersion();
+        }
+        if (result == 0) {
+            if (this.qualifier != null) {
+                String otherQualifier = otherVersion.getQualifier();
+
+                if (otherQualifier != null) {
+                    if ((this.qualifier.length() > otherQualifier.length()) && this.qualifier
+                        .startsWith(otherQualifier)) {
+                        // here, the longer one that otherwise match is
+                        // considered older
+                        result = -1;
+                    } else if ((this.qualifier.length() < otherQualifier.length()) && otherQualifier
+                        .startsWith(this.qualifier)) {
+                        // here, the longer one that otherwise match is
+                        // considered older
+                        result = 1;
+                    } else {
+                        result = this.qualifier.compareTo(otherQualifier);
+                    }
+                } else {
+                    // otherVersion has no qualifier but we do - that's newer
+                    result = -1;
+                }
+            } else if (otherVersion.getQualifier() != null) {
+                // otherVersion has a qualifier but we don't, we're newer
+                result = 1;
+            } else {
+                result = getBuildNumber() - otherVersion.getBuildNumber();
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            return true;
+        }
+
+        if (false == (other instanceof ArtifactVersion)) {
+            return false;
+        }
+
+        return 0 == compareTo(other);
+    }
+
+    public int getBuildNumber() {
+        return this.buildNumber != null ? this.buildNumber.intValue() : 0;
+    }
+
+    public int getIncrementalVersion() {
+        return this.incrementalVersion != null ? this.incrementalVersion.intValue() : 0;
+    }
+
+    public int getMajorVersion() {
+        return this.majorVersion != null ? this.majorVersion.intValue() : 0;
+    }
+
+    public int getMinorVersion() {
+        return this.minorVersion != null ? this.minorVersion.intValue() : 0;
+    }
+
+    public String getQualifier() {
+        return this.qualifier;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = 1229;
+
+        result = 1223 * result + getMajorVersion();
+        result = 1223 * result + getMinorVersion();
+        result = 1223 * result + getIncrementalVersion();
+        result = 1223 * result + getBuildNumber();
+
+        if (null != getQualifier()) {
+            result = 1223 * result + getQualifier().hashCode();
+        }
+
+        return result;
+    }
+
+    public final void parseVersion(String version) {
+        this.unparsed = version;
+
+        int index = version.indexOf("-");
+
+        String part1;
+        String part2 = null;
+
+        if (index < 0) {
+            part1 = version;
+        } else {
+            part1 = version.substring(0, index);
+            part2 = version.substring(index + 1);
+        }
+
+        if (part2 != null) {
+            try {
+                if ((part2.length() == 1) || !part2.startsWith("0")) {
+                    this.buildNumber = Integer.valueOf(part2);
+                } else {
+                    this.qualifier = part2;
+                }
+            } catch (NumberFormatException e) {
+                this.qualifier = part2;
+            }
+        }
+
+        if ((part1.indexOf(".") < 0) && !part1.startsWith("0")) {
+            try {
+                this.majorVersion = Integer.valueOf(part1);
+            } catch (NumberFormatException e) {
+                // qualifier is the whole version, including "-"
+                this.qualifier = version;
+                this.buildNumber = null;
+            }
+        } else {
+            StringTokenizer tok = new StringTokenizer(part1, ".");
+
+            String s;
+
+            if (tok.hasMoreTokens()) {
+                s = tok.nextToken();
+                try {
+                    this.majorVersion = Integer.valueOf(s);
+
+                    if (tok.hasMoreTokens()) {
+                        s = tok.nextToken();
+                        try {
+                            this.minorVersion = Integer.valueOf(s);
+                            if (tok.hasMoreTokens()) {
+
+                                s = tok.nextToken();
+                                try {
+                                    this.incrementalVersion = Integer.valueOf(s);
+
+                                } catch (NumberFormatException e) {
+                                    this.qualifier = s;
+                                }
+                            }
+                        } catch (NumberFormatException e) {
+                            this.qualifier = s;
+                        }
+                    }
+                } catch (NumberFormatException e) {
+                    this.qualifier = s;
+                }
+            }
+
+            if (tok.hasMoreTokens()) {
+                StringBuffer qualifier = new StringBuffer(this.qualifier != null ? this.qualifier : "");
+                qualifier.append(tok.nextToken());
+                while (tok.hasMoreTokens()) {
+                    qualifier.append("_");
+                    qualifier.append(tok.nextToken());
+                }
+
+                this.qualifier = qualifier.toString();
+            }
+
+        }
+    }
+
+    @Override
+    public String toString() {
+        return this.unparsed;
+    }
+}

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/OSGIArtifactVersion.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/OSGIArtifactVersion.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/buildsupport/geronimo-osgi-plugin/src/main/java/org/apache/geronimo/mavenplugins/osgi/utils/OSGIArtifactVersion.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/server/trunk/framework/buildsupport/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/pom.xml?rev=836317&r1=836316&r2=836317&view=diff
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/pom.xml (original)
+++ geronimo/server/trunk/framework/buildsupport/pom.xml Sun Nov 15 02:25:47 2009
@@ -48,13 +48,14 @@
     </dependencyManagement>
 
     <dependencies>
+<!--
         <dependency>
             <groupId>org.apache.geronimo.testsupport</groupId>
             <artifactId>testsupport-common</artifactId>
             <version>${version}</version>
             <scope>test</scope>
         </dependency>
-
+-->
     </dependencies>
 
     <modules>
@@ -64,6 +65,7 @@
         <module>testsuite-maven-plugin</module>
         <module>geronimo-plugin-archetype</module>
         <module>geronimo-assembly-archetype</module>
+        <module>geronimo-osgi-plugin</module>
     </modules>
 
     <reporting>

Modified: geronimo/server/trunk/framework/modules/geronimo-jmx-remoting/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-jmx-remoting/pom.xml?rev=836317&r1=836316&r2=836317&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-jmx-remoting/pom.xml (original)
+++ geronimo/server/trunk/framework/modules/geronimo-jmx-remoting/pom.xml Sun Nov 15 02:25:47 2009
@@ -66,7 +66,6 @@
                   <Implementation-Title>${project.name}</Implementation-Title>
                   <Implementation-Version>${project.version}</Implementation-Version>
                   <Bundle-DocURL>${project.url}</Bundle-DocURL>
-                    <Import-Package>org.apache.xbean.naming.context,org.apache.xbean.naming.global;version=3.6,*</Import-Package>
                 </instructions>
               </configuration>
             </plugin>

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml?rev=836317&r1=836316&r2=836317&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml Sun Nov 15 02:25:47 2009
@@ -39,29 +39,22 @@
             <version>${version}</version>
             <scope>provided</scope>
         </dependency>
+
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.osgi.core</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.ops4j.pax.logging</groupId>
             <artifactId>pax-logging-api</artifactId>
         </dependency>
 
-        <!--<dependency>-->
-            <!--<groupId>org.apache.geronimo.framework</groupId>-->
-            <!--<artifactId>geronimo-logging</artifactId>-->
-            <!--<version>${version}</version>-->
-        <!--</dependency>-->
-        <!--<dependency>-->
-            <!--<groupId>asm</groupId>-->
-            <!--<artifactId>asm</artifactId>-->
-        <!--</dependency>-->
-
         <dependency>
             <groupId>org.apache.geronimo.bundles</groupId>
             <artifactId>asm</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.apache.geronimo.bundles</groupId>
             <artifactId>asm-commons</artifactId>
@@ -86,6 +79,12 @@
             <groupId>org.apache.servicemix.bundles</groupId>
             <artifactId>org.apache.servicemix.bundles.xpp3</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.servicemix.specs</groupId>
+            <artifactId>org.apache.servicemix.specs.stax-api-1.0</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.geronimo.testsupport</groupId>
             <artifactId>testsupport-common</artifactId>

Modified: geronimo/server/trunk/framework/modules/geronimo-security/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-security/pom.xml?rev=836317&r1=836316&r2=836317&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-security/pom.xml (original)
+++ geronimo/server/trunk/framework/modules/geronimo-security/pom.xml Sun Nov 15 02:25:47 2009
@@ -48,6 +48,10 @@
             <groupId>org.apache.geronimo.specs</groupId>
             <artifactId>geronimo-ejb_3.1_spec</artifactId>
         </dependency>
+         <dependency>
+             <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-jta_1.1_spec</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
             <artifactId>geronimo-servlet_3.0_spec</artifactId>
@@ -75,6 +79,15 @@
         </dependency>
 
         <dependency>
+           <groupId>org.apache.geronimo.bundles</groupId>
+           <artifactId>sxc-jaxb</artifactId>
+        </dependency>
+        <dependency>
+           <groupId>org.apache.geronimo.bundles</groupId>
+           <artifactId>sxc-runtime</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.geronimo.testsupport</groupId>
             <artifactId>testsupport-common</artifactId>
             <version>${version}</version>

Modified: geronimo/server/trunk/framework/modules/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/pom.xml?rev=836317&r1=836316&r2=836317&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/pom.xml (original)
+++ geronimo/server/trunk/framework/modules/pom.xml Sun Nov 15 02:25:47 2009
@@ -135,6 +135,22 @@
                     </instructions>
                   </configuration>
                 </plugin>
+                <plugin>
+                    <groupId>org.apache.geronimo.buildsupport</groupId>
+                    <artifactId>geronimo-osgi-plugin</artifactId>
+                    <configuration> 
+                        <failOnError>false</failOnError>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>verify-manifest</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>verify-manifest</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
             </plugins>
         </pluginManagement>
         <plugins>
@@ -142,6 +158,10 @@
               <groupId>org.apache.felix</groupId>
               <artifactId>maven-bundle-plugin</artifactId>
             </plugin>
+            <plugin>
+              <groupId>org.apache.geronimo.buildsupport</groupId>
+              <artifactId>geronimo-osgi-plugin</artifactId>
+            </plugin>
         </plugins>
     </build>
 

Modified: geronimo/server/trunk/framework/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/pom.xml?rev=836317&r1=836316&r2=836317&view=diff
==============================================================================
--- geronimo/server/trunk/framework/pom.xml (original)
+++ geronimo/server/trunk/framework/pom.xml Sun Nov 15 02:25:47 2009
@@ -121,22 +121,6 @@
                 <artifactId>pax-url-mvn</artifactId>
                 <version>1.1.2</version>
             </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.logging</groupId>
-                <artifactId>pax-logging-api</artifactId>
-                <version>${pax.logging.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.logging</groupId>
-                <artifactId>pax-logging-service</artifactId>
-                <version>${pax.logging.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>log4j</groupId>
-                        <artifactId>log4j</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
 
             <!-- overridden dependencies -->
             <!--<dependency>-->
@@ -178,26 +162,6 @@
                 <artifactId>asm-commons</artifactId>
                 <version>3.1_1-SNAPSHOT</version>
             </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-api</artifactId>
-                <version>1.5.6</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-log4j12</artifactId>
-                <version>1.5.6</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>jcl-over-slf4j</artifactId>
-                <version>1.5.6</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>jul-to-slf4j</artifactId>
-                <version>1.5.6</version>
-            </dependency>
             <!--<dependency>-->
                 <!--<groupId>org.apache.geronimo.bundles</groupId>-->
                 <!--<artifactId>plexus-archiver</artifactId>-->
@@ -247,11 +211,6 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.servicemix.bundles</groupId>
-                <artifactId>org.apache.servicemix.bundles.cglib</artifactId>
-                <version>2.1_3_3-SNAPSHOT</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.bundles</groupId>
                 <artifactId>org.apache.servicemix.bundles.jaxb-impl</artifactId>
                 <version>2.1.6_1</version>
                 <exclusions>
@@ -285,26 +244,9 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.servicemix.bundles</groupId>
-                <artifactId>org.apache.servicemix.bundles.xmlbeans</artifactId>
-                <version>2.4.0_2</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>javax.xml.stream</groupId>
-                        <artifactId>stax-api</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>stax</groupId>
-                        <artifactId>stax-api</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.bundles</groupId>
                 <artifactId>org.apache.servicemix.bundles.xmlresolver</artifactId>
                 <version>1.2_2-SNAPSHOT</version>
             </dependency>
-
-
             <dependency>
                 <groupId>org.apache.servicemix.bundles</groupId>
                 <artifactId>org.apache.servicemix.bundles.xpp3</artifactId>
@@ -427,6 +369,7 @@
             </activation>
 
             <modules>
+                <module>bundles</module>
                 <module>buildsupport</module>
                 <module>modules</module>
             </modules>



Mime
View raw message