|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
- <html>
-
- <head>
- <title>AspectJ 1.9.8 Readme</title>
- <style type="text/css">
- <!--
- P { margin-left: 20px; }
- PRE { margin-left: 20px; }
- LI { margin-left: 20px; }
- H4 { margin-left: 20px; }
- H3 { margin-left: 10px; }
- -->
- </style>
- </head>
-
- <body>
- <div align="right"><small>© Copyright 2021 Contributors. All rights reserved.</small></div>
-
- <h1>AspectJ 1.9.8</h1>
-
- <p>
- Please note that Bugzilla for issue management is deprecated and new issues should be filed as
- <a href="https://github.com/eclipse/org.aspectj/issues/new">GitHub issues</a>.
- The list of issues addressed for 1.9.8 can be found
- <a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.8">here for Bugzilla</a>
- and <a href="https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.8">here for GitHub issues</a>.
- </p>
-
- <h2>New features</h2>
-
- <p>
- AspectJ 1.9.8 supports <a href="https://openjdk.java.net/projects/jdk/17/">Java 17</a> and its final and preview
- features, such as:
- </p>
- <ul>
- <li>Sealed classes (final in Java 17, previews in Java 15, 16 and AspectJ 1.9.7)</li>
- <li>Pattern matching for <tt>switch</tt></li>
- </ul>
-
- <h2>Improvements</h2>
-
- <p>
- The <tt>--release N</tt> compiler option for correct cross-compilation to previous JDK bytecode + API versions is now
- supported by AJC. Previously, the option existed (inherited by ECJ) but did not work correctly.
- </p>
-
- <p>
- The following new properties can improve performance, e.g. Spring start-up time:
- </p>
- <ul>
- <li><tt>org.aspectj.apache.bcel.useSingleRepositoryInstance</tt></li>
- <li><tt>org.aspectj.apache.bcel.useUnavailableClassesCache</tt></li>
- <li><tt>org.aspectj.apache.bcel.ignoreCacheClearRequests</tt></li>
- </ul>
- <p>
- For now, they all default to <tt>false</tt> for backward compatibility. This might change in a future Aspect release,
- if user feedback is positive and no negative side effects are found. Please try using them as much as you can and
- report back questions (to the AspectJ users mailing list) or problems (as a GitHub issue), if any. Thanks to Stefan
- Starke for his contribution. See also <a href="https://github.com/eclipse/org.aspectj/pull/37">PR #37</a>.
- </p>
-
-
- <h2>Code examples</h2>
-
- <p>
- You can find some sample code in the AspectJ test suite under the respective AspectJ version in which the features
- were first supported (possibly as JVM preview features):
- </p>
- <ul>
- <li>
- <a href="https://github.com/eclipse/org.aspectj/tree/master/tests/features198/compiler_release">
- Cross-compilation to legacy JDK
- </a>:
- An example class which only works correctly on JDK 8 when compiled with <tt>--release 8</tt> due to API changes in
- the JDK. Simply <tt>-source 8 -target 8</tt> would not be enough in this case.
- </li>
- <li>
- <a href="https://github.com/eclipse/org.aspectj/tree/master/tests/features198/java17">
- Pattern matching for switch
- </a>
- </li>
- </ul>
-
- <h2>Other changes and bug fixes</h2>
-
- <ul>
- <li>
- The AspectJ compiler <tt>ajc</tt> (contained in the <tt>aspectjtools</tt> library) no longer works on JDKs 8 to 10.
- The minimum compile-time requirement is now JDK 11 due to upstream changes in the Eclipse Java Compiler (subset of
- JDT Core), which AspectJ is a fork of. You can still compile to legacy target versions as low as Java 1.3 when
- compiling plain Java code or using plain Java ITD constructs which do not require the AspectJ runtime
- <tt>aspectjrt</tt>, but the compiler itself needs JDK 11+. Just like in previous AspectJ versions, both the runtime
- <tt>aspectjrt</tt> and the load-time weaver <tt>aspectjweaver</tt> still only require JRE 8+.
- </li>
- <li>Document build profiles and properties in <i>docs/developer/BUILD.md</i></li>
- <li>Add a guide for setting up an AspectJ development environment in <i>docs/developer/IDE.md</i></li>
- <li>
- Fix <a href="https://github.com/eclipse/org.aspectj/issues/105">issue #105</a>: Compilation fails when using an
- aspect library via <tt>-aspectpath</tt> in combination with introducing an annotation via ITD. This was broken since
- version 1.9.5 and fixed in 1.9.8.RC3.
- </li>
- <li>
- Fix <a href="https://github.com/eclipse/org.aspectj/issues/68">issue #68</a>: Correctly process class files
- containing <a href="https://openjdk.java.net/jeps/309">dynamic class-file constants (JEP 309)</a>, which were
- introduced in Java 11 and broken in AspectJ ever since their introduction in 1.9.2. Java itself currently does not
- use "condy" and neither do other widespread JVM languages. Byte code engineering libraries like ASM or Byte Buddy
- and some instrumentation tools like JaCoCo can however produce condy code. Therefore, in order to create a
- regression test, we actually had to
- <a href="https://github.com/eclipse/org.aspectj/blob/de63b63d/tests/bugs198/github_68/Generator.java#L50-L61">
- craft a condy class with ASM</a>.
- </li>
- <li>
- Thanks to Andrey Turbanov for several clean code contributions and to Dmitry Mikhaylov for fixing a potential
- concurrency problem.
- </li>
- </ul>
-
- <h2>AspectJ usage hints</h2>
-
- <h3>Use LTW on Java 16+</h3>
-
- <p>
- Please note that if you want to use load-time weaving on Java 16+, the weaving agent collides with
- <a href="https://openjdk.java.net/jeps/396">JEP 396 (Strongly Encapsulate JDK Internals by Default)</a>. Therefore,
- you need to set the JVM parameter <tt>--add-opens java.base/java.lang=ALL-UNNAMED</tt> in order to enable aspect
- weaving. This is due to the fact that the weaver uses internal APIs for which we have not found an adequate
- replacement yet when defining classes in different classloaders.
- </p>
-
- <h3>Compile with Java preview features</h3>
-
- <p>
- For features marked as preview on a given JDK, you need to compile with <tt>ajc --enable-preview</tt> and run with
- <tt>java --enable-preview</tt> on that JDK.
- </p>
- <p>
- Please note that you cannot run code compiled with preview features on any other JDK than the one used for
- compilation. For example, records compiled with preview on JDK 15 cannot be used on JDK 16 without recompilation. This
- is a JVM limitation unrelated to AspectJ. Also, e.g. sealed classes are preview-1 on JDK 15 and preview-2 on JDK 16.
- You still need to recompile, no matter what.
- </p>
-
- <hr>
-
- <p>
- <b>Available:</b> 1.9.8 available 11-Feb-2022
- </p>
-
- </body>
-
- </html>
|