<html> 
<head>
  <title>AspectJ Documentation and Resources</title>
</head>
<body> 

<a name="top"></a>
<h1>AspectJ Documentation and Resources</h1>
<p/> 
    AspectJ <sup><small>tm</small></sup>
    is a seamless aspect-oriented extension to 
    Java<sup><small>tm</small></sup>.
    The compiler and development tools are available under 
    an open-source license, require Java 1.3 to run, and produce
    code that runs in JDK 1.1 and later VM's. 
    For the latest materials, see
    <a href="http://eclipse.org/aspectj">http://eclipse.org/aspectj</a>.
    Not all of these materials have been updated for AspectJ 5.
<p/>

<table>
    <tr><td><u>Section</u></td><td><u>Contents</u></td></tr>
    <tr><td><a href="#documentation">docs</a></td><td>
       <a href="faq.html">FAQ</a>, 
       <a href="quick5.pdf">Quick Reference (AspectJ 5)</a>,
       <a href="quick.pdf">Quick Reference (1.2.1)</a>, 
       <a href="adk15notebook/index.html">AspectJ 5 Developer's Notebook</a>,
       <a href="progguide/index.html">programming</a> and 
       <a href="devguide/index.html">development</a> guides, 
       <a href="runtime-api/index.html">API</a> and
       <a href="examples/">example code</a>.
	   </td></tr>
    <tr><td><a href="#distributions">distributions</a></td><td>  
        <a href="http://eclipse.org/aspectj">AspectJ</a>;
        development environment support for 
        <a href="http://eclipse.org/ajdt">Eclipse</a> 
        and
        <a href="https://jdeveloperaop.dev.java.net/">JDeveloper</a>. 
        </td></tr>
    <tr><td><a href="#resources">resources</a></td><td>
       <a href="http://aosd.net">aosd.net</a>;
       <a href="http://eclipse.org/aspectj">AspectJ project</a>
       the bug <a href="http://bugs.eclipse.org/bugs">db</a>,
       and mailing lists for 
       <a href="mailto:aspectj-users@eclipse.org">users</a> and
       <a href="mailto:aspectj-dev@eclipse.org">developers</a>.
	   </td></tr>
    <tr><td><a href="#paths">paths</a> </td><td>for those new to AspectJ
		</td></tr>
</table>
<p/>

<a name="documentation"></a>
<h3>AspectJ documentation</h3>
<table border="1">
<tr> <th>Documentation</th><th>Description</th> 
     </tr>


<tr> <td><a href="quick5.pdf"> AspectJ 5 Quick Reference</a>
     </td>
     <td>This is a four-page quick reference for the AspectJ 5 language. 
     </td> </tr>

<tr> <td><a href="quick.pdf"> AspectJ Quick Reference</a>
     </td>
     <td>This is a two-page quick reference for the AspectJ language. 
     </td> </tr>

<tr> <td><a href="adk15notebook/index.html">AspectJ 5 Developer's Notebook</a>
         (printable <a href="adk15notebook/printable.html">html</a>)
     </td>
     <td>This 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.</td>
     </tr>

<tr> <td><a href="progguide/index.html">Programming Guide</a>
         (printable <a href="progguide/printable.html">html</a>)
     </td>
     <td>This introduces AOP and the AspectJ language.  
      <a href="progguide/starting.html">Getting Started</a>
     describes basic semantics, and shows development- and production-time applications.
     <a href="progguide/language.html">The AspectJ Language</a>
     describes join points, pointcuts, advice, and introduction, all features new to AOP. 
     <a href="progguide/examples.html">Examples</a> walks you through the 
     examples included with the documentation, and there are two short
     chapters on useful <a href="progguide/idioms.html">Idioms</a> and a
     few <a href="progguide/pitfalls.html">Pitfalls</a>
     The appendices have reference information:
     the <a href="progguide/quick.html">Quick Reference</a>
     summarizes AspectJ syntax,
     the <a href="progguide/semantics.html">Language Semantics</a>
     best describes AspectJ usage, and 
     <a href="progguide/implementation.html">Implementation Notes</a>
     describes how
     the current version is limited to code the compiler controls.</td>
     </tr>

