Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Libs refactoring (remove libs from Git SCM) #41

Merged
merged 90 commits into from Apr 26, 2021

Conversation

kriegaex
Copy link
Contributor

@kriegaex kriegaex commented Mar 29, 2021

This is work in progress, partially done and documented in a shadow libx directory until finished, so as not to completely break the build relying on a certain layout in libs.

I have created the PR because I want feedback from GitHub Actions CI builds. When the PR is merged, it closes #40.


Update: This PR supersedes #39.

Add methods isRecord() and getRecordComponents() to class
CompactTypeStructureRepresentation

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Keep only ASM 2.0 binary because it is still used in UnweavableTest
which uses an old ASM API, e.g. with a ClassWriter constructor which no
longer exists.

Also add JarJar 1.3 library because it is needed by an Ant task in
lib/asm/build.xml.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Mini refactoring, making the code a bit less verbose

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
- Java 14 feature sample classes moved from 'bugs' to 'features'
- One test case using a Java 14 preview feature was moved to the
  Java 14-only tests

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
These tests need a Java 14 level AspectJ compiler, because they use
version-specific preview features. This compiler has been upgraded
to a Java 15 compliant JDT Core already, i.e. it does not support
preview features of a previous version anymore.

An error message similar to the above explanation will appear when
trying to run any XMLBasedAjcTestCaseForJava14Only subclass, such as
Ajc196PreviewFeaturesTests (currently the only one).

When running AllTestsAspectJ196, Ajc196PreviewFeaturesTests will not be
added to the test suite anymore.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
So far this was a slight oversight, no test using 'yield' existed in the
'features193' test suite. Better late than never.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Also fix some minor details in Java 14 suite

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Renamed messages.properties to messages_aspectj.properties and moved to
a path identical with the Eclipse original resource file. Therefore, it
is now just treated as a localised version of it.

The new jdtcore-for-aspectj.jar already contains logic to use the new
locale. Hence, BuildArgParser no longer needs the static block to
initialise its own resource bundle, Eclipse JDT will automatically pick
it up.

The version string was also updated to the new Eclipse merge commit
hash + date + "Java16".

TODO: Strip down properties file in order to only contain delta to
Eclipse.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Delete all properties from messages_aspectj.properties which were just
copied from Eclipse and basically the same. This not only gets rid of
duplicates but also eliminates differences found between upstream and
AspectJ strings which were just cause by errors or oversights during
manual upgrade.

TODO:
  - Find a way to print the '-X' options as info instead of yielding
    'abort', making it seem as if compilation failed and print the usage
    message to stdErr instead of stdOut.
  - Eclipse also has misc.usage.warn, not just misc.usage, i.e. usage
    info specifically for warning options. Make sure that AspectJ uses
    it consistently.
  - Find a way to merge AspectJ-specific options into the standard
    Eclipse usage text instead of completely replacing it, further
    reducing the need to merge and copy upstream content.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
WARNING: Please avoid line breaks in manifest values! They are passed on
like this: Assembly Plugin -> Plexus Archiver -> JRE java.util.jar
.Manifest.write(OutputStream).

The JRE Manifest class inserts hard line breaks always after 72
characters, no matter if those 72 characters contain line feeds, tabs or
spaces. Hence, it can happen that unwanted blank lines end up in the
middle of a manifest section, making the manifest invalid. Calls like
e.g. 'java -cp aspectjtools.jar org.aspectj.tools.ajc.Main' can then
fail with the absolutely unexpected error 'Could not find or load main
class org.aspectj.tools.ajc.Main'.

In IntelliJ IDEA you can deactivate wrapping text inside XML tags like
this: "File | Settings | Editor | Code Style | XML | Wrap text -> off"

The problem occurs in Maven Assembly in versions higher than 2.2. More
exactly, it occurs in Plexus Archiver after in more recent versions it
switched to using the JRE Manifest class.

TODO 1: Either add a test step in phase 'verify' doing something like
this:

new Manifest(new FileInputStream("MANIFEST.MF"));

This would lead to "IOException: invalid header field (line xy)" in case
of an invalid manifest file.

TODO 2: Or file a JRE bug at Oracle or OpenJDK, wherever appropriate.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
- Use spaces instead of tabs for indentation.
- Document parameters bound in Eclipse JDT, e.g. {0} is not the compiler
  name there but the system's path separator ';' or ':'. So if we want
  to display the compiler name, we need {1}.
- For both normal usage and '-X' usage, compiler name + version are
  printed now.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
- Usage texts are now printed to stdOut, no longer stdErr.
- 'java ...Main -?' no longer prints usage text twice (once to stdOut
  and then again to stdErr).
- AjdtCommand.inferKind: Usage texts are no longer mis-identified as
  warnings or errors just because they contain substrings "warning" or
  "error". Matching is now more precise, looking for "[warning]" and
  "[error]". But in that case the method would not be called anyway
  because errors and warnings are identified in other ways already. As a
  fall-back, the categories IMessage.ERROR and IMessage.WARNING still
  exist in the method.
