Build OSGi version of AspectJ Tools that doesn't conflict

An OSGi version of AspectJ Tools is already available from the Spring Bundle Repository. Unfortunately, some of the exports of that bundle may conflict with your OSGi container, such as Apache Felix. In this case, you may need to re-wrap the bundle with the conflicting exports disabled. Additionally, versions newer than v1.6.6 contain a change that can cause an error when attempting to load certain types of Aspects with Spring annotations in an OSGi environment. v1.6.6 and below do not appear to have this issue. Here are instructions for re-wrapping AspectJ Tools v1.6.6 with those exports commented out.

The first thing you're going to need to do is set up your Maven project file. Below is my pom.xml file:

<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>
  <groupId>org.aspectj</groupId>
  <artifactId>net.jasonday.org.aspectj.tools</artifactId>
  
  <!--
    There is some new bug in 1.6.7+ versions of AspectJ
    that causes an error when attempting to load certain
    types of Aspects with Spring annotations in an OSGi
    environment.  1.6.6 and below do not appear to have
    this issue.
    http://forum.springsource.org/showthread.php?t=95314
   -->
  <version>1.6.6</version>
  <packaging>bundle</packaging>
  <name>AspectJ Tools OSGi bundle</name>
  <description>
    AspectJ Tools OSGi bundle
  </description>
  
  <!-- Enforce UTF-8 encoding -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <!-- Based on the existing AspectJ Tools product -->
  <dependencies>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjtools</artifactId>
      <version>${pom.version}</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- Set the OSGi Bundle preferences -->
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Import-Package>
              javax.swing,
              javax.swing.border,
              javax.swing.event,
              javax.swing.filechooser,
              javax.swing.text,
              javax.swing.tree,
              javax.xml.parsers,
              org.apache.commons.logging;version="[1.1.1, 2.0.0)";resolution:="optional",
              org.w3c.dom,
              org.xml.sax,
              org.xml.sax.ext,
              org.xml.sax.helpers,
              !*
            </Import-Package>
            <Embed-Dependency>
              aspectjtools;inline=true
            </Embed-Dependency>
            <Export-Package>
              about_files; version=${pom.version},
              ant_tasks; version=${pom.version},
              org.aspectj; version=${pom.version},
              org.aspectj.ajde; version=${pom.version},
              org.aspectj.ajde.core; version=${pom.version},
              org.aspectj.ajde.core.internal; version=${pom.version},
              org.aspectj.ajde.internal; version=${pom.version},
              org.aspectj.ajde.resources.actions; version=${pom.version},
              org.aspectj.ajde.resources.structure; version=${pom.version},
              org.aspectj.ajde.ui; version=${pom.version},
              org.aspectj.ajde.ui.internal; version=${pom.version},
              org.aspectj.ajde.ui.javaoptions; version=${pom.version},
              org.aspectj.ajde.ui.swing; version=${pom.version},
              org.aspectj.ajdt.ajc; version=${pom.version},
              org.aspectj.ajdt.compiler; version=${pom.version},
              org.aspectj.ajdt.core; version=${pom.version},
              org.aspectj.ajdt.core.dom; version=${pom.version},
              org.aspectj.ajdt.internal.compiler; version=${pom.version},
              org.aspectj.ajdt.internal.compiler.ast; version=${pom.version},
              org.aspectj.ajdt.internal.compiler.lookup; version=${pom.version},
              org.aspectj.ajdt.internal.compiler.parser; version=${pom.version},
              org.aspectj.ajdt.internal.compiler.problem; version=${pom.version},
              org.aspectj.ajdt.internal.core.builder; version=${pom.version},
              org.aspectj.apache.bcel; version=${pom.version},
              org.aspectj.apache.bcel.classfile; version=${pom.version},
              org.aspectj.apache.bcel.classfile.annotation; version=${pom.version},
              org.aspectj.apache.bcel.generic; version=${pom.version},
              org.aspectj.apache.bcel.util; version=${pom.version},
              org.aspectj.asm; version=${pom.version},
              org.aspectj.asm.internal; version=${pom.version},
              org.aspectj.bridge; version=${pom.version},
              org.aspectj.bridge.context; version=${pom.version},
              org.aspectj.internal.lang.annotation; version=${pom.version},
              org.aspectj.internal.lang.reflect; version=${pom.version},
              org.aspectj.lang; version=${pom.version},
              org.aspectj.lang.annotation; version=${pom.version},
              org.aspectj.lang.internal.lang; version=${pom.version},
              org.aspectj.lang.reflect; version=${pom.version},
              org.aspectj.org.eclipse.jdt.core; version=${pom.version},
              org.aspectj.org.eclipse.jdt.core.compiler; version=${pom.version},
              org.aspectj.org.eclipse.jdt.core.dom; version=${pom.version},
              org.aspectj.org.eclipse.jdt.core.dom.rewrite; version=${pom.version},
              org.aspectj.org.eclipse.jdt.core.eval; version=${pom.version},
              org.aspectj.org.eclipse.jdt.core.formatter; version=${pom.version},
              org.aspectj.org.eclipse.jdt.core.jdom; version=${pom.version},
              org.aspectj.org.eclipse.jdt.core.search; version=${pom.version},
              org.aspectj.org.eclipse.jdt.core.util; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.codeassist; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.codeassist.complete; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.codeassist.impl; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.codeassist.select; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.ast; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.batch; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.classfmt; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.codegen; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.env; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.flow; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.impl; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.lookup; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.parser; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.parser.diagnose; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.problem; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.compiler.util; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.builder; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.dom.rewrite; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.eval; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.hierarchy; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.index; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.jdom; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.search; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.search.indexing; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.search.matching; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.search.processing; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.core.util; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.eval; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.formatter; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.formatter.align; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.formatter.comment; version=${pom.version},
              org.aspectj.org.eclipse.jdt.internal.formatter.old; version=${pom.version},
              org.aspectj.runtime; version=${pom.version},
              org.aspectj.runtime.internal; version=${pom.version},
              org.aspectj.runtime.internal.cflowstack; version=${pom.version},
              org.aspectj.runtime.reflect; version=${pom.version},
              org.aspectj.tools.ajbrowser; version=${pom.version},
              org.aspectj.tools.ajbrowser.core; version=${pom.version},
              org.aspectj.tools.ajbrowser.ui; version=${pom.version},
              org.aspectj.tools.ajbrowser.ui.swing; version=${pom.version},
              org.aspectj.tools.ajc; version=${pom.version},
              org.aspectj.tools.ajdoc; version=${pom.version},
              org.aspectj.tools.ant.taskdefs; version=${pom.version},
              org.aspectj.tools.ant.taskdefs.compilers; version=${pom.version},
              org.aspectj.util; version=${pom.version},
              org.aspectj.weaver; version=${pom.version},
              org.aspectj.weaver.ast; version=${pom.version},
              org.aspectj.weaver.bcel; version=${pom.version},
              org.aspectj.weaver.bcel.asm; version=${pom.version},
              org.aspectj.weaver.internal.tools; version=${pom.version},
              org.aspectj.weaver.loadtime; version=${pom.version},
              org.aspectj.weaver.loadtime.definition; version=${pom.version},
              org.aspectj.weaver.ltw; version=${pom.version},
              org.aspectj.weaver.model; version=${pom.version},
              org.aspectj.weaver.patterns; version=${pom.version},
              org.aspectj.weaver.reflect; version=${pom.version},
              org.aspectj.weaver.tools; version=${pom.version},
              org.eclipse.core.filesystem; version=${pom.version},
              org.eclipse.core.filesystem.provider; version=${pom.version},
              org.eclipse.core.internal.boot; version=${pom.version},
              org.eclipse.core.internal.content; version=${pom.version},
              org.eclipse.core.internal.dtree; version=${pom.version},
              org.eclipse.core.internal.events; version=${pom.version},
              org.eclipse.core.internal.filesystem; version=${pom.version},
              org.eclipse.core.internal.filesystem.local; version=${pom.version},
              org.eclipse.core.internal.jobs; version=${pom.version},
              org.eclipse.core.internal.localstore; version=${pom.version},
              org.eclipse.core.internal.preferences; version=${pom.version},
              org.eclipse.core.internal.preferences.exchange; version=${pom.version},
              org.eclipse.core.internal.preferences.legacy; version=${pom.version},
              org.eclipse.core.internal.properties; version=${pom.version},
              org.eclipse.core.internal.propertytester; version=${pom.version},
              org.eclipse.core.internal.refresh; version=${pom.version},
              org.eclipse.core.internal.registry; version=${pom.version},
              org.eclipse.core.internal.registry.osgi; version=${pom.version},
              org.eclipse.core.internal.registry.spi; version=${pom.version},
              org.eclipse.core.internal.resources; version=${pom.version},
              org.eclipse.core.internal.resources.mapping; version=${pom.version},
              org.eclipse.core.internal.runtime; version=${pom.version},
              org.eclipse.core.internal.utils; version=${pom.version},
              org.eclipse.core.internal.watson; version=${pom.version},
              org.eclipse.core.resources; version=${pom.version},
              org.eclipse.core.resources.ant; version=${pom.version},
              org.eclipse.core.resources.mapping; version=${pom.version},
              org.eclipse.core.resources.refresh; version=${pom.version},
              org.eclipse.core.resources.team; version=${pom.version},
              org.eclipse.core.runtime; version=${pom.version},
              org.eclipse.core.runtime.adaptor; version=${pom.version},
              org.eclipse.core.runtime.content; version=${pom.version},
              org.eclipse.core.runtime.dynamichelpers; version=${pom.version},
              org.eclipse.core.runtime.internal.adaptor; version=${pom.version},
              org.eclipse.core.runtime.internal.stats; version=${pom.version},
              org.eclipse.core.runtime.jobs; version=${pom.version},
              org.eclipse.core.runtime.preferences; version=${pom.version},
              org.eclipse.core.runtime.spi; version=${pom.version},
              org.eclipse.equinox.app; version=${pom.version},
              org.eclipse.equinox.internal.app; version=${pom.version},
              org.eclipse.text.edits; version=${pom.version},
              org.eclipse.text.undo; version=${pom.version},
              
              <!--
                Do not version the org.osgi packages or they may interfere with
                the actual installed version.  If you must, please version them
                appropriately (ie. A version below the framework version).
               -->
              <!--
              org.osgi.framework,
              org.osgi.service.packageadmin,
              org.osgi.service.startlevel,
              org.osgi.service.url,
              org.osgi.util.tracker,
              org.osgi.service.application,
              org.osgi.service.condpermadmin,
              org.osgi.service.permissionadmin,
              org.osgi.service.prefs,
              testdata; version=${pom.version},
               -->
              !*
            </Export-Package>
            <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

That's it that you really need to do. Now, just package it up using Maven and it's ready to go.