diff options
Diffstat (limited to 'tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin')
4 files changed, 0 insertions, 1010 deletions
diff --git a/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/pom.xml b/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/pom.xml deleted file mode 100644 index cfa01cb865..0000000000 --- a/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ -<?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> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-sca-maven-tools</artifactId> - <version>1.5.1</version> - <relativePath>../pom.xml</relativePath> - </parent> - <artifactId>tuscany-maven-bundle-plugin</artifactId> - <packaging>maven-plugin</packaging> - <name>Apache Tuscany SCA Maven OSGi Bundle Plugin</name> - - <dependencies> - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-plugin-api</artifactId> - <version>2.0.7</version> - </dependency> - - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-project</artifactId> - <version>2.0.7</version> - </dependency> - - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-settings</artifactId> - <version>2.0.7</version> - </dependency> - - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-artifact</artifactId> - <version>2.0.7</version> - </dependency> - - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-model</artifactId> - <version>2.0.7</version> - </dependency> - - <dependency> - <groupId>org.apache.maven.shared</groupId> - <artifactId>maven-dependency-tree</artifactId> - <version>1.1</version> - </dependency> - - <dependency> - <groupId>org.apache.felix</groupId> - <artifactId>maven-bundle-plugin</artifactId> - <version>1.4.3</version> - </dependency> - - - </dependencies> -</project> diff --git a/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleMojo.java b/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleMojo.java deleted file mode 100644 index 5fbd3008d2..0000000000 --- a/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleMojo.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * 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.tuscany.tools.sca.tuscany.bundle.plugin; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.jar.Manifest; - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.logging.Log; -import org.apache.maven.project.MavenProject; - -/** - * @version $Rev$ $Date$ - * @goal build - * @phase process-sources - * @requiresDependencyResolution test - * @description Build a virtual bundle for 3rd party dependencies - */ -public class LibraryBundleMojo extends AbstractMojo { - /** - * The project to create a build for. - * - * @parameter expression="${project}" - * @required - * @readonly - */ - private MavenProject project; - - /** - * The basedir of the project. - * - * @parameter expression="${basedir}" - * @required @readonly - */ - protected File basedir; - - /** - * Used to look up Artifacts in the remote repository. - * - * @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}" - * @required - * @readonly - */ - protected org.apache.maven.artifact.factory.ArtifactFactory factory; - - /** - * Used to look up Artifacts in the remote repository. - * - * @parameter expression="${component.org.apache.maven.artifact.resolver.ArtifactResolver}" - * @required - * @readonly - */ - protected org.apache.maven.artifact.resolver.ArtifactResolver resolver; - - /** - * Location of the local repository. - * - * @parameter expression="${localRepository}" - * @readonly - * @required - */ - protected org.apache.maven.artifact.repository.ArtifactRepository local; - - /** - * List of Remote Repositories used by the resolver - * - * @parameter expression="${project.remoteArtifactRepositories}" - * @readonly - * @required - */ - protected java.util.List remoteRepos; - - /** - * @parameter - */ - protected boolean copyJars = false; - - public void execute() throws MojoExecutionException { - if (project.getPackaging().equals("pom")) { - return; - } - - Log log = getLog(); - List<File> jarFiles = new ArrayList<File>(); - for (Object o : project.getArtifacts()) { - Artifact a = (Artifact)o; - if (!(Artifact.SCOPE_COMPILE.equals(a.getScope()) || Artifact.SCOPE_RUNTIME.equals(a.getScope()))) { - if (log.isDebugEnabled()) { - log.debug("Skipping artifact: " + a); - } - continue; - } - if (log.isDebugEnabled()) { - log.debug("Artifact: " + a); - } - String bundleName = null; - try { - bundleName = LibraryBundleUtil.getBundleName(a.getFile()); - } catch (IOException e) { - throw new MojoExecutionException(e.getMessage(), e); - } - if (bundleName == null) { - if (log.isDebugEnabled()) { - log.debug("Adding non-OSGi jar: " + a); - } - jarFiles.add(a.getFile()); - } - } - - try { - String version = project.getVersion(); - if (version.endsWith(Artifact.SNAPSHOT_VERSION)) { - version = version.substring(0, version.length() - Artifact.SNAPSHOT_VERSION.length() - 1); - } - - Manifest mf = LibraryBundleUtil.libraryManifest(jarFiles, project.getName(), version, copyJars); - File file = new File(project.getBasedir(), "META-INF"); - file.mkdir(); - file= new File(file, "MANIFEST.MF"); - if (log.isDebugEnabled()) { - log.debug("Generating " + file); - } - - FileOutputStream fos = new FileOutputStream(file); - mf.write(fos); - fos.close(); - - if (copyJars) { - File lib = new File(project.getBasedir(), "lib"); - if (lib.isDirectory()) { - for (File c : lib.listFiles()) { - c.delete(); - } - } - lib.mkdir(); - byte[] buf = new byte[4096]; - for (File jar : jarFiles) { - File jarFile = new File(lib, jar.getName()); - if (log.isDebugEnabled()) { - log.debug("Copying " + jar + " to " + jarFile); - } - FileInputStream in = new FileInputStream(jar); - FileOutputStream out = new FileOutputStream(jarFile); - int len = 0; - while (len > 0) { - len = in.read(buf); - if (len > 0) { - out.write(buf, 0, len); - } - } - in.close(); - out.close(); - } - } - } catch (Exception e) { - throw new MojoExecutionException(e.getMessage(), e); - } - - } - -} diff --git a/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleUtil.java b/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleUtil.java deleted file mode 100644 index ed4ac63533..0000000000 --- a/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleUtil.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * 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.tuscany.tools.sca.tuscany.bundle.plugin; - -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.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.net.URL; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.jar.Attributes; -import java.util.jar.JarFile; -import java.util.jar.JarOutputStream; -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.osgi.framework.Bundle; - -/** - * Common functions and constants used by the admin components. - * - * @version $Rev$ $Date$ - */ -public final class LibraryBundleUtil { - - private static final String LAUNCHER_EQUINOX_LIBRARIES = "org.apache.tuscany.sca.node.launcher.equinox.libraries"; - - static File file(URL url) { - if (url == null || !url.getProtocol().equals("file")) { - return null; - } else { - String filename = url.getFile().replace('/', File.separatorChar); - int pos = 0; - while ((pos = filename.indexOf('%', pos)) >= 0) { - if (pos + 2 < filename.length()) { - String hexStr = filename.substring(pos + 1, pos + 3); - char ch = (char)Integer.parseInt(hexStr, 16); - filename = filename.substring(0, pos) + ch + filename.substring(pos + 3); - } - } - return new File(filename); - } - } - - static Pattern pattern = Pattern.compile("-([0-9.]+)"); - - private static String version(String jarFile) { - Matcher matcher = pattern.matcher(jarFile); - String version = "1.0.0"; - if (matcher.find()) { - version = matcher.group(); - if (version.endsWith(".")) { - version = version.substring(1, version.length() - 1); - } else { - version = version.substring(1); - } - } - return version; - } - - private static void addPackages(File jarFile, Set<String> packages) throws IOException { - String version = ";version=" + version(jarFile.getPath()); - 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) { - String pkg = entryName.substring(0, entryName.lastIndexOf("/")).replace('/', '.') + version; - packages.add(pkg); - } - } - is.close(); - } - - static Manifest libraryManifest(List<File> jarFiles, String name, String version, boolean copyJars) - throws IllegalStateException { - try { - - // List exported packages and bundle classpath entries - StringBuffer classpath = new StringBuffer(); - StringBuffer exports = new StringBuffer(); - StringBuffer imports = new StringBuffer(); - Set<String> packages = new HashSet<String>(); - for (File jarFile : jarFiles) { - addPackages(jarFile, packages); - if (copyJars) { - classpath.append("\"lib/"); - classpath.append(jarFile.getName()); - classpath.append("\","); - } else { - classpath.append("\"external:"); - classpath.append(jarFile.getPath().replace(File.separatorChar, '/')); - classpath.append("\","); - } - } - - Set<String> importPackages = new HashSet<String>(); - for (String pkg : packages) { - exports.append(pkg); - exports.append(','); - - String importPackage = pkg; - int index = pkg.indexOf(';'); - if (index != -1) { - importPackage = pkg.substring(0, index); - } - if (!importPackages.contains(importPackage)) { - imports.append(importPackage); - imports.append(','); - importPackages.add(importPackage); - } - } - - // 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, LAUNCHER_EQUINOX_LIBRARIES); - attributes.putValue(BUNDLE_NAME, name); - attributes.putValue(BUNDLE_VERSION, version); - attributes.putValue(EXPORT_PACKAGE, exports.substring(0, exports.length() - 1)); - attributes.putValue(IMPORT_PACKAGE, imports.substring(0, imports.length() - 1)); - attributes.putValue(BUNDLE_CLASSPATH, classpath.substring(0, classpath.length() - 1)); - attributes.putValue(DYNAMICIMPORT_PACKAGE, "*"); - - return manifest; - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - static String dump(Manifest mf) throws IOException { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - mf.write(bos); - return new String(bos.toByteArray()); - } - - static byte[] generateBundle(Manifest mf) throws IOException { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - JarOutputStream jos = new JarOutputStream(bos, mf); - jos.close(); - return bos.toByteArray(); - } - - /** - * Returns the name of a bundle, or null if the given file is not a bundle. - * - * @param file - * @return - * @throws IOException - */ - static String getBundleName(File file) throws IOException { - if (!file.exists()) { - return null; - } - String bundleName = null; - if (file.isDirectory()) { - File mf = new File(file, "META-INF/MANIFEST.MF"); - 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; - } - - public static String string(Bundle b, boolean verbose) { - StringBuffer sb = new StringBuffer(); - sb.append(b.getBundleId()).append(" ").append(b.getSymbolicName()); - int s = b.getState(); - if ((s & Bundle.UNINSTALLED) != 0) { - sb.append(" UNINSTALLED"); - } - if ((s & Bundle.INSTALLED) != 0) { - sb.append(" INSTALLED"); - } - if ((s & Bundle.RESOLVED) != 0) { - sb.append(" RESOLVED"); - } - if ((s & Bundle.STARTING) != 0) { - sb.append(" STARTING"); - } - if ((s & Bundle.STOPPING) != 0) { - sb.append(" STOPPING"); - } - if ((s & Bundle.ACTIVE) != 0) { - sb.append(" ACTIVE"); - } - - if (verbose) { - sb.append(" ").append(b.getLocation()); - sb.append(" ").append(b.getHeaders()); - } - return sb.toString(); - } -} diff --git a/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/TuscanyBundlePluginMojo.java b/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/TuscanyBundlePluginMojo.java deleted file mode 100644 index 79b0db4223..0000000000 --- a/tags/java/sca/1.5.1-RC1/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/TuscanyBundlePluginMojo.java +++ /dev/null @@ -1,505 +0,0 @@ -/* - * 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.tuscany.tools.sca.tuscany.bundle.plugin; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.lang.reflect.Field; -import java.util.Collection; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.jar.Attributes; -import java.util.jar.JarInputStream; -import java.util.jar.JarOutputStream; -import java.util.jar.Manifest; -import java.util.zip.ZipEntry; - -import org.apache.felix.bundleplugin.BundleAllPlugin; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.metadata.ArtifactMetadataSource; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactCollector; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolver; -import org.apache.maven.artifact.versioning.OverConstrainedVersionException; -import org.apache.maven.artifact.versioning.VersionRange; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.MavenProjectBuilder; -import org.apache.maven.project.ProjectBuildingException; -import org.apache.maven.project.artifact.InvalidDependencyVersionException; -import org.apache.maven.shared.dependency.tree.DependencyTree; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; -import org.apache.maven.shared.osgi.Maven2OsgiConverter; -import org.osgi.framework.Version; - -import aQute.lib.header.OSGiHeader; - -/** - * @version $$ - * @goal execute - * @phase compile - * @requiresDependencyResolution test - * @description Generate versioned OSGi bundles corresponding to Tuscany modules and all 3rd party dependencies - */ -public class TuscanyBundlePluginMojo extends BundleAllPlugin { - /** - * The maven project - * - * @parameter expression="${project}" - * @required - */ - private MavenProject project; - - /** - * Directory containing pom. - * - * @parameter expression="${basedir}" - * @required - */ - private File baseDir; - - /** - * Build directory for project - * - * @parameter expression="${project.build.directory}" - * @required - */ - private String buildDirectory; - - /** - * Output directory where bundles are generated. - * - * @parameter expression="${project.build.outputDirectory}" - * @required - */ - private File outputDirectory; - - /** - * Artifact resolver - * - * @component - */ - private ArtifactResolver artifactResolver; - - /** - * Artifact factory - * - * @component - */ - private ArtifactFactory artifactFactory; - - /** - * @component - */ - private ArtifactMetadataSource artifactMetadataSource; - - /** - * Dependency tree builder - * - * @component - */ - private DependencyTreeBuilder dependencyTreeBuilder; - - /** - * @component - */ - private ArtifactCollector collector; - - /** - * @component - */ - private MavenProjectBuilder mavenProjectBuilder; - - /** - * The local repository - * - * @parameter expression="${localRepository}" - * @required - */ - private ArtifactRepository localRepository; - - /** - * The remote repositories - * - * @parameter expression="${project.remoteArtifactRepositories}" - */ - private List remoteRepositories; - - /** - * @component - */ - private Maven2OsgiConverter maven2OsgiConverter; - - private static final HashSet<String> dependenciesToIgnore = new HashSet<String>(); - private static final HashSet<String> importDirectives = new HashSet<String>(); - private static final HashSet<String> exportDirectives = new HashSet<String>(); - private static final Hashtable<String, String> privatePackages = new Hashtable<String, String>(); - private static final Hashtable<String, String> dynamicImports = new Hashtable<String, String>(); - - static { - importDirectives.add("resolution"); - - exportDirectives.add("uses"); - exportDirectives.add("mandatory"); - exportDirectives.add("include"); - exportDirectives.add("exclude"); - - dependenciesToIgnore.add("xml-apis:xml-apis"); - dependenciesToIgnore.add("stax:stax-api"); - - - // Comma separated list of packages - privatePackages.put("org.apache.woden:woden", "javax.xml.namespace"); - privatePackages.put("org.apache.xmlbeans:xmlbeans", "org.w3c.dom"); - privatePackages.put("org.apache.axis2:axis2-adb", "org.apache.axis2.util"); - privatePackages.put("org.apache.axis2:addressing", "org.apache.axis2.addressing"); - privatePackages.put("org.apache.axis2:axis2-kernel", "org.apache.axis2.wsdl"); - privatePackages.put("org.apache.bsf:bsf-all", "org.mozilla.javascript"); - privatePackages.put("org.apache.axis2:axis2-codegen", "org.apache.axis2.wsdl,org.apache.axis2.wsdl.util"); - - dynamicImports.put("org.apache.ws.commons.axiom:axiom-api", "org.apache.axiom.om.impl.*,org.apache.axiom.soap.impl.*"); - dynamicImports.put("org.apache.bsf:bsf-all", "org.mozilla.*"); - dynamicImports.put("org.apache.santuario:xmlsec", "org.apache.ws.security.*"); - } - - - @SuppressWarnings("unchecked") - public void execute() throws MojoExecutionException { - try { - - setBasedir(baseDir); - setBuildDirectory(buildDirectory); - setOutputDirectory(outputDirectory); - setMaven2OsgiConverter(maven2OsgiConverter); - try { - Field importField = this.getClass().getSuperclass().getDeclaredField("wrapImportPackage"); - importField.setAccessible(true); - importField.set(this, "*;resolution:=optional"); - } catch (Exception e2) { - e2.printStackTrace(); - getLog().error("Could not set import instructions"); - } - - - DependencyTree dependencyTree = dependencyTreeBuilder.buildDependencyTree(project, - localRepository, artifactFactory, - artifactMetadataSource, collector ); - - Hashtable<String, String> duplicateWarnings = new Hashtable<String, String>(); - Hashtable<String, Artifact> artifactsToBundle = new Hashtable<String, Artifact>(); - - for (Object a : dependencyTree.getArtifacts()) { - Artifact artifact = (Artifact)a; - - if (project.getArtifactId().equals(artifact.getArtifactId()) && project.getGroupId().equals(artifact.getGroupId())) - continue; - - if (Artifact.SCOPE_SYSTEM.equals(artifact.getScope())||Artifact.SCOPE_TEST.equals(artifact.getScope())) - continue; - - String id = artifact.getGroupId() + ":" + artifact.getArtifactId(); - if (dependenciesToIgnore.contains(id)) - continue; - - Artifact old = artifactsToBundle.get(id); - if (old != null && !old.getVersion().equals(artifact.getVersion())) { - String oldVersion = old.getVersion(); - String thisVersion = artifact.getVersion(); - if (!thisVersion.equals(duplicateWarnings.get(oldVersion))&&!oldVersion.equals(duplicateWarnings.get(thisVersion))) { - getLog().warn("Multiple versions of artifacts : " + old + ", " + artifact); - duplicateWarnings.put(oldVersion, thisVersion); - } - - } - - VersionRange versionRange = artifact.getVersionRange(); - if (versionRange == null) - versionRange = VersionRange.createFromVersion(artifact.getVersion()); - - Artifact dependencyArtifact = artifactFactory.createDependencyArtifact(artifact.getGroupId(), - artifact.getArtifactId(), - versionRange, - artifact.getType(), - artifact.getClassifier(), - artifact.getScope()); - - try { - if (old != null && old.getSelectedVersion().compareTo(artifact.getSelectedVersion()) >= 0) - continue; - else - artifactsToBundle.remove(id); - } catch (OverConstrainedVersionException e1) { - getLog().warn("Could not process maven version for artifact " + artifact); - continue; - } - - try { - artifactResolver.resolve(dependencyArtifact, remoteRepositories, localRepository); - } catch (ArtifactResolutionException e) { - getLog().warn("Artifact " + artifact + " could not be resolved."); - } catch (ArtifactNotFoundException e) { - getLog().warn("Artifact " + artifact + " could not be found."); - } - - artifact.setFile(dependencyArtifact.getFile()); - - artifactsToBundle.put(id, artifact); - - } - - bundleArtifacts(artifactsToBundle.values()); - - - } catch (DependencyTreeBuilderException e) { - throw new MojoExecutionException("Could not build dependency tree", e); - } catch (ProjectBuildingException e) { - throw new MojoExecutionException("Could not build project for artifact", e); - } catch (InvalidDependencyVersionException e) { - throw new MojoExecutionException("Invalid dependency version", e); - } catch (IOException e) { - throw new MojoExecutionException("Could not build bundle manifest", e); - } - } - - - private void bundleArtifacts(Collection<Artifact> artifacts) throws ProjectBuildingException, - InvalidDependencyVersionException, MojoExecutionException, IOException { - - for (Artifact artifact : artifacts) { - - artifact.setFile(getFile( artifact )); - - MavenProject bundleProject; - try { - bundleProject = - mavenProjectBuilder.buildFromRepository(artifact, remoteRepositories, localRepository, true); - } catch (Exception e) { - getLog().error(e); - continue; - } - bundleProject.setArtifact(artifact); - - if ( bundleProject.getDependencyArtifacts() == null ) { - bundleProject.setDependencyArtifacts(bundleProject.createArtifacts(artifactFactory, null, null ) ); - } - - File outputFile = getOutputFile(bundleProject.getArtifact()); - if (outputFile.exists()) - outputFile.delete(); - bundle(bundleProject); - postProcessBundle(artifact, outputFile); - - } - } - - - @SuppressWarnings("unchecked") - private void postProcessBundle(Artifact artifact, File bundleFile) throws IOException { - - if (!bundleFile.exists()) - return; - - File processedFile = bundleFile; - boolean retainManifestEntries = false; - if (!artifact.getGroupId().equals("org.apache.tuscany.sca")) { - // For pre-bundled 3rd party bundles, retain all OSGi manifest entries except Require-Bundle - Manifest manifest = getManifest(artifact.getFile()); - if (manifest != null && manifest.getMainAttributes() != null && - manifest.getMainAttributes().getValue("Bundle-SymbolicName") != null) { - retainManifestEntries = true; - } - } - - Manifest manifest = getManifest(bundleFile); - Attributes attributes = manifest.getMainAttributes(); - - if (attributes == null) { - return; - } - - String artifactId = artifact.getGroupId() + ":" + artifact.getArtifactId(); - - String bundleSymName = (String)attributes.getValue("Bundle-SymbolicName"); - if (!bundleSymName.startsWith("org.apache.tuscany.sca")) { - bundleSymName = "org.apache.tuscany.sca.3rdparty." + bundleSymName; - attributes.putValue("Bundle-SymbolicName", bundleSymName); - - processedFile = new File(bundleFile.getParent(), "org.apache.tuscany.sca.3rdparty." + bundleFile.getName()); - } - - String imports = (String)attributes.getValue("Import-Package"); - String exports = (String)attributes.getValue("Export-Package"); - - // For EMF jars - if (attributes.getValue("Require-Bundle") != null) { - attributes.remove(new Attributes.Name("Require-Bundle")); - attributes.putValue("DynamicImport-Package", "*"); - attributes.remove(new Attributes.Name("Eclipse-LazyStart")); - } - - if (!retainManifestEntries && imports != null) { - StringBuilder newImportBuf = new StringBuilder(); - Map importMap = OSGiHeader.parseHeader(imports); - for (Object pkg : importMap.keySet()) { - - if (isPrivatePackage(artifactId, (String)pkg)) { - continue; - } - - Map importAttr = (Map)importMap.get(pkg); - String version = (String)importAttr.get("version"); - if (version != null && version.indexOf(',') == -1) { - if (((String)pkg).startsWith("org.osgi")) { - // Leave version as is - for OSGi packages, assume backward compatibility - } - else if (!version.matches(".*\\..*\\.")) { - Version curVersion = new Version(version); - Version nextVersion = new Version(curVersion.getMajor(), curVersion.getMinor()+1, 0); - version = '[' + version + ',' + nextVersion + ')'; - } - else - version = '[' + version + ',' + version + ']'; - importAttr.put("version", version); - } - updateManifestAttribute((String)pkg, importAttr, importDirectives, newImportBuf); - - } - attributes.putValue("Import-Package", newImportBuf.toString()); - } - - if (!retainManifestEntries && exports != null) { - StringBuilder newExportBuf = new StringBuilder(); - Map exportMap = OSGiHeader.parseHeader(exports); - - for (Object value : exportMap.keySet()) { - String pkg = (String)value; - if (!isPrivatePackage(artifactId, pkg)) { - Map exportAttr = (Map)exportMap.get(pkg); - updateManifestAttribute((String)pkg, exportAttr, exportDirectives, newExportBuf); - } - } - if (newExportBuf.length() > 0) - attributes.putValue("Export-Package", newExportBuf.toString()); - else - attributes.remove(new Attributes.Name("Export-Package")); - } - - String dynImport = dynamicImports.get(artifactId); - if (dynImport != null) - attributes.putValue("DynamicImport-Package", dynImport); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - JarOutputStream jarOut = new JarOutputStream(out, manifest); - copyJar(bundleFile, jarOut); - jarOut.close(); - out.close(); - bundleFile.delete(); - FileOutputStream fileOut = new FileOutputStream(processedFile); - fileOut.write(out.toByteArray()); - fileOut.close(); - - } - - - private void copyJar(File file, JarOutputStream jarOut) throws IOException { - - try { - JarInputStream jarIn = new JarInputStream(new FileInputStream(file)); - ZipEntry ze; - byte[] readBuf = new byte[1000]; - int bytesRead; - while ((ze = jarIn.getNextEntry()) != null) { - if (ze.getName().equals("META-INF/MANIFEST.MF")) - continue; - jarOut.putNextEntry(ze); - while ((bytesRead = jarIn.read(readBuf)) > 0) { - jarOut.write(readBuf, 0, bytesRead); - } - } - jarIn.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private Manifest getManifest(File jar) { - try { - JarInputStream jarIn = new JarInputStream(new FileInputStream(jar)); - Manifest manifest = jarIn.getManifest(); - if (manifest == null) { - ZipEntry ze; - while ((ze = jarIn.getNextEntry()) != null) { - if (ze.getName().equals("META-INF/MANIFEST.MF")) - break; - } - if (ze != null) { - byte[] bytes = new byte[(int)ze.getSize()]; - jarIn.read(bytes); - manifest = new Manifest(new ByteArrayInputStream(bytes)); - } - } - jarIn.close(); - return manifest; - } catch (IOException e) { - return null; - } - } - - private boolean isPrivatePackage(String artifactId, String pkg) { - String privatePkgs = privatePackages.get(artifactId); - if (privatePkgs != null) { - String[] pkgs = privatePkgs.split(","); - for (int i = 0; i < pkgs.length; i++) { - if (pkgs[i].trim().equals(pkg)) - return true; - } - } - return false; - } - - - private void updateManifestAttribute(String pkg, Map newMap, Set<String> directives, StringBuilder newAttrBuffer) { - if (newAttrBuffer.length() != 0) newAttrBuffer.append(','); - newAttrBuffer.append(pkg); - if (newMap.size() > 0) { - for (Object attrName : newMap.keySet()) { - newAttrBuffer.append(';'); - newAttrBuffer.append(attrName); - if (directives.contains(attrName)) - newAttrBuffer.append(":="); - else - newAttrBuffer.append('='); - newAttrBuffer.append('\"'); - newAttrBuffer.append(newMap.get(attrName)); - newAttrBuffer.append('\"'); - } - } - } -} |