- In case of compile errors, no usage message is printed anymore,
  because previously the user had to scroll up a lot in order to see the
  actual messages. This is also in line with ECJ. The same is true for
  warnings, but it was like this in Ajc already.
- AjdtCommand.inferKind: There is a new category IMessage.USAGE
  especially for AspectJ usage texts, which will be identified by string
  matching and then correctly handled (i.e. printed to stdOut, not
  stdErr).
- Usage text printing is no longer done in AspectJ but in the AspectJ
  "shadows" fork of JDT. This helps to get rid of some now obsolete code
  here.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
The line in which warnings like "Archived non-system classes are
disabled because the java.system.class.loader property is specified"
appears can start with e.g."OpenJDK 64-Bit Server VM" or "Java
HotSpot(TM) 64-Bit Server VM". Therefore, an exact match on the former
worked on Linux, but not on Windows, or maybe the difference is
generally between Oracle and OpenJDK. anyway, I use Oracle on Windows
and my build failed. Now it is fixed because I made the match more
generic using a regex.

I also removed a now obsolete check for the occurrence of the stripped
line in test "JDK14 LTW with XML".

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
This is a follow-up on commit @31b2d60b. Some tests were actually
expecting usage texts as failure outputs. Because that was fixed, the
tests no longer see those failures, hence they should no longer expect
them.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Several LTW tests using class TestServer failed on my machine because
there was a hard-coded project base directory name 'org.aspectj' in the
class. This class has several other problems, but my quick fix for now -
I did not want to rename my project base directory - was to match on a
regex '(?i)(org[.])?aspectj' now. That also works for my root directory
'AspectJ'.

I also moved the code determining the project dir into a protected
(hence testable) method and added a sanity test case checking if the
directory can be determined. If not, the test will fail with a rather
lengthy warning to developers about the need to have a matching project
root folder.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
It failed with "RuntimeException: I never heard about what kind of build
it was!!" on my (@kriegaex) Windows machine, mostly because in case of a
failing full build the corresponding status is never set.

TODO: Ensure that 'MyStateListener.informedAboutKindOfBuild' is set for
failed builds, too.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
This module must be a relic from a test runner module once existing
during the Ant build era, but transferred and kept alive in the Maven
build. Actually, it almost doubles build time by running virtually all
tests in all modules again when doing 'mvn test' from the project root.

For now I only removed the module from the root POM, leaving behind
comments there, in the module POM and in the now @deprecated class
RunTheseBeforeYouCommitTests.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
- Test all features which were preview in 14+15 and are now final in 16,
  compiling them with language level 16.
- For Java 15 we only have sanity tests (and of course the Java <14
  tests), compiling Java 16 features to target 15 does not seem to work.
- Test remaining Java 16 preview feature (sealed classes).
- Instead of overriding runTest(String) in several base classes like
  XMLBasedAjcTestCaseForJava*Only or XMLBasedAjcTestCaseForJava*OrLater,
  we now override setUp() from JUnit's TestCase base class. This will
  run before runTest(String) and make the tests fail much faster, if a
  user tries to run them on the wrong VM.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Migrate 'ParseUtil.fileToEncodedURL(f)' to 'f.toURI().toURL()'.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
After Ajc usage text output is filtered into its own category
IMessage.USAGE now - see commit @31b2d60b - some tests in module
'org.aspectj.ajdt.core' were failing. I fixed and also improved them a
bit.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
There were warnings that builds were dependent on the system local
(de_DE in my case). In patterns like "EEEE MMM d, yyyy", parts like day
of week or month names would change otherwise.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
After Ajc usage text output is filtered into its own category
IMessage.USAGE now - see commit @31b2d60b - some tests in module
'org.aspectj.ajdt.core' were failing. I fixed and also improved them a
bit in @e4a2a5a5, but forgot to commit this one.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Another follow-up commit on @31b2d60b

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
This is a follow-up commit on @07af5d41:
Inside org.aspectj.apache.bcel.util.ClassPath.getClassPath(), some JVM
version matching occurs which previously did not include Java 16 (I also
added 17-19 to the regex matcher). This fixes test errors like:

java.lang.ClassCastException:
  class org.aspectj.weaver.MissingResolvedTypeWithKnownSignature
  cannot be cast to class
  org.aspectj.weaver.ReferenceType
  (org.aspectj.weaver.MissingResolvedTypeWithKnownSignature and
  org.aspectj.weaver.ReferenceType are in unnamed module
  of loader 'app')

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
HtmlDecorator.decorateHTMLFile is where after Java version upgrades
(i.e. also new Javadoc generator version) usually tests fail for the
first time during builds because strings no longer match as expected.

