<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>, 
       <a href="devguide/index.html">development</a> and 
       <a href="pdguide/index.html">problem diagnosis</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 is 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="pdguide/index.html">Problem Diagnosis Guide</a>
<br/>
         
         (printable <a href="pdguide/printable.html">html</a>)
     </td>
     <td>This has a guide to  
     the various features available such as messages and trace to help you both solve problems
     with you own programs and report bugs to the AspectJ team.
     </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-166.html">1.6.6</a>,
        <a href="README-165.html">1.6.5</a>,
        <a href="README-164.html">1.6.4</a>,
        <a href="README-163.html">1.6.3</a>,
        <a href="README-162.html">1.6.2</a>,
        <a href="README-161.html">1.6.1</a>,
        <a href="README-160.html">1.6.0</a>,
        <a href="README-154.html">1.5.4</a>,
        <a href="README-153.html">1.5.3</a>,
        <a href="README-152.html">1.5.2</a>,
        <a href="README-151.html">1.5.1</a>,
        <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/epl-v10.html">Eclipse Public License v1.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 Eclipse Public License v1.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>
