Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>tags/V1_9_21_1
@@ -0,0 +1,86 @@ | |||
== AspectJ 1.9.8 | |||
_© Copyright 2022 Contributors. All rights reserved._ | |||
_Release info: 1.9.8 available 11-Feb-2022_ | |||
Please note, that Bugzilla for issue management is deprecated, and new issues should be filed as | |||
https://github.com/eclipse/org.aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.8 can be found | |||
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] and | |||
https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.8[here for GitHub issues]. | |||
=== New features | |||
AspectJ 1.9.8 supports https://openjdk.java.net/projects/jdk/17/[Java 17] and its final and review features, such as: | |||
* Sealed classes (final in Java 17, previews in Java 15, 16 and AspectJ 1.9.7) | |||
* Pattern matching for `switch` | |||
=== Improvements | |||
The `--release N` 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. | |||
The following new properties can improve performance, e.g. Spring start-up time: | |||
* `org.aspectj.apache.bcel.useSingleRepositoryInstance` | |||
* `org.aspectj.apache.bcel.useUnavailableClassesCache` | |||
* `org.aspectj.apache.bcel.ignoreCacheClearRequests` | |||
For now, they all default to `false` 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 https://github.com/eclipse/org.aspectj/pull/37[PR #37]. | |||
=== Code examples | |||
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): | |||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features198/compiler_release[Cross-compilation to legacy JDK]: | |||
An example class which only works correctly on JDK 8 when compiled with `--release 8` due to API changes in | |||
the JDK. Simply `-source 8 -target 8` would not be enough in this case. | |||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features198/java17[Pattern matching for `switch`] | |||
=== Other changes and bug fixes | |||
* The AspectJ compiler `ajc` (contained in the `aspectjtools` 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 `aspectjrt`, but the compiler | |||
itself needs JDK 11+. Just like in previous AspectJ versions, both the runtime `aspectjrt` and the load-time weaver | |||
`aspectjweaver` still only require JRE 8+. | |||
* Document build profiles and properties in _docs/developer/BUILD.md_ | |||
* Add a guide for setting up an AspectJ development environment in _docs/developer/IDE.md_ | |||
* Fix https://github.com/eclipse/org.aspectj/issues/105[issue #105]: Compilation fails when using an aspect library via | |||
`-aspectpath` in combination with introducing an annotation via ITD. This was broken since version 1.9.5 and fixed in | |||
1.9.8.RC3. | |||
* Fix https://github.com/eclipse/org.aspectj/issues/68[issue #68]: Correctly process class files containing | |||
https://openjdk.java.net/jeps/309[dynamic class-file constants (JEP 309)], 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 | |||
https://github.com/eclipse/org.aspectj/blob/de63b63d/tests/bugs198/github_68/Generator.java#L50-L61[craft a condy | |||
class with ASM]. | |||
* Thanks to Andrey Turbanov for several clean code contributions and to Dmitry Mikhaylov for fixing a potential | |||
concurrency problem. | |||
=== AspectJ usage hints | |||
==== Use LTW on Java 16+ | |||
Please note that if you want to use load-time weaving on Java 16+, the weaving agent collides with | |||
https://openjdk.java.net/jeps/396[JEP 396 (Strongly Encapsulate JDK Internals by Default)]. Therefore, you need to set | |||
the JVM parameter `--add-opens java.base/java.lang=ALL-UNNAMED` 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. | |||
==== Compile with Java preview features | |||
For features marked as preview on a given JDK, you need to compile with `ajc --enable-preview` and run with | |||
`java --enable-preview` on that JDK. | |||
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. |
@@ -1,152 +0,0 @@ | |||
<!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> |
@@ -0,0 +1,94 @@ | |||
== AspectJ 1.9.9.1 | |||
_© Copyright 2022 Contributors. All rights reserved._ | |||
_Release info: 1.9.9.1 available 31-Mar-2022_ | |||
Bugfix release for some compiler options related to the Java Platform Module System (JPMS) which were not working, most | |||
importantly `--add-modules`, `--add-exports` and `--add-reads`. See | |||
https://github.com/eclipse/org.aspectj/issues/145[issue #145]. | |||
This probably was broken for a long time. AspectJ still is not boasting extensive JPMS support or test coverage, but | |||
this improvement seems substantial enough to justify a minor release, instead of keeping users waiting for the next | |||
regular release. | |||
== AspectJ 1.9.9 | |||
_© Copyright 2022 Contributors. All rights reserved._ | |||
_Release info: 1.9.9 available 24-Mar-2022_ | |||
Please note that Bugzilla for issue management is deprecated and new issues should be filed as | |||
https://github.com/eclipse/org.aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.9 can be found | |||
here: | |||
* https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.9[GitHub 1.9.9] | |||
* https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.9.1[GitHub 1.9.9.1] | |||
* 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.9[Bugzilla 1.9.9] | |||
=== New features | |||
AspectJ 1.9.9 supports https://openjdk.java.net/projects/jdk/18/[Java 18] and its final and preview features, such as: | |||
* Pattern matching for `switch` (preview 2) | |||
=== Improvements | |||
In annotation style aspects, asynchronous `proceed()` calls in `@Around` advice now works in threads created from within | |||
the advice. Previously, this was only working in native syntax aspects. There is still a limitation with regard to | |||
asynchronous proceed, if you do not create the thread in the advice but want to use e.g. an `ExecutorService` with its | |||
own thread pool. This still is not working in annotation style aspects, only in native syntax ones. | |||
See https://github.com/eclipse/org.aspectj/issues/128[issue #128] and | |||
https://github.com/eclipse/org.aspectj/pull/132[pull request #132] for more details. | |||
=== Code examples | |||
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): | |||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features198/java17[Pattern matching for switch, preview 1] | |||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features199/java18[Pattern matching for switch, preview 2] | |||
* https://github.com/eclipse/org.aspectj/tree/master/tests/bugs199/github_128[Asynchronous proceed in native vs. | |||
annotation style syntax] | |||
=== Other changes and bug fixes | |||
* Fix a bug which led to ``NullPointerException``s, if too many JAR archives were on the classpath. Too many here means | |||
the value of system property `org.aspectj.weaver.openarchives` (1,000 by default). The AspectJ compiler is meant to | |||
close archives upon cache exhaustion and then re-open them, if it needs them again later. Re-opening was broken, but | |||
now the compiler works reliably even for cache sizes as small as 20. See | |||
https://github.com/eclipse/org.aspectj/issues/125[issue #125]. | |||
* Improvements for `if()` pointcuts in annotation syntax, see issues | |||
https://github.com/eclipse/org.aspectj/issues/115[#115], https://github.com/eclipse/org.aspectj/issues/120[#120], | |||
https://github.com/eclipse/org.aspectj/issues/122[#122]. | |||
* Thanks to Andrey Turbanov for several clean code contributions. | |||
=== AspectJ usage hints | |||
==== AspectJ compiler build system requirements | |||
Since 1.9.8, the AspectJ compiler `ajc` (contained in the `aspectjtools` 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 `aspectjrt`, but the | |||
compiler itself needs JDK 11+. Just like in previous AspectJ versions, both the runtime `aspectjrt` and the load-time | |||
weaver `aspectjweaver` still only require JRE 8+. | |||
==== Use LTW on Java 16+ | |||
Please note that if you want to use load-time weaving on Java 16+, the weaving agent collides with | |||
https://openjdk.java.net/jeps/396[JEP 396 (Strongly Encapsulate JDK Internals by Default)]. Therefore, you need to set | |||
the JVM parameter `--add-opens java.base/java.lang=ALL-UNNAMED` 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. | |||
==== Compile with Java preview features | |||
For features marked as preview on a given JDK, you need to compile with `ajc --enable-preview` and run with | |||
`java --enable-preview` on that JDK. | |||
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. |
@@ -1,158 +0,0 @@ | |||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | |||
<html> | |||
<head> | |||
<title>AspectJ 1.9.9 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 2022 Contributors. All rights reserved.</small></div> | |||
<h1>AspectJ 1.9.9.1</h1> | |||
<p> | |||
Bugfix release for some compiler options related to the Java Platform Module System (JPMS) which were not working, | |||
most importantly <tt>--add-modules</tt>, <tt>--add-exports</tt> and <tt>--add-reads</tt>. See issue | |||
<a href="https://github.com/eclipse/org.aspectj/issues/145">#145</a>. | |||
</p> | |||
<p> | |||
This probably was broken for a long time. AspectJ still is not boasting extensive JPMS support or test coverage, but | |||
this improvement seems substantial enough to justify a minor release, instead of keeping users waiting for the next | |||
regular release. | |||
</p> | |||
<h1>AspectJ 1.9.9</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.9 can be found here: | |||
<ul> | |||
<li><a href="https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.9">GitHub 1.9.9</a></li> | |||
<li><a href="https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.9.1">GitHub 1.9.9.1</a></li> | |||
<li><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.9">Bugzilla 1.9.9</a></li> | |||
</ul> | |||
</p> | |||
<h2>New features</h2> | |||
<p> | |||
AspectJ 1.9.9 supports <a href="https://openjdk.java.net/projects/jdk/18/">Java 18</a> and its final and preview | |||
features, such as: | |||
</p> | |||
<ul> | |||
<li>Pattern matching for <tt>switch</tt> (preview 2)</li> | |||
</ul> | |||
<h2>Improvements</h2> | |||
<p> | |||
In annotation style aspects, asynchronous <tt>proceed()</tt> calls in <tt>@Around</tt> advice now works in threads | |||
created from within the advice. Previously, this was only working in native syntax aspects. There is still a | |||
limitation with regard to asynchronous proceed, if you do not create the thread in the advice but want to use e.g. | |||
an <tt>ExecutorService</tt> with its own thread pool. This still is not working in annotation style aspects, only in | |||
native syntax ones. | |||
</p> | |||
<p> | |||
See <a href="https://github.com/eclipse/org.aspectj/issues/128">issue #128</a> and | |||
<a href="https://github.com/eclipse/org.aspectj/pull/132">pull request #132</a> for more details. | |||
</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/java17"> | |||
Pattern matching for switch, preview 1 | |||
</a> | |||
</li> | |||
<li> | |||
<a href="https://github.com/eclipse/org.aspectj/tree/master/tests/features199/java18"> | |||
Pattern matching for switch, preview 2 | |||
</a> | |||
</li> | |||
<li> | |||
<a href="https://github.com/eclipse/org.aspectj/tree/master/tests/bugs199/github_128"> | |||
Asynchronous proceed in native vs. annotation style syntax | |||
</a> | |||
</li> | |||
</ul> | |||
<h2>Other changes and bug fixes</h2> | |||
<ul> | |||
<li> | |||
Fix a bug which led to <tt>NullPointerException</tt>s if too many JAR archives were on the classpath. Too many here | |||
means the value system property <tt>org.aspectj.weaver.openarchives</tt> (1,000 by default). The AspectJ compiler is | |||
meant to close archives upon cache exhaustion and then re-open them if it needs them again later. Re-opening was | |||
broken, now the compiler works reliably even for cache sizes as small as 20. See issue | |||
<a href="https://github.com/eclipse/org.aspectj/issues/125">#125</a>. | |||
</li> | |||
<li> | |||
Improvements for <tt>if()</tt> pointcuts in annotation syntax, see issues | |||
<a href="https://github.com/eclipse/org.aspectj/issues/115">#115</a>, | |||
<a href="https://github.com/eclipse/org.aspectj/issues/120">#120</a>, | |||
<a href="https://github.com/eclipse/org.aspectj/issues/122">#122</a>. | |||
</li> | |||
<li> | |||
Thanks to Andrey Turbanov for several clean code contributions. | |||
</li> | |||
</ul> | |||
<h2>AspectJ usage hints</h2> | |||
<h3>AspectJ compiler build system requirements</h3> | |||
<p> | |||
Since 1.9.7, 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+. | |||
</p> | |||
<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> and related | |||
subsequent JEPs. 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.9 on 24-Mar-2022, 1.9.9.1 on 31-Mar-2022 | |||
</p> | |||
</body> | |||
</html> |
@@ -87,6 +87,8 @@ each join point. See also the link:weaver-api/index.html[Weaver API] | |||
language, tools, and project. | |||
|README's |Changes and porting guide for AspectJ | |||
xref:README-199.adoc[1.9.9.1], | |||
xref:README-199.adoc[1.9.9], xref:README-198.adoc[1.9.8], | |||
xref:README-197.adoc[1.9.7], xref:README-196.adoc[1.9.6], | |||
xref:README-195.adoc[1.9.5], xref:README-194.adoc[1.9.4], | |||
xref:README-193.adoc[1.9.3], xref:README-192.adoc[1.9.2], |