There now is this log message on stdOut: "Something unexpected went
wrong in HtmlDecorator. Here is the full file causing the problem:"
After that, a full HTML page is logged. I hope this helps me identify
the new error on GitHub Linux Java 16, because the same test works on
Windows and I have no idea how to remote-debug a GitHub CI build.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
The Java 16 Javadoc generator has changed the HTML structure once again
even compared to Java 15. I adjusted the matching in HtmlDecorator and
also fixed CoverageTestCase. Most methods there I just made to work
quickly, but method 'testInnerAspect()' I actually refactored. Some
other methods could (probably should) be restructured in a similar
fashion, but for now I just wanted to understand what the test does and
see how much work it would be to refactor it. But finally, I just want
to get the GitHub CI build running on Java 16.

TODO: I did not check if the decorated HTML actually looks OK and am
unsure if the tests cover that sufficiently, I never reviewed the tests.
It would also be better to do regex matches instead of looking for
variants of fixed strings or maybe even to operate on a DOM. But I am
not in a mood to refactor that tonight.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
This is a follow-up on commit @0b182d60. I have just received
confirmation from Oracle that my issue was accepted:

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8263924
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
We are not using Jupiter yet, but this is nice to have for the future.
Thanks to @larsgrefer for his initiative to prepare AspectJ for
JUnit Jupiter and for his other PR which also contains the same change
in the parent POM. :-)

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
@kriegaex
Copy link
Contributor Author

kriegaex commented Apr 12, 2021

FYI: After refactoring the Maven POMs in commits kriegaex/aspectj@9c62d17...kriegaex:5735026, I

  • manually downloaded the successful test runs before and after the changes,
  • extracted and filtered the test logs for Java 8, filtering out time stamps and test durations,
  • used a diff tool to compare the results of both.

I found out that the number of tests run (many), skipped (few), failed (zero) are exactly identical before and after my changes. I.e., the changes did not lead to skipping or missing out on any tests, which is important to know. So I am confident that my changes did not break anything, at least not with regard to tests.

What we got in exchange are cleaner Maven dependency management and (c)leaner POMs. There is still much left to optimise, but let us do it one step at a time. At this stage, mvn dependency:analyze does not show dozens of discrepancies anymore, such as

  • used, but undeclared dependencies (i.e. classes imported from transitive dependencies), which is dangerous and breaks easily, or
  • declared, but unused dependencies, which is less dangerous, but can lead to unnecessary stuff ending up in Maven Shade or Maven Assembly artifacts when relying on correct dependency management.

The number of discrepancies is now zero.

@kriegaex
Copy link
Contributor Author

kriegaex commented Apr 12, 2021

Sorry, I was interrupted before. In order to complete the picture, here is the situation before my refactoring:

$ mvn -P \!create-docs dependency:analyze | grep -E '\[(WARNING|INFO\] -+< .+:.+ >-+)'

[INFO] ---------------------< org.aspectj:aspectj-parent >---------------------
[INFO] --------------------------< org.aspectj:util >--------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    junit:junit:jar:4.13:test
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] -------------------------< org.aspectj:bridge >-------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    junit:junit:jar:4.13:test
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] ----------------------< org.aspectj:testing-util >----------------------
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] ------------------< org.aspectj:org.aspectj.matcher >-------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    junit:junit:jar:4.13:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] --------------------------< org.aspectj:asm >---------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    junit:junit:jar:4.13:test
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] ---------------------< org.aspectj:testing-client >---------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    junit:junit:jar:4.13:test
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] ------------------------< org.aspectj:runtime >-------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    junit:junit:jar:4.13:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] ----------------------< org.aspectj:bcel-builder >----------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    junit:junit:jar:4.13:test
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] -------------------------< org.aspectj:weaver >-------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    junit:junit:jar:4.13:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] ------------------------< org.aspectj:loadtime >------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:asm:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    xerces:xmlParserAPIs:jar:2.6.2:compile
[WARNING]    xerces:xercesImpl:jar:2.6.2:compile
[WARNING]    ant:ant:jar:1.6.3:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] -----------------< org.aspectj:org.aspectj.ajdt.core >------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:testing-client:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:loadtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] -----------------------< org.aspectj:ajde.core >------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] --------------------------< org.aspectj:ajde >--------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] -------------------------< org.aspectj:ajdoc >--------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:test
[WARNING] Unused declared dependencies found:
[WARNING]    com.github.olivergondza:maven-jdk-tools-wrapper:jar:0.1:compile
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.matcher:jar:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.aspectj:weaver:jar:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.aspectj:bcel-builder:jar:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] ------------------------< org.aspectj:taskdefs >------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    xerces:xmlParserAPIs:jar:2.6.2:compile
[WARNING]    xerces:xercesImpl:jar:2.6.2:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] -----------------------< org.aspectj:ajbrowser >------------------------
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:taskdefs:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:ajdoc:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:loadtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:weaver:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.ajdt.core:test-jar:tests:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] ------------------------< org.aspectj:testing >-------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:ajde:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.ajdt.core:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    regexp:regexp:jar:1.2:compile
[WARNING]    xerces:xercesImpl:jar:2.6.2:compile
[WARNING]    junit:junit:jar:4.13:compile
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] --------------------< org.aspectj:testing-drivers >---------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:weaver:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.aspectj:testing-client:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:asm:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] -------------------------< org.aspectj:tests >--------------------------
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[WARNING]    ant:ant:jar:1.6.3:compile
[WARNING]    org.aspectj:testing:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-drivers:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    ant:ant-launcher:jar:1.6.3:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] -------------------------< org.aspectj:build >--------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    junit:junit:jar:4.13:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] ------------------< org.aspectj:run-all-junit-tests >-------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:bcel-builder:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:build:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:bridge:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:asm:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:taskdefs:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-client:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-drivers:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:weaver:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.ajdt.core:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[WARNING]    org.aspectj:ajdoc:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:loadtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:ajde.core:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.matcher:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:ajde:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:ajbrowser:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    ant:ant:jar:1.6.3:compile
[WARNING]    ant:ant-launcher:jar:1.6.3:compile
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] --------------------------< org.aspectj:docs >--------------------------
[WARNING] Unused declared dependencies found:
[WARNING]    org.junit.jupiter:junit-jupiter-api:jar:5.6.2:test
[WARNING]    org.junit.jupiter:junit-jupiter-engine:jar:5.6.2:test
[WARNING]    org.junit.vintage:junit-vintage-engine:jar:5.6.2:test
[INFO] -----------------------< org.aspectj:aspectjrt >------------------------
[INFO] ---------------------< org.aspectj:aspectjweaver >----------------------
[INFO] ----------------------< org.aspectj:aspectjtools >----------------------
[INFO] ---------------------< org.aspectj:aspectjmatcher >---------------------
[INFO] -----------------------< org.aspectj:installer >------------------------