<tr> <td><a href="devguide/index.html">Development Environment Guide</a>
<br/>
         
         (printable <a href="devguide/printable.html">html</a>)
     </td>
     <td>This has a guide to  
     <a href="devguide/ajc-ref.html">ajc</a>, the command-line compiler;
     <a href="devguide/ajbrowser.html">ajbrowser</a>, the stand-alone
     GUI for compiling and viewing crosscutting structure; 
     and the <a href="devguide/antTasks.html">Ant tasks</a>
     for building AspectJ programs.
     </td>
     </tr>

<tr> <td><a href="runtime-api/index.html">AspectJ API</a>
     </td>
     <td>API documentation for AspectJ runtime classes. <tt>JoinPoint</tt>
         shows the state automatically available at each join point.
		 See also the <a href="weaver-api/index.html">Weaver API</a>
     </td> </tr>

<tr> <td><a href="faq.html"> FAQ</a>
     </td>
     <td>Frequently-asked questions about the AspectJ language, tools, and project.
     </td> </tr>

<tr> <td>README's
     </td>
     <td>Changes and porting guide for AspectJ 
        <a href="README-150.html">1.5.0</a>,
		<a href="README-121.html">1.2.1</a>,
		<a href="README-12.html">1.2.0</a>,
		<a href="README-11.html">1.1</a>, and
		<a href="porting.html">1.0</a>.
     </td> </tr>


<tr> <td><a href="changes.html">Changes</a>
     </td>
     <td>Changes between the latest releases.
     </td> </tr>

<tr> <td><a href="examples/">Examples</a>
     </td>
     <td>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.
     </td> </tr>

</table>

<a name="distributions"></a>
<h3>AspectJ distributions</h3>
<table border="1">
<tr> <th>Distributions</th><th>Description</th></tr>
<tr> <td><a href="http://eclipse.org/aspectj">AspectJ</a>
     </td>
     <td>The AspectJ distribution contains binaries for the
         compiler, structure browser, and Ant taskdefs,
         as well as the documentation and examples.
         </td>
     </tr>
<tr> <td><a href="http://eclipse.org/aspectj">AspectJ</a> source code
     </td>
     <td>Source code for AspectJ is available 
         under the open-source 
         <a href="http://www.eclipse.org/legal/cpl-v10.html">CPL 1.0</a>
         license from the CVS
         repositories for the AspectJ project.  See the
         <a href="faq.html#q:buildingsource">FAQ entry</a>.
         </td>
     </tr>

<tr> <td><a href="http://eclipse.org/ajdt">AspectJ for Eclipse</a>
     </td>
     <td>AspectJ Development Environment support for
         Eclipse is available under CPL 1.0
         from the eclipse.org project site
         <a href="http://eclipse.org/ajdt">
                  http://eclipse.org/ajdt</a>
         </td>
     </tr>

<tr> <td><a href="https://jdeveloperaop.dev.java.net/">
          Support for the JDeveloper IDE</a>
     </td>
     <td>Support for programming in AspectJ using the JDeveloper IDE
         is available under the Apache Software License
         from the java.net project site
         <a href="https://jdeveloperaop.dev.java.net/">
                  https://jdeveloperaop.dev.java.net/</a>
         </td>
     </tr>

</table>

<a name="resources"></a>
<h3>Other AspectJ resources</h3>
<table border="1">
<tr> <th>Resources</th><th>Description</th> 
     </tr>
