summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin/pom.xml77
-rw-r--r--sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleMojo.java184
-rw-r--r--sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleUtil.java244
-rw-r--r--sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/TuscanyBundlePluginMojo.java505
4 files changed, 0 insertions, 1010 deletions
diff --git a/sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin/pom.xml b/sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin/pom.xml
deleted file mode 100644
index cfa01cb865..0000000000
--- a/sca-java-1.x/tags/1.5.1-RC3/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/sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleMojo.java b/sca-java-1.x/tags/1.5.1-RC3/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/sca-java-1.x/tags/1.5.1-RC3/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/sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleUtil.java b/sca-java-1.x/tags/1.5.1-RC3/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/sca-java-1.x/tags/1.5.1-RC3/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/sca-java-1.x/tags/1.5.1-RC3/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/TuscanyBundlePluginMojo.java b/sca-java-1.x/tags/1.5.1-RC3/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/sca-java-1.x/tags/1.5.1-RC3/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('\"');
- }
- }
- }
-}