Or, if we remove everything related to JUnit 4 and JUnit Jupiter in order to see the rest a little bit clearer:

[INFO] ---------------------< org.aspectj:aspectj-parent >---------------------
[INFO] --------------------------< org.aspectj:util >--------------------------
[INFO] -------------------------< org.aspectj:bridge >-------------------------
[INFO] ----------------------< org.aspectj:testing-util >----------------------
[INFO] ------------------< org.aspectj:org.aspectj.matcher >-------------------
[INFO] --------------------------< org.aspectj:asm >---------------------------
[INFO] ---------------------< org.aspectj:testing-client >---------------------
[INFO] ------------------------< org.aspectj:runtime >-------------------------
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[INFO] ----------------------< org.aspectj:bcel-builder >----------------------
[INFO] -------------------------< org.aspectj:weaver >-------------------------
[INFO] ------------------------< org.aspectj:loadtime >------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:asm:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    xerces:xmlParserAPIs:jar:2.6.2:compile
[WARNING]    xerces:xercesImpl:jar:2.6.2:compile
[WARNING]    ant:ant:jar:1.6.3:compile
[INFO] -----------------< org.aspectj:org.aspectj.ajdt.core >------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:testing-client:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:loadtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[INFO] -----------------------< org.aspectj:ajde.core >------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[INFO] --------------------------< org.aspectj:ajde >--------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[INFO] -------------------------< org.aspectj:ajdoc >--------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:test
[WARNING] Unused declared dependencies found:
[WARNING]    com.github.olivergondza:maven-jdk-tools-wrapper:jar:0.1:compile
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.matcher:jar:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.aspectj:weaver:jar:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.aspectj:bcel-builder:jar:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:test
[INFO] ------------------------< org.aspectj:taskdefs >------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    xerces:xmlParserAPIs:jar:2.6.2:compile
[WARNING]    xerces:xercesImpl:jar:2.6.2:compile
[INFO] -----------------------< org.aspectj:ajbrowser >------------------------
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:taskdefs:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:ajdoc:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:loadtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:weaver:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.ajdt.core:test-jar:tests:1.9.7.BUILD-SNAPSHOT:test
[INFO] ------------------------< org.aspectj:testing >-------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:ajde:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.ajdt.core:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    regexp:regexp:jar:1.2:compile
[WARNING]    xerces:xercesImpl:jar:2.6.2:compile
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[INFO] --------------------< org.aspectj:testing-drivers >---------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:weaver:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:test
[WARNING]    org.aspectj:testing-client:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:asm:jar:1.9.7.BUILD-SNAPSHOT:compile
[INFO] -------------------------< org.aspectj:tests >--------------------------
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[WARNING]    ant:ant:jar:1.6.3:compile
[WARNING]    org.aspectj:testing:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-drivers:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    ant:ant-launcher:jar:1.6.3:compile
[INFO] -------------------------< org.aspectj:build >--------------------------
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[INFO] ------------------< org.aspectj:run-all-junit-tests >-------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.aspectj:asm-renamed:jar:9.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.aspectj:bcel-builder:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:build:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:bridge:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:asm:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:runtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:taskdefs:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-client:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-drivers:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:testing-util:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:weaver:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.ajdt.core:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.eclipse.jdt.core:jar:3.25.0-SNAPSHOT:compile
[WARNING]    org.aspectj:ajdoc:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:loadtime:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:ajde.core:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:org.aspectj.matcher:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:ajde:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    org.aspectj:ajbrowser:jar:1.9.7.BUILD-SNAPSHOT:compile
[WARNING]    ant:ant:jar:1.6.3:compile
[WARNING]    ant:ant-launcher:jar:1.6.3:compile
[INFO] --------------------------< org.aspectj:docs >--------------------------
[INFO] -----------------------< org.aspectj:aspectjrt >------------------------
[INFO] ---------------------< org.aspectj:aspectjweaver >----------------------
[INFO] ----------------------< org.aspectj:aspectjtools >----------------------
[INFO] ---------------------< org.aspectj:aspectjmatcher >---------------------
[INFO] -----------------------< org.aspectj:installer >------------------------

