Bug 534801 - iajc 1.9.1 fails on OpenJDK 9 / Ubuntu Server 16.04.4.LTS
Summary: iajc 1.9.1 fails on OpenJDK 9 / Ubuntu Server 16.04.4.LTS
Status: RESOLVED NOT_ECLIPSE
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.9.1   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-05-17 05:19 EDT by Adam Retter CLA
Modified: 2018-06-22 13:18 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Adam Retter CLA 2018-05-17 05:19:17 EDT
We are seeing problems with iajc with OpenJDK 9 on AppVeyor Ubuntu image (Ubuntu Server 16.04.4 LTS).
The error that we get is below, you can see the full error here: https://ci.appveyor.com/project/AdamRetter/exist/build/develop-568/job/5ndk8gitdwkn6a39?fullLog=true

Interestingly:
1. Both Oracle JDK 8 and 9 work just fine on AppVeyor Visual Studio 2017 image (Windows Server 2016).
2. Both Oracle JDK 8 and JDK 9 work fine on Travis Ubuntu (Ubuntu 14.04.5 LTS).
2. Also, both OpenJDK 8 and 10 work fine on AppVeyor Ubuntu. So the problem is specifically OpenJDK 9 on AppVeyor Ubuntu.

I was particularly surprised that OpenJDK 10 works where OpenJDK 9 does not!


compile-aspectj:
     [echo] Compiling aspects with Java 9 from 1.8 source to 1.8 target, debug on, optimize on, deprecation off
     [iajc] org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:438)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:166)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt.acceptModule(ClasspathJrt.java:254)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt$2.visitModule(ClasspathJrt.java:221)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt$2.visitModule(ClasspathJrt.java:1)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.util.JrtFileSystem$1.preVisitDirectory(JRTUtil.java:386)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.util.JrtFileSystem$1.preVisitDirectory(JRTUtil.java:1)
     [iajc] 	at java.nio.file.Files.walkFileTree(java.base@9-internal/Files.java:2702)
     [iajc] 	at java.nio.file.Files.walkFileTree(java.base@9-internal/Files.java:2767)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.util.JrtFileSystem.walkModuleImage(JRTUtil.java:374)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:148)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt.loadModules(ClasspathJrt.java:203)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt.initialize(ClasspathJrt.java:191)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem.getClasspath(FileSystem.java:346)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem.getClasspath(FileSystem.java:260)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildConfig.processStringPath(AjBuildConfig.java:264)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildConfig.computeCheckedClasspath(AjBuildConfig.java:936)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildConfig.getCheckedClasspaths(AjBuildConfig.java:271)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.getLibraryAccess(AjBuildManager.java:956)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1058)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:276)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:189)
     [iajc] 	at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:114)
     [iajc] 	at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
     [iajc] 	at org.aspectj.tools.ajc.Main.run(Main.java:371)
     [iajc] 	at org.aspectj.tools.ajc.Main.runMain(Main.java:248)
     [iajc] 	at org.aspectj.tools.ajc.Main.main(Main.java:84)
     [iajc] Caused in module-info.class by: java.lang.ArrayIndexOutOfBoundsException: 32
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ModuleInfo.readModuleAttribute(ModuleInfo.java:136)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ModuleInfo.createModule(ModuleInfo.java:110)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:422)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:166)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt.acceptModule(ClasspathJrt.java:254)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt$2.visitModule(ClasspathJrt.java:221)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt$2.visitModule(ClasspathJrt.java:1)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.util.JrtFileSystem$1.preVisitDirectory(JRTUtil.java:386)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.util.JrtFileSystem$1.preVisitDirectory(JRTUtil.java:1)
     [iajc] 	at java.nio.file.Files.walkFileTree(java.base@9-internal/Files.java:2702)
     [iajc] 	at java.nio.file.Files.walkFileTree(java.base@9-internal/Files.java:2767)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.util.JrtFileSystem.walkModuleImage(JRTUtil.java:374)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:148)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt.loadModules(ClasspathJrt.java:203)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt.initialize(ClasspathJrt.java:191)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem.getClasspath(FileSystem.java:346)
     [iajc] 	at org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem.getClasspath(FileSystem.java:260)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildConfig.processStringPath(AjBuildConfig.java:264)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildConfig.computeCheckedClasspath(AjBuildConfig.java:936)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildConfig.getCheckedClasspaths(AjBuildConfig.java:271)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.getLibraryAccess(AjBuildManager.java:956)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1058)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:276)
     [iajc] 	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:189)
     [iajc] 	at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:114)
     [iajc] 	at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
     [iajc] 	at org.aspectj.tools.ajc.Main.run(Main.java:371)
     [iajc] 	at org.aspectj.tools.ajc.Main.runMain(Main.java:248)
     [iajc] 	at org.aspectj.tools.ajc.Main.main(Main.java:84)
```
Comment 1 Andrew Clement CLA 2018-05-18 20:00:54 EDT
It looks like there is something unusual about the module attributes in the jars in that particular JDK build. Very strange. I find it hard to blame the JDT module attribute reading code as that spec is pretty basic and if there were mistakes in there it'd be triggering on all kinds of JDK. I'm going to try and get hold of that JDK build (don't suppose you have a link to the exact one?).  Failing that I can add some diagnostics to print out the offending module which will help us narrow it down.
Comment 2 Adam Retter CLA 2018-05-22 02:46:27 EDT
I modified our Ant build script to print out the JDK details. They are as below:

     [echo] Java Vendor: Oracle Corporation
     [echo] Java Version: 9-internal+0-2016-04-21-232247.buildd.src
     [echo] Java VM: OpenJDK 64-Bit Server VM 9-internal+0-2016-04-21-232247.buildd.src
     [echo] Apache Ant(TM) version 1.10.2 compiled on February 3 201
Comment 3 Andrew Clement CLA 2018-05-22 16:46:38 EDT
Hmm, that date in the JDK build is a bit old '2016-04-21' - isn't that before it even released? I recall the format of the module attribute definitions changing during the last little while before java9 came out. Maybe that build provisioned in that environment is so old that it has the 'older format' module attributes and AspectJ9 can't process them since it expects the format from the released Java9. (What is the openjdk9 version info in the working ubuntu?)
Comment 4 Adam Retter CLA 2018-05-25 16:01:35 EDT
Andrew, that is very interesting! I have opened a ticket with AppVeyor support to see if they can do anything - https://help.appveyor.com/discussions/problems/14365-jdk-9-on-ubuntu-is-very-outdated
Comment 5 Adam Retter CLA 2018-05-25 16:08:55 EDT
The JDK 9 versions that we have working and are using on hosted CI are both Oracle JDKs (not OpenJDKs as they are not provided):

AppVeyor Microsoft Windows:
  [echo] Java Vendor: Oracle Corporation
  [echo] Java Version: 9.0.4+11
  [echo] Java VM: Java HotSpot(TM) 64-Bit Server VM 9.0.4+11

Travis CI Ubuntu Trusty:
  [echo] Java Vendor: Oracle Corporation
  [echo] Java Version: 9.0.1+11
  [echo] Java VM: Java HotSpot(TM) 64-Bit Server VM 9.0.1+11


Thanks Adam.
Comment 6 Adam Retter CLA 2018-06-22 13:18:34 EDT
Andrew,

Thanks for the help. AppVeyor have updated their version of OpenJDK 9, which now resolves our problem. They fixed the issue here: https://github.com/appveyor/ci/issues/2382#issuecomment-399370895

I am going to close this as "resolved".