<tr> <td>Mail lists 
         </td>
     <td>
         AspectJ users discuss tips and
         best practices for writing AspectJ programs on
         <a href="mailto:aspectj-users@eclipse.org">
           aspectj-users@eclipse.org</a>.
         AspectJ developers discuss issues with developing
         the AspectJ tools on
         <a href="mailto:aspectj-dev@eclipse.org">
          aspectj-dev@eclipse.org</a>.		  
         To get occasional emails about AspectJ releases
         and relevant events, subscribe to 
         <tt>aspectj-announce@eclipse.org</tt>.
         To view list archives or subscribe to the list, go to 
         <a href="http://eclipse.org/aspectj">
                 the AspectJ home page</a>.
		 To find archived emails, use the Eclipse site 
		 <a href="http://www.eclipse.org/search/search.cgi">search page</a>.
	</td></tr>
<tr> <td><a href="http://bugs.eclipse.org/bugs">Bug database</a>
     </td>
     <td>Use the Eclipse project's Bugzilla database
     to view and submit bugs against the AspectJ product components
     <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;component=Compiler">
         Compiler</a> (for the AspectJ compiler, ajc)
     <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;component=IDE">
         IDE</a> (for AJBrowser and AJDE bugs),
     <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;component=Ant">
         Ant</a> (for the Ant tasks),
     and
     <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;component=Docs">
         Docs</a> (for the documentation).
     Bugs all users should know about are
     <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;keywords=info">
      flagged with the "info" keyword</a>.
     See the 
     <a href="faq.html#q:ajcbugs">
     	FAQ entry</a> for instructions on submitting compiler bugs.     
     </td> </tr>

<tr> <td> <a href="http://aosd.net">http://aosd.net</a> - the AOSD web site
     </td>
     <td>This site has discussion and announcements related to
         aspect-oriented software development (AOSD) in general.  
         Use <a href="mailto:announce@aosd.net">announce@aosd.net</a>
         to get and publish notices about AOSD
         workshops, conferences, and technology releases.
         Use <a href="mailto:discuss@aosd.net">discuss@aosd.net</a>
         for general AOSD discussions.
     </td> </tr>
</table>

<p/>
<a name="paths"></a>
<h3>Suggested paths for those new to AspectJ</h3>
<p/>
   To learn the AspectJ language, read the 
    <a href="progguide/index.html">Programming Guide</a>,
    keeping the <a href="progguide/semantics.html">Semantics appendix</a>
    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 <a href="examples/">examples</a> work, 
    see the <a href="progguide/examples.html">Examples </a> section
    in the <a href="progguide/index.html">Programming Guide</a>.
    View and navigate the crosscutting structure using 
	<a href="http://eclipse.org/ajdt">AJDT</a>; if you can't use Eclipse, try
    the <code>ajbrowser</code> structure viewer, as described in
    the <a href="devguide/ajbrowser.html">AspectJ Browser</a> section of
    the <a href="devguide/index.html">Development Environment Guide</a>.
<p/>
    To start using AspectJ with your own code, 
    modify the example aspects to apply to your classes.
    As you learn,
    use the compiler's <code>-Xlint</code> flags to catch some common 
    mistakes.  (Understand that the 
    <a href="progguide/implementation.html">current implementation</a>
    is limited to code the compiler controls.)
<p>
   To plan how to adopt AspectJ into a project, read the 
    <a href="progguide/index.html">Programming Guide</a>
   on development- and production-time aspects 
   and the <a href="faq.html">FAQ</a> entries for 
   <a href="faq.html#q:startUsingAJ">How should I start using AspectJ?</a>,
   <a href="faq.html#adoption">Deciding to adopt AspectJ</a>,
   the Development tools sections
   (<a href="faq.html#q:integrateWithDevTools">one</a>,
    <a href="faq.html#devtools">two</a>, 
    <a href="faq.html#ltw">Load-time weaving</a> 
    ), and
   <a href="faq.html#q:opensource">AspectJ as open-source</a>.
</p>
<p>
Enjoy the language!
</p>
<p>
The AspectJ Team
</p>

<hr/>
<small>
<a href="#top">Top</a>
</small>
</body> </html>