After the refactoring (I did not delete the JUnit stuff manually from the log here, but refactored it to really be gone):

$ mvn -P \!create-docs dependency:analyze | grep -E '\[(WARNING|INFO\] -+< .+:.+ >-+)'

[INFO] ---------------------< org.aspectj:aspectj-parent >---------------------
[INFO] --------------------------< org.aspectj:util >--------------------------
[INFO] -------------------------< org.aspectj:bridge >-------------------------
[INFO] ----------------------< org.aspectj:testing-util >----------------------
[INFO] ------------------< org.aspectj:org.aspectj.matcher >-------------------
[INFO] --------------------------< org.aspectj:asm >---------------------------
[INFO] ---------------------< org.aspectj:testing-client >---------------------
[INFO] ------------------------< org.aspectj:runtime >-------------------------
[INFO] ----------------------< org.aspectj:bcel-builder >----------------------
[INFO] -------------------------< org.aspectj:weaver >-------------------------
[INFO] -----------------< org.aspectj:org.aspectj.ajdt.core >------------------
[INFO] -----------------------< org.aspectj:ajde.core >------------------------
[INFO] --------------------------< org.aspectj:ajde >--------------------------
[INFO] -----------------------< org.aspectj:ajbrowser >------------------------
[INFO] ------------------------< org.aspectj:loadtime >------------------------
[INFO] -------------------------< org.aspectj:ajdoc >--------------------------
[INFO] ------------------------< org.aspectj:taskdefs >------------------------
[INFO] ------------------------< org.aspectj:testing >-------------------------
[INFO] --------------------< org.aspectj:testing-drivers >---------------------
[INFO] -------------------------< org.aspectj:tests >--------------------------
[INFO] -------------------------< org.aspectj:build >--------------------------
[INFO] ------------------< org.aspectj:run-all-junit-tests >-------------------
[INFO] --------------------------< org.aspectj:docs >--------------------------
[INFO] -----------------------< org.aspectj:aspectjrt >------------------------
[INFO] ---------------------< org.aspectj:aspectjweaver >----------------------
[INFO] ----------------------< org.aspectj:aspectjtools >----------------------
[INFO] ---------------------< org.aspectj:aspectjmatcher >---------------------
[INFO] -----------------------< org.aspectj:installer >------------------------

By the way, a while ago, before I eliminated the system dependencies to the many libraries formerly stored (as in "SCM-committed") in the lib directory, it was way worse. The "before" situation shown here was already relatively clean compared to when I started the branch for this PR, just not clean enough yet.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
The resource key 'misc.usage' is completely gone from
.../jdt/internal/compiler/batch/messages_aspectj.properties. Instead,
JDT Core was adjusted in such a way as to patch the new resource key
'misc.usage.aspectj' into the upstream 'misc.usage' in the right place.

Now finally the properties file is as lean as I envisioned it to be,
without any loss of information and without the need of future manual
synchronisation of duplicate texts for every release.

At the same time, usage text detection in AjdtCommand::inferKind was
improved and also adjusted to the new situation.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
If 'name' is identical to 'artifactId' and 'packaging' has the default
value 'jar', we can just remove those tags from the POM.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
No more manual version setting everywhere.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
This is one step to get rid of org.aspectj:org.eclipse.jdt.core and
org.aspectj:asm-renamed in the 'lib' directory.

