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.