[[top]]
= AspectJ Documentation and Resources

AspectJ^TM^ is a seamless aspect-oriented extension to Java^TM^. The compiler and development tools are available under
an open-source license, require Java 8 to run, and produce code that runs in JDK 1.3 and later VM's. For the latest
materials, see https://eclipse.org/aspectj. Not all of these materials have been updated for AspectJ 5.

[cols=",",]
|===
|+++Section+++ |+++Contents+++

|xref:#documentation[Documentation]
|xref:faq/faq.adoc#faq[FAQ], xref:quickref/quick5.pdf[Quick Reference (AspectJ 5)],
xref:quickref/quick.pdf[Quick Reference (1.2.1)], xref:adk15notebook/index.adoc[AspectJ 5 Developer's Notebook],
xref:progguide/index.adoc[programming], xref:devguide/index.adoc[development] and
xref:pdguide/index.adoc[problem diagnosis] guides, link:runtime-api/index.html[runtime API],
link:weaver-api/index.html[weaver API] and link:examples[example code]

|xref:#distributions[Distributions]
|https://eclipse.org/aspectj[AspectJ] development environment support for https://eclipse.org/ajdt[Eclipse]

|xref:#resources[Other resources]
|https://eclipse.org/aspectj[AspectJ project], the bug https://bugs.eclipse.org/bugs[db], and mailing lists for
mailto:aspectj-users@eclipse.org[users] and mailto:aspectj-dev@eclipse.org[developers].

|xref:#paths[Learning paths] |for those new to AspectJ
|===

[[documentation]]
== AspectJ documentation

[width="100%",cols="50%,50%",options="header",]
|===
|Documentation
|Description

|xref:quickref/quick5.pdf[AspectJ 5 Quick Reference]
|Four-page quick reference for the AspectJ 5 language

|xref:quickref/quick.pdf[AspectJ Quick Reference]
|Two-page quick reference for the AspectJ language

a|AspectJ 5 Developer's Notebook

* xref:adk15notebook/index.adoc[HTML multi-page]
* xref:adk15notebook/adk15notebook.adoc[HTML single page]
* xref:adk15notebook/adk15notebook.pdf[PDF]
|Describes the changes to the AspectJ language and tools introduced in the AspectJ 5 Development Kit. These changes are
additive, and are not yet reflected in the programming guide or quick reference.

a|Programming Guide

* xref:progguide/index.adoc[HTML multi-page]
* xref:progguide/progguide.adoc[HTML single page]
* xref:progguide/progguide.pdf[PDF]
|Introduces AOP and the AspectJ language. xref:progguide/gettingstarted.adoc[Getting Started] describes basic semantics
and shows development- and production-time applications. xref:progguide/language.adoc[The AspectJ Language] describes
join points, pointcuts, advice, and introduction, all features new to AOP. xref:progguide/examples.adoc[Examples] walks
you through the examples included with the documentation, and there are two short chapters on useful
xref:progguide/idioms.adoc[Idioms] and a few xref:progguide/pitfalls.html[Pitfalls]. +
The appendices have reference information: the xref:progguide/quickreference.adoc[Quick Reference] summarizes AspectJ
syntax, the xref:progguide/semantics.adoc[Language Semantics] best describes AspectJ usage, and
xref:progguide/implementation.adoc[Implementation Notes] describes how the current version is limited to code the
compiler controls.

a|Development Environment Guide

* xref:devguide/index.adoc[HTML multi-page]
* xref:devguide/devguide.adoc[HTML single page]
* xref:devguide/devguide.pdf[PDF]
|Guide to the command-line compiler xref:devguide/ajc.adoc[ajc] and the xref:devguide/antsupport.adoc[Ant tasks] for
building AspectJ programs

a|Problem Diagnosis Guide

* xref:pdguide/index.adoc[HTML multi-page]
* xref:pdguide/pdguide.adoc[HTML single page]
* xref:pdguide/pdguide.pdf[PDF]
|Guide to various debugging features available, such as messages and trace to help you both solve problems with you own
programs and report bugs to the AspectJ team

|xref:runtime-api/index.html[AspectJ Runtime API]
|API documentation for AspectJ runtime classes. `JoinPoint` shows the state automatically available at each join point.
`ProceedingJoinPoint` explains how to `proceed(..)` to the intercepted join point from an around advice.

|xref:weaver-api/index.html[AspectJ Weaver API]
|API documentation for AspectJ weaver classes. This is a superset of the runtime API plus all the additional classes
used for byte code weaving, both during compilation from source code and binary weaving during post-compile and
load-time weaving.

|xref:faq/faq.adoc#faq[FAQ]
|Frequently asked questions about the AspectJ language, tools, and project

|xref:release/JavaVersionCompatibility.adoc[Java version compatibility]
|Compatibility matrix, explaining which AspectJ compiler version supports which Java language version and needs which
JDK to run

// AspectJ_JDK_Update: add new release to table
|Release notes |Release notes, describing new features, improvements, bugfixes per AspectJ version: +
 +
xref:release/README-1.9.22.adoc[1.9.22],
xref:release/README-1.9.21.adoc[1.9.21 / 1.9.21.1 / 1.9.21.2], xref:release/README-1.9.20.adoc[1.9.20 / 1.9.20.1],
xref:release/README-1.9.19.adoc[1.9.19], xref:release/README-1.9.9.adoc[1.9.9 / 1.9.9.1],
xref:release/README-1.9.8.adoc[1.9.8], xref:release/README-1.9.7.adoc[1.9.7],
xref:release/README-1.9.6.adoc[1.9.6], xref:release/README-1.9.5.adoc[1.9.5],
xref:release/README-1.9.4.adoc[1.9.4], xref:release/README-1.9.3.adoc[1.9.3],
xref:release/README-1.9.2.adoc[1.9.2], xref:release/README-1.9.1.adoc[1.9.1],
xref:release/README-1.9.0.adoc[1.9.0], xref:release/README-1.8.14.adoc[1.8.14],
xref:release/README-1.8.13.adoc[1.8.13], xref:release/README-1.8.12.adoc[1.8.12],
xref:release/README-1.8.11.adoc[1.8.11], xref:release/README-1.8.10.adoc[1.8.10],
xref:release/README-1.8.9.adoc[1.8.9], xref:release/README-1.8.8.adoc[1.8.8],
xref:release/README-1.8.7.adoc[1.8.7], xref:release/README-1.8.6.adoc[1.8.6],
xref:release/README-1.8.5.adoc[1.8.5], xref:release/README-1.8.4.adoc[1.8.4],
xref:release/README-1.8.3.adoc[1.8.3], xref:release/README-1.8.2.adoc[1.8.2],
xref:release/README-1.8.1.adoc[1.8.1], xref:release/README-1.8.0.adoc[1.8.0],
xref:release/README-1.7.4.adoc[1.7.4], xref:release/README-1.7.3.adoc[1.7.3],
xref:release/README-1.7.2.adoc[1.7.2], xref:release/README-1.7.1.adoc[1.7.1],
xref:release/README-1.7.0.adoc[1.7.0], xref:release/README-1.6.12.adoc[1.6.12],
xref:release/README-1.6.11.adoc[1.6.11], xref:release/README-1.6.10.adoc[1.6.10],
xref:release/README-1.6.9.adoc[1.6.9], xref:release/README-1.6.8.adoc[1.6.8],
xref:release/README-1.6.7.adoc[1.6.7], xref:release/README-1.6.6.adoc[1.6.6],
xref:release/README-1.6.5.adoc[1.6.5], xref:release/README-1.6.4.adoc[1.6.4],
xref:release/README-1.6.3.adoc[1.6.3], xref:release/README-1.6.2.adoc[1.6.2],
xref:release/README-1.6.1.adoc[1.6.1], xref:release/README-1.6.0.adoc[1.6.0],
xref:release/README-1.5.4.adoc[1.5.4], xref:release/README-1.5.3.adoc[1.5.3],
xref:release/README-1.5.2.adoc[1.5.2], xref:release/README-1.5.1.adoc[1.5.1],
xref:release/README-1.5.0.adoc[1.5.0], xref:release/README-1.2.1.adoc[1.2.1],
xref:release/README-1.2.adoc[1.2], xref:release/README-1.1.adoc[1.1].

|xref:release/changes.adoc[Changes] (historical)
|Changes between historical releases up to 1.6.0

|xref:release/porting.adoc[Porting guide] (historical)
|Porting guide for historical releases to 1.2

|link:examples[Examples]
|AspectJ code to demonstrate some language features and implement JavaBean properties, the Observer pattern, a tracing
library, and a game application where aspects handle display updating

a|AspectJ Design Overview

* xref:developer/index.adoc[HTML multi-page]
* xref:developer/design-overview.adoc[HTML single page]
* xref:developer/design-overview.pdf[PDF]
|Introductory information about AspectJ language design, developer guides, module structure
|===

[[distributions]]

== AspectJ distributions

[cols=",",options="header",]
|===
|Distributions
|Description

|https://eclipse.org/aspectj[AspectJ binary distribution]
|The AspectJ distribution contains a Java-based installer, binaries for the compiler, Ant taskdefs as well as the
documentation and examples.

|https://eclipse.org/aspectj[AspectJ source code]
|Source code for AspectJ is available under the open-source
https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt[Eclipse Public License v 2.0] license from the Git
repositories for the AspectJ project. See the xref:faq/faq.adoc#buildingsource[FAQ entry].

|https://eclipse.org/ajdt[AspectJ for Eclipse]
|AspectJ Development Environment support for Eclipse is available under Eclipse Public License v 1.0 from the
eclipse.org project site https://eclipse.org/ajdt
|===

[[resources]]

== Other AspectJ resources

[cols=",",options="header",]
|===
|Resources
|Description

|Mail lists
|AspectJ users discuss tips and best practices for writing AspectJ programs on aspectj-users@eclipse.org. AspectJ
developers discuss issues with developing the AspectJ tools on aspectj-dev@eclipse.org. To get occasional emails about
AspectJ releases and relevant events, subscribe to aspectj-announce@eclipse.org. To view list archives or subscribe to
the list, go to https://eclipse.org/aspectj[the AspectJ home page]. To find archived emails, use the Eclipse site
https://www.eclipse.org/search/search.cgi[search page].

|https://bugs.eclipse.org/bugs[Bug database]
|Use the Eclipse project's Bugzilla database to view and submit bugs against the AspectJ product components
https://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=Compiler[Compiler] (for the AspectJ compiler, ajc),
https://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=IDE[IDE] (for AJDE bugs),
https://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=Ant[Ant] (for the Ant tasks) and
https://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=Docs[Docs] (for the documentation).
Bugs all users should know about are
https://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&keywords=info[flagged with the "info" keyword].
See the xref:faq/faq.adoc#ajcbugs[FAQ entry] for instructions on submitting compiler bugs.
|===

[[paths]]
== Suggested learning paths for those new to AspectJ

To learn the AspectJ language, read the xref:progguide/index.adoc[Programming Guide], keeping the
xref:progguide/semantics.adoc[Semantics appendix] nearby as the best reference for AspectJ usage. Focus initially on the
join point model and pointcuts, concepts AOP adds to OOP. To read about how the link:examples[examples] work, see the
xref:progguide/examples.adoc[Examples] section in the xref:progguide/index.adoc[Programming Guide]. View and navigate
the crosscutting structure using https://eclipse.org/ajdt[AJDT].

To start using AspectJ with your own code, modify the example aspects to apply to your classes. As you learn, use the
compiler's `-Xlint` flags to catch some common mistakes. (Understand that the
xref:progguide/implementation.adoc[current implementation] is limited to code the compiler controls.)

To plan how to adopt AspectJ into a project, read the xref:progguide/index.adoc[Programming Guide] on development- and
production-time aspects and the FAQ entries for xref:faq/faq.adoc#howToStartUsing[How should I start using AspectJ?],
xref:faq/faq.adoc#adoption[Deciding to adopt AspectJ], the Development tools sections
(xref:faq/faq.adoc#integrateWithDevTools[How does AspectJ integrate with existing Java development tools?],
xref:faq/faq.adoc#devtools[Integrating AspectJ into your development environment],
xref:faq/faq.adoc#ltw[Load-time weaving]), and xref:faq/faq.adoc#opensource[AspectJ as open-source]).

Enjoy the language!

The AspectJ Team

'''''

[.small]#xref:#top[Top]#