AspectJ tools + weaver uber JAR builds now use dependencies in the POM
in order to deal with creating binary + source assemblies. They no
longer rely on manually updated copies under 'lib'. Details:
  - Binaries are copied via 'dependencySets' in the assembly descriptor.
  - Sources are unzipped via Maven Dependency Plugin before including
    them into the source uber JAR via assembly descriptor.
  - NEW: This also includes ASM-renamed sources which so far were
    ignored. It is a positive side-effect from the fact that for
    ASM-renamed Maven Shade automatically creates a source JAR.
  - Maven Ant Run is no longer used for unzipping binary + source JARs.
  - While working in parallel with JDT Core and AspectJ it is now much
    easier to produce up to date artifacts, e.g. for consumption by
    AJDT, because it does not matter anymore if we forget to run the
    build in module 'lib' in order to update the JDT Core copy.

Status quo:
  - Folder lib/asm is no longer used and will be removed in a subsequent
    commit.
  - Folder lib/jdtcore-aj is no longer used by the Maven build, but
    still referenced in a few UNIX shell scripts and Ant build files.
    TODO: Find out if those are still actively used. If yes, refactor
    them to look for the file in the local Mavven repository. Otherwise,
    delete the referencing files and also lib/jdtcore-aj.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
The new string AjcTestCase.CLASSPATH_ASM_RENAMED dynamically determines
the 'asm-renamed' location from the classpath, system property
'java.class.path'.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Previously I renamed the source assemblies from the uniform name
'sources' to something more individual like 'aspectjtools-sources', not
realising that the magic name 'sources' in combination with the default
configuration value 'appendAssemblyId=true' results in an artifact
classifier equal to the assembly ID, i.e. 'sources', which is exactly
what we need here, but not quite obvious. Therefore, I documented it
with comments in both the assemblies and the POMs.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
These scripts look pretty antique and obsolete.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
@kriegaex
Copy link
Contributor Author

kriegaex commented Apr 24, 2021

Where to get snapshot versions of AspectJ, AJDT and AspectJ Maven for Java 15+16

In #39 (comment) @s-jepsen asked:

Any idea, when version 1.9.7 will be released?

In addition to my lengthy answer there, explaining why it takes so long, I also want to enable everyone eager to try the current versions of

  • AspectJ 1.9.7 snapshot,
  • AJDT (AspectJ Development Tools) for Eclipse IDE 2.2.4 snapshot and
  • AspectJ Maven Plugin 1.12.7 snapshot

to be able to use them for testing purposes.

Because I cannot release to Maven Central or Sonatype OSS Snapshots with the org.aspectj or com.nickwongdev group IDs and also wish to avoid for now that other users have to fiddle with GitHub tokens in their Maven settings in order to access artifacts from Maven Packages (there is no option to make them available without authentication, please complain to GitHub), I just set up a temporary workaround for now: I deployed to a little Maven repossitory on my domain aspectj.dev. It is just a webserver, but the directory layout is exactly like a regular repository such as Maven Central, because I deployed to the server using mvn deploy, including checksums, POMs, source JARs and other meta data.

FYI, You can browse the repository under:
https://aspectj.dev/maven/

Using AspectJ installer

If you want to install AspectJ locally using an executable JAR, just download the installer here. The file name ends with .jar and contains a timestamp. Open a console with admin rights (important under Windows) and call java -jar installer-1.9.7.BUILD-20210425.042609-1.jar (please adjust to the exact file name or rename the file to something simpler).

Build using Maven

If you like to use Maven to build your projects, you can do something like this:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.acme</groupId>
  <artifactId>my-application</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>16</maven.compiler.source>
    <maven.compiler.target>16</maven.compiler.target>
    <aspectj.version>1.9.7.BUILD-SNAPSHOT</aspectj.version>
  </properties>

  <!-- If you need artifacts (e.g. AspectJ tools or runtime) from the aspectj.dev temporary Maven repository -->
  <repositories>
    <repository>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
      <id>aspectj-dev</id>
      <name>AspectJ artifacts on aspectj.dev</name>
      <url>https://aspectj.dev/maven</url>
      <layout>default</layout>
    </repository>
  </repositories>

  <!-- If you need artifacts (e.g. AspectJ tools or runtime) from the aspectj.dev temporary Maven repository -->
  <pluginRepositories>
    <pluginRepository>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
      <id>aspectj-dev</id>
      <name>AspectJ artifacts on aspectj.dev</name>
      <url>https://aspectj.dev/maven</url>
      <layout>default</layout>
    </pluginRepository>
  </pluginRepositories>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>${maven.compiler.source}</source>
          <target>${maven.compiler.target}</target>
          <!-- If you wish to use JDK preview features, such as sealed classes under Java 16 -->
          <compilerArgs>--enable-preview</compilerArgs>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.nickwongdev</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.12.7-SNAPSHOT</version>
        <configuration>
          <complianceLevel>${maven.compiler.target}</complianceLevel>
          <source>${maven.compiler.source}</source>
          <target>${maven.compiler.target}</target>
          <!-- If you wish to use JDK preview features, such as sealed classes under Java 16 -->
          <enablePreview>true</enablePreview>
          <showWeaveInfo>true</showWeaveInfo>
          <verbose>true</verbose>
          <Xlint>ignore</Xlint>
          <encoding>UTF-8</encoding>
        </configuration>
        <executions>
          <execution>
            <goals>
              <!-- use this goal to weave all your main classes -->
              <goal>compile</goal>
              <!-- use this goal to weave all your test classes -->
              <goal>test-compile</goal>
            </goals>
          </execution>
        </executions>
        <!-- You only need this, if you want to override the version used by AspectJ Maven -->
        <!--
        <dependencies>
          <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjtools</artifactId>
            <version>${aspectj.version}</version>
          </dependency>
        </dependencies>
        -->
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>${aspectj.version}</version>
    </dependency>
  </dependencies>

</project>

Install AJDT (AspectJ Development tools) for Eclipse IDE

First, you need an up to date Eclipse IDE 4.19 (2021-03), ideally with Java 16 support installed from the Eclipse Marketplace.

Then you can download the AJDT ZIP archive containing all features from aspectj.dev. The file name ends with .zip and contains a timestamp. I looks like org.eclipse.ajdt.releng-2.2.4-20210425.043230-1.zip.

Add the ZIP archive as a virtual software site in Eclipse:

image

image

image

Now you can install AJDT using "Help" -> "Install new software", selecting the previously defined virtual software site from the list and all the AJDT packages you wish to install:

image

Click through the end of the installer, accept the licence and when asked, restart Eclipse IDE. After that, you should be able to use the AJDT with the latest AspectJ features. If anything goes wrong, you can always downgrade to a previous state.

@Kaciras
Copy link

Kaciras commented Apr 25, 2021

Can not download aspectjweaver from https://scrum-master.de/maven2/org/aspectj/aspectjweaver/1.9.7.BUILD-SNAPSHOT/maven-metadata.xml, I found a maven-metadatal.xml in the repository, it seems like a typo.

Snipaste_2021-04-25_10-46-18

@kriegaex
Copy link
Contributor Author

kriegaex commented Apr 25, 2021

I found a maven-metadatal.xml in the repository, it seems like a typo.

Good catch! My bad, fixed. Try again, please. I also just uploaded dependency-reduced POMs.

@kriegaex
Copy link
Contributor Author

kriegaex commented Apr 25, 2021

I have found a better way to create a Maven repository, deploying everything there via WebDAV, so now we have more meta data and checksums too. I have updated the description above in order to reflect the changes. I also took the opportunity to switch the domain name from scrum-master.de to aspectj.dev, a domain I have owned for quite a while but never used actively. This is about to change, because I want to make developer builds available there for users who can live with adding an extra repository for testing snapshots.

Because I had to fork the unmaintained AspectJ Maven Plugin anyway in order to make it ready for the JDK 14-16 features, I also changed the group ID to dev.aspectj, which will stay that way and which I will also publish like that on Maven Central when we have an AspectJ 1.9.7 release and the plugin no longer needs to rely on snapshot versions.

For everyone who has used the first solution with the scrum-master.de repository, I recommend to completely delete the following subdirectories in your local Maven repository, i.e. under <user-home>/.m2/repository:

  • com/nickwongdev
  • org/aspectj
  • eclipse/ajdt

This is because if you used Maven before to download from scrum-master.de, Maven will store metadata in files like _remote.repositories, resolver-status.properties, maven-metadata-scrum-master.xml and maybe others, which will make Maven search for artifacts there in the future, even after you switched your POM to aspectj.dev. So please clean that up if you were an early adopter of the first solution. You can delete just the file types I mentioned, but I cannot guarantee that this is the full clean-up.

P.S.: I am going to delete the old https://scrum-master.de/maven2/ now, so you do not accidentally download again from there and at least get error messages from Maven if you did not clean up yet.

@@ -0,0 +1,201 @@
<?xml version="1.0" encoding="UTF-8"?>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't it be cleaner to just depend on asm in a regular way and shade it during the AspectJ packaging process?

Copy link
Contributor Author

@kriegaex kriegaex Apr 26, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea. Funny that you are asking about it just now, because I was thinking aloud about it just today in kriegaex@18f3385 for other reasons (creating dependency-reducesd POMs for future direct deployment to Maven Central). See also the e-mail I just sent you a couple of minutes ago, before reading this comment.

At the time I migrated the shading + relocation process for ASM from Ant to Maven, I not want to migrate all affected artifacts from Maven Assembly Plugin to Maven Shade, it would have been too much at the same time. But AFAIK, Maven Assembly cannot relocate. It is certainly an option to migrate to Maven Shade in the future, though.

@aclement
Copy link
Contributor

So is this ok to merge now?

It is a bit of a shame it includes so many different kinds of things, makes it hard to review. It is titled to handle changing the dependency structure, but simple refactorings are mixed in and doc formatting changes are mixed in. I would have preferred a stack of separate PRs. But anyway, I'm happy with what I've reviewed, just need to know when you want it in. Isn't all the important info about installation of AJDT/etc/etc all just going to disappear when I close the PR?

This change affects the following modules:
  - aspectjmatcher
  - aspectjrt
  - aspectjtools
  - aspectjweaver
  - installer

They have in common that they all use Maven Assembly Plugin in order to
create some kind of uber JARs with constituent modules and/or libraries.
Except for the installer, they are all available on Maven Central today,
but I think it would not hurt to deploy the installer to there, too.

Changes made:
  - Use Flatten Maven Plugin in order to create simple POMs with only
    basic information and - most importantly - without dependencies.
  - The new dependency-reduced POM (DRP) or "flattened POM" gets
    attached to the build, i.e. it will be installed and deployed as a
    replacement of the original POM.
  - Attaching the DRP only works for 'jar' type modules, which is why I
    changed the packaging type for each module from 'pom' to 'jar'.
  - Deactivate generation of the default JAR for each module. This is
    necessary now, since we have the 'jar' packaging type.
  - Make sure that assembly descriptors using 'dependencySet' entries
    have set option 'useProjectArtifact=false' in order to avoid
    warnings about the non-existing main artifact.

TODO:
  - Explore option to migrate from Maven Assembly to Maven Shade,
    because it does not need descriptor files, can also generate source
    JARs and can automatically create and attach a DRP which is less
    fragmentary than the one created by Flatten Maven, basically the
    original JAR minus the dependencies.
  - If in the future we want to make sure to only deploy the modules
    listed above, e.g. to Maven Central, if simply calling 'mvn deploy'
    for the whole project, we could use 'maven.deploy.skip=true' in the
    parent POM and override it by 'maven.deploy.skip=false' just in the
    few modules which need to be deployed. See also:
    https://stackoverflow.com/a/29574812/1082681
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
@kriegaex
Copy link
Contributor Author

kriegaex commented Apr 26, 2021

So is this ok to merge now?

I think so, yes. Have you reviewed the commit I just pushed a couple of minutes ago, too, or did that intersect with your review?

It is a bit of a shame it includes so many different kinds of things, makes it hard to review. It is titled to handle changing the dependency structure, but simple refactorings are mixed in and doc formatting changes are mixed in. I would have preferred a stack of separate PRs.

Yes, that would have been better, but we had some kind of PR traffic jam, you were swamped with all my e-mails and commit/PR comments, unable to follow up on it anyway. Firstly, I was afraid that if I would create many PRs, the chaos would be complete. Secondly, much of my additional work depended on what I had done before, so I would have ended up branching off of other branches, which would have been mainly symbolic because the new branches would have been fast forwards on the others. Furthermore, with AspectJ, JDT Core, AspectJ Maven and some test projects open at the same time in my IDE, I keep switching to the wrong windows already. Switching half a dozen branches in each all the time, waiting for the IDE to re-index the project each time etc., my own workflow would not have gotten easier. All of this is not a justification, merely an explanation why I took this shortcut.

But anyway, I'm happy with what I've reviewed, just need to know when you want it in. Isn't all the important info about installation of AJDT/etc/etc all just going to disappear when I close the PR?

It is not going to disappear, but the PR will be closed and probably nobody will happen to find the information easily. If you can point me to a place I have write access to (GitHub wiki?), like I said in my latest e-mail, I can copy that stuff over and also write an info message to the AspectJ mailing list. Maybe you could then write a sentence or two on the AspectJ website section about where to obtain developer builds, also pointing to the wiki(?) page. Edit: For now, I could also point to the comment in this (then closed) PR to the mailing list, so people would have a direct pointer.

@aclement
Copy link
Contributor

Yep, I'd redirect the website to the wiki. I just created the first page so the clone link is now visible: https://github.com/eclipse/org.aspectj.wiki.git

@aclement aclement merged commit 48e1b14 into eclipse-aspectj:master Apr 26, 2021
@kriegaex kriegaex deleted the libs-refactoring branch April 26, 2021 04:55
@kriegaex
Copy link
Contributor Author

Yep, I'd redirect the website to the wiki. I just created the first page so the clone link is now visible: https://github.com/eclipse/org.aspectj.wiki.git

Actually, I see a 404 when clicking on the link.

@kriegaex
Copy link
Contributor Author

kriegaex commented May 18, 2021

Yep, I'd redirect the website to the wiki. I just created the first page so the clone link is now visible: https://github.com/eclipse/org.aspectj.wiki.git

Actually, I see a 404 when clicking on the link.

For some reason, I just clicked the wiki link from the Eclipse repository main page, and there I see the wiki stub. The correct URL is:
https://github.com/eclipse/org.aspectj/wiki

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Eliminate binaries from Git repository
3 participants