-
Bug
-
Resolution: Unresolved
-
P4
-
None
-
17
-
generic
-
generic
ADDITIONAL SYSTEM INFORMATION :
Tested under Linux and Windows using multiple Java Releases.
Linux codespaces-3d7cb7 5.4.0-1105-azure #111~18.04.1-Ubuntu SMP Fri Mar 3 22:47:43 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Windows 10 Enterprise Edition
Tested JDKS 17(Temurin, Coretto and Microsoft), 20, 21-ea (see below)
The script test-jdks.sh (see Repository below) produces the following Informations with each JDK:
With Import
BEGIN Thu Apr 6 09:09:25 UTC 2023
- - - - - -
openjdk version "17.0.6" 2023-01-17 LTS
OpenJDK Runtime Environment Microsoft-7209853 (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM Microsoft-7209853 (build 17.0.6+10-LTS, mixed mode, sharing)
javac 17.0.6
src/main/java/module-info.java:2: error: cannot find symbol
import org.example.bug.BugModule;
^
symbol: class BugModule
location: package org.example.bug
1 error
- - - - - -
java version "20" 2023-03-21
Java(TM) SE Runtime Environment (build 20+36-2344)
Java HotSpot(TM) 64-Bit Server VM (build 20+36-2344, mixed mode, sharing)
javac 20
src/main/java/module-info.java:2: error: cannot find symbol
import org.example.bug.BugModule;
^
symbol: class BugModule
location: package org.example.bug
1 error
- - - - - -
openjdk version "21-ea" 2023-09-19
OpenJDK Runtime Environment (build 21-ea+16-1326)
OpenJDK 64-Bit Server VM (build 21-ea+16-1326, mixed mode, sharing)
javac 21-ea
src/main/java/module-info.java:2: error: cannot find symbol
import org.example.bug.BugModule;
^
symbol: class BugModule
location: package org.example.bug
1 error
- - - - - -
END Thu Apr 6 09:09:30 UTC 2023
Without:
BEGIN Thu Apr 6 09:12:19 UTC 2023
- - - - - -
openjdk version "17.0.6" 2023-01-17 LTS
OpenJDK Runtime Environment Microsoft-7209853 (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM Microsoft-7209853 (build 17.0.6+10-LTS, mixed mode, sharing)
javac 17.0.6
java.base@17.0.6
java.compiler@17.0.6
java.datatransfer@17.0.6
java.desktop@17.0.6
java.instrument@17.0.6
java.logging@17.0.6
java.management@17.0.6
java.management.rmi@17.0.6
java.naming@17.0.6
java.net.http@17.0.6
java.prefs@17.0.6
java.rmi@17.0.6
java.scripting@17.0.6
java.se@17.0.6
java.security.jgss@17.0.6
java.security.sasl@17.0.6
java.smartcardio@17.0.6
java.sql@17.0.6
java.sql.rowset@17.0.6
java.transaction.xa@17.0.6
java.xml@17.0.6
java.xml.crypto@17.0.6
jdk.accessibility@17.0.6
jdk.attach@17.0.6
jdk.charsets@17.0.6
jdk.compiler@17.0.6
jdk.crypto.cryptoki@17.0.6
jdk.crypto.ec@17.0.6
jdk.dynalink@17.0.6
jdk.editpad@17.0.6
jdk.hotspot.agent@17.0.6
jdk.httpserver@17.0.6
jdk.incubator.foreign@17.0.6
jdk.incubator.vector@17.0.6
jdk.internal.ed@17.0.6
jdk.internal.jvmstat@17.0.6
jdk.internal.le@17.0.6
jdk.internal.opt@17.0.6
jdk.internal.vm.ci@17.0.6
jdk.internal.vm.compiler@17.0.6
jdk.internal.vm.compiler.management@17.0.6
jdk.jartool@17.0.6
jdk.javadoc@17.0.6
jdk.jcmd@17.0.6
jdk.jconsole@17.0.6
jdk.jdeps@17.0.6
jdk.jdi@17.0.6
jdk.jdwp.agent@17.0.6
jdk.jfr@17.0.6
jdk.jlink@17.0.6
jdk.jpackage@17.0.6
jdk.jshell@17.0.6
jdk.jsobject@17.0.6
jdk.jstatd@17.0.6
jdk.localedata@17.0.6
jdk.management@17.0.6
jdk.management.agent@17.0.6
jdk.management.jfr@17.0.6
jdk.naming.dns@17.0.6
jdk.naming.rmi@17.0.6
jdk.net@17.0.6
jdk.nio.mapmode@17.0.6
jdk.random@17.0.6
jdk.sctp@17.0.6
jdk.security.auth@17.0.6
jdk.security.jgss@17.0.6
jdk.unsupported@17.0.6
jdk.unsupported.desktop@17.0.6
jdk.xml.dom@17.0.6
jdk.zipfs@17.0.6
bug file:///workspaces/mre-avaje-inject-1/target_manual/
io.avaje.applog@1.0 file:///home/codespace/.m2/repository/io/avaje/avaje-applog/1.0/avaje-applog-1.0.jar
io.avaje.inject@9.0 file:///home/codespace/.m2/repository/io/avaje/avaje-inject/9.0/avaje-inject-9.0.jar
io.avaje.lang@1.1 file:///home/codespace/.m2/repository/io/avaje/avaje-lang/1.1/avaje-lang-1.1.jar
jakarta.inject@2.0.1 file:///home/codespace/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar
Apr 06, 2023 9:12:21 AM io.avaje.inject.spi.DBeanScope start
INFO: Wired beans in 19ms
org.example.bug.TestFactory@6438a396
- - - - - -
java version "20" 2023-03-21
Java(TM) SE Runtime Environment (build 20+36-2344)
Java HotSpot(TM) 64-Bit Server VM (build 20+36-2344, mixed mode, sharing)
javac 20
java.base@20
java.compiler@20
java.datatransfer@20
java.desktop@20
java.instrument@20
java.logging@20
java.management@20
java.management.rmi@20
java.naming@20
java.net.http@20
java.prefs@20
java.rmi@20
java.scripting@20
java.se@20
java.security.jgss@20
java.security.sasl@20
java.smartcardio@20
java.sql@20
java.sql.rowset@20
java.transaction.xa@20
java.xml@20
java.xml.crypto@20
jdk.accessibility@20
jdk.attach@20
jdk.charsets@20
jdk.compiler@20
jdk.crypto.cryptoki@20
jdk.crypto.ec@20
jdk.dynalink@20
jdk.editpad@20
jdk.hotspot.agent@20
jdk.httpserver@20
jdk.incubator.concurrent@20
jdk.incubator.vector@20
jdk.internal.ed@20
jdk.internal.jvmstat@20
jdk.internal.le@20
jdk.internal.opt@20
jdk.internal.vm.ci@20
jdk.internal.vm.compiler@20
jdk.internal.vm.compiler.management@20
jdk.jartool@20
jdk.javadoc@20
jdk.jcmd@20
jdk.jconsole@20
jdk.jdeps@20
jdk.jdi@20
jdk.jdwp.agent@20
jdk.jfr@20
jdk.jlink@20
jdk.jpackage@20
jdk.jshell@20
jdk.jsobject@20
jdk.jstatd@20
jdk.localedata@20
jdk.management@20
jdk.management.agent@20
jdk.management.jfr@20
jdk.naming.dns@20
jdk.naming.rmi@20
jdk.net@20
jdk.nio.mapmode@20
jdk.random@20
jdk.sctp@20
jdk.security.auth@20
jdk.security.jgss@20
jdk.unsupported@20
jdk.unsupported.desktop@20
jdk.xml.dom@20
jdk.zipfs@20
bug file:///workspaces/mre-avaje-inject-1/target_manual/
io.avaje.applog@1.0 file:///home/codespace/.m2/repository/io/avaje/avaje-applog/1.0/avaje-applog-1.0.jar
io.avaje.inject@9.0 file:///home/codespace/.m2/repository/io/avaje/avaje-inject/9.0/avaje-inject-9.0.jar
io.avaje.lang@1.1 file:///home/codespace/.m2/repository/io/avaje/avaje-lang/1.1/avaje-lang-1.1.jar
jakarta.inject@2.0.1 file:///home/codespace/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar
Apr 06, 2023 9:12:23 AM io.avaje.inject.spi.DBeanScope start
INFO: Wired beans in 16ms
org.example.bug.TestFactory@61e4705b
- - - - - -
openjdk version "21-ea" 2023-09-19
OpenJDK Runtime Environment (build 21-ea+16-1326)
OpenJDK 64-Bit Server VM (build 21-ea+16-1326, mixed mode, sharing)
javac 21-ea
java.base@21-ea
java.compiler@21-ea
java.datatransfer@21-ea
java.desktop@21-ea
java.instrument@21-ea
java.logging@21-ea
java.management@21-ea
java.management.rmi@21-ea
java.naming@21-ea
java.net.http@21-ea
java.prefs@21-ea
java.rmi@21-ea
java.scripting@21-ea
java.se@21-ea
java.security.jgss@21-ea
java.security.sasl@21-ea
java.smartcardio@21-ea
java.sql@21-ea
java.sql.rowset@21-ea
java.transaction.xa@21-ea
java.xml@21-ea
java.xml.crypto@21-ea
jdk.accessibility@21-ea
jdk.attach@21-ea
jdk.charsets@21-ea
jdk.compiler@21-ea
jdk.crypto.cryptoki@21-ea
jdk.crypto.ec@21-ea
jdk.dynalink@21-ea
jdk.editpad@21-ea
jdk.hotspot.agent@21-ea
jdk.httpserver@21-ea
jdk.incubator.concurrent@21-ea
jdk.incubator.vector@21-ea
jdk.internal.ed@21-ea
jdk.internal.jvmstat@21-ea
jdk.internal.le@21-ea
jdk.internal.opt@21-ea
jdk.internal.vm.ci@21-ea
jdk.internal.vm.compiler@21-ea
jdk.internal.vm.compiler.management@21-ea
jdk.jartool@21-ea
jdk.javadoc@21-ea
jdk.jcmd@21-ea
jdk.jconsole@21-ea
jdk.jdeps@21-ea
jdk.jdi@21-ea
jdk.jdwp.agent@21-ea
jdk.jfr@21-ea
jdk.jlink@21-ea
jdk.jpackage@21-ea
jdk.jshell@21-ea
jdk.jsobject@21-ea
jdk.jstatd@21-ea
jdk.localedata@21-ea
jdk.management@21-ea
jdk.management.agent@21-ea
jdk.management.jfr@21-ea
jdk.naming.dns@21-ea
jdk.naming.rmi@21-ea
jdk.net@21-ea
jdk.nio.mapmode@21-ea
jdk.random@21-ea
jdk.sctp@21-ea
jdk.security.auth@21-ea
jdk.security.jgss@21-ea
jdk.unsupported@21-ea
jdk.unsupported.desktop@21-ea
jdk.xml.dom@21-ea
jdk.zipfs@21-ea
bug file:///workspaces/mre-avaje-inject-1/target_manual/
io.avaje.applog@1.0 file:///home/codespace/.m2/repository/io/avaje/avaje-applog/1.0/avaje-applog-1.0.jar
io.avaje.inject@9.0 file:///home/codespace/.m2/repository/io/avaje/avaje-inject/9.0/avaje-inject-9.0.jar
io.avaje.lang@1.1 file:///home/codespace/.m2/repository/io/avaje/avaje-lang/1.1/avaje-lang-1.1.jar
jakarta.inject@2.0.1 file:///home/codespace/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar
Apr 06, 2023 9:12:25 AM io.avaje.inject.spi.DBeanScope start
INFO: Wired beans in 16ms
org.example.bug.TestFactory@5e8c92f4
- - - - - -
END Thu Apr 6 09:12:25 UTC 2023
A DESCRIPTION OF THE PROBLEM :
The issue occurs in module-info files in combination with Avaje-Inject.
Avaje-Inject generates Dependency Injection through Annotation Processing.
For this to work ServiceLoaders are used. In conjunction with JPMS the generated Implementation has to
be provided in the module-info. All of which seem to be well within the Specification and do work when using one of the workarounds discovered.
The issue only exists under the following conditions:
1. JPMS is used
2. The generated Module is imported instead of qualified fully
Once all conditions are met a compilation will fail initially, but the Source File will be generated by javac.
After that compilation suceeds regardless, because the Type can be resolved.
Workarounds include:
1. Fully qualify Modules instead of importing them
2. Run the compilation step twice
The only similar, but different issued found wereJDK-8236319 and JDK-8235458.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Source Code for the Project is provided here:
https://github.com/NoonRightsWarriorBehindHovering/mre-avaje-inject-1
Using Maven and Javac allows to reproduce the issue easily.
Assuming Java is installed and jdk-20 and jdk-21 has been downloaded.
Maven allows automatic download of all dependencies (mvn compile, which fails), alternatively the dependencies can be downloaded from maven central and put into the locations specified in javac.sh.
By default the compilation fails.
Using the following comand:
sed '/import org.example.bug.BugModule;/d' src/main/java/module-info.java | sed 's/provides Module with BugModule/provides Module with org.example.bug.BugModule/' | tee src/main/java/module-info.java
Allows to update the sources to use the fully qualified name, which makes compilation work.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Both Maven(which uses javac internally afaik) and javac compile whether a given Module has been imported or qualified.
ACTUAL -
Compilation Errors
src/main/java/module-info.java:2: error: cannot find symbol
import org.example.bug.BugModule;
^
symbol: class BugModule
location: package org.example.bug
1 error
---------- BEGIN SOURCE ----------
See https://github.com/NoonRightsWarriorBehindHovering/mre-avaje-inject-1
Output should have been:
Apr 06, 2023 9:12:25 AM io.avaje.inject.spi.DBeanScope start
INFO: Wired beans in 16ms
org.example.bug.TestFactory@5e8c92f4
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
See above
FREQUENCY : always
Tested under Linux and Windows using multiple Java Releases.
Linux codespaces-3d7cb7 5.4.0-1105-azure #111~18.04.1-Ubuntu SMP Fri Mar 3 22:47:43 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Windows 10 Enterprise Edition
Tested JDKS 17(Temurin, Coretto and Microsoft), 20, 21-ea (see below)
The script test-jdks.sh (see Repository below) produces the following Informations with each JDK:
With Import
BEGIN Thu Apr 6 09:09:25 UTC 2023
- - - - - -
openjdk version "17.0.6" 2023-01-17 LTS
OpenJDK Runtime Environment Microsoft-7209853 (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM Microsoft-7209853 (build 17.0.6+10-LTS, mixed mode, sharing)
javac 17.0.6
src/main/java/module-info.java:2: error: cannot find symbol
import org.example.bug.BugModule;
^
symbol: class BugModule
location: package org.example.bug
1 error
- - - - - -
java version "20" 2023-03-21
Java(TM) SE Runtime Environment (build 20+36-2344)
Java HotSpot(TM) 64-Bit Server VM (build 20+36-2344, mixed mode, sharing)
javac 20
src/main/java/module-info.java:2: error: cannot find symbol
import org.example.bug.BugModule;
^
symbol: class BugModule
location: package org.example.bug
1 error
- - - - - -
openjdk version "21-ea" 2023-09-19
OpenJDK Runtime Environment (build 21-ea+16-1326)
OpenJDK 64-Bit Server VM (build 21-ea+16-1326, mixed mode, sharing)
javac 21-ea
src/main/java/module-info.java:2: error: cannot find symbol
import org.example.bug.BugModule;
^
symbol: class BugModule
location: package org.example.bug
1 error
- - - - - -
END Thu Apr 6 09:09:30 UTC 2023
Without:
BEGIN Thu Apr 6 09:12:19 UTC 2023
- - - - - -
openjdk version "17.0.6" 2023-01-17 LTS
OpenJDK Runtime Environment Microsoft-7209853 (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM Microsoft-7209853 (build 17.0.6+10-LTS, mixed mode, sharing)
javac 17.0.6
java.base@17.0.6
java.compiler@17.0.6
java.datatransfer@17.0.6
java.desktop@17.0.6
java.instrument@17.0.6
java.logging@17.0.6
java.management@17.0.6
java.management.rmi@17.0.6
java.naming@17.0.6
java.net.http@17.0.6
java.prefs@17.0.6
java.rmi@17.0.6
java.scripting@17.0.6
java.se@17.0.6
java.security.jgss@17.0.6
java.security.sasl@17.0.6
java.smartcardio@17.0.6
java.sql@17.0.6
java.sql.rowset@17.0.6
java.transaction.xa@17.0.6
java.xml@17.0.6
java.xml.crypto@17.0.6
jdk.accessibility@17.0.6
jdk.attach@17.0.6
jdk.charsets@17.0.6
jdk.compiler@17.0.6
jdk.crypto.cryptoki@17.0.6
jdk.crypto.ec@17.0.6
jdk.dynalink@17.0.6
jdk.editpad@17.0.6
jdk.hotspot.agent@17.0.6
jdk.httpserver@17.0.6
jdk.incubator.foreign@17.0.6
jdk.incubator.vector@17.0.6
jdk.internal.ed@17.0.6
jdk.internal.jvmstat@17.0.6
jdk.internal.le@17.0.6
jdk.internal.opt@17.0.6
jdk.internal.vm.ci@17.0.6
jdk.internal.vm.compiler@17.0.6
jdk.internal.vm.compiler.management@17.0.6
jdk.jartool@17.0.6
jdk.javadoc@17.0.6
jdk.jcmd@17.0.6
jdk.jconsole@17.0.6
jdk.jdeps@17.0.6
jdk.jdi@17.0.6
jdk.jdwp.agent@17.0.6
jdk.jfr@17.0.6
jdk.jlink@17.0.6
jdk.jpackage@17.0.6
jdk.jshell@17.0.6
jdk.jsobject@17.0.6
jdk.jstatd@17.0.6
jdk.localedata@17.0.6
jdk.management@17.0.6
jdk.management.agent@17.0.6
jdk.management.jfr@17.0.6
jdk.naming.dns@17.0.6
jdk.naming.rmi@17.0.6
jdk.net@17.0.6
jdk.nio.mapmode@17.0.6
jdk.random@17.0.6
jdk.sctp@17.0.6
jdk.security.auth@17.0.6
jdk.security.jgss@17.0.6
jdk.unsupported@17.0.6
jdk.unsupported.desktop@17.0.6
jdk.xml.dom@17.0.6
jdk.zipfs@17.0.6
bug file:///workspaces/mre-avaje-inject-1/target_manual/
io.avaje.applog@1.0 file:///home/codespace/.m2/repository/io/avaje/avaje-applog/1.0/avaje-applog-1.0.jar
io.avaje.inject@9.0 file:///home/codespace/.m2/repository/io/avaje/avaje-inject/9.0/avaje-inject-9.0.jar
io.avaje.lang@1.1 file:///home/codespace/.m2/repository/io/avaje/avaje-lang/1.1/avaje-lang-1.1.jar
jakarta.inject@2.0.1 file:///home/codespace/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar
Apr 06, 2023 9:12:21 AM io.avaje.inject.spi.DBeanScope start
INFO: Wired beans in 19ms
org.example.bug.TestFactory@6438a396
- - - - - -
java version "20" 2023-03-21
Java(TM) SE Runtime Environment (build 20+36-2344)
Java HotSpot(TM) 64-Bit Server VM (build 20+36-2344, mixed mode, sharing)
javac 20
java.base@20
java.compiler@20
java.datatransfer@20
java.desktop@20
java.instrument@20
java.logging@20
java.management@20
java.management.rmi@20
java.naming@20
java.net.http@20
java.prefs@20
java.rmi@20
java.scripting@20
java.se@20
java.security.jgss@20
java.security.sasl@20
java.smartcardio@20
java.sql@20
java.sql.rowset@20
java.transaction.xa@20
java.xml@20
java.xml.crypto@20
jdk.accessibility@20
jdk.attach@20
jdk.charsets@20
jdk.compiler@20
jdk.crypto.cryptoki@20
jdk.crypto.ec@20
jdk.dynalink@20
jdk.editpad@20
jdk.hotspot.agent@20
jdk.httpserver@20
jdk.incubator.concurrent@20
jdk.incubator.vector@20
jdk.internal.ed@20
jdk.internal.jvmstat@20
jdk.internal.le@20
jdk.internal.opt@20
jdk.internal.vm.ci@20
jdk.internal.vm.compiler@20
jdk.internal.vm.compiler.management@20
jdk.jartool@20
jdk.javadoc@20
jdk.jcmd@20
jdk.jconsole@20
jdk.jdeps@20
jdk.jdi@20
jdk.jdwp.agent@20
jdk.jfr@20
jdk.jlink@20
jdk.jpackage@20
jdk.jshell@20
jdk.jsobject@20
jdk.jstatd@20
jdk.localedata@20
jdk.management@20
jdk.management.agent@20
jdk.management.jfr@20
jdk.naming.dns@20
jdk.naming.rmi@20
jdk.net@20
jdk.nio.mapmode@20
jdk.random@20
jdk.sctp@20
jdk.security.auth@20
jdk.security.jgss@20
jdk.unsupported@20
jdk.unsupported.desktop@20
jdk.xml.dom@20
jdk.zipfs@20
bug file:///workspaces/mre-avaje-inject-1/target_manual/
io.avaje.applog@1.0 file:///home/codespace/.m2/repository/io/avaje/avaje-applog/1.0/avaje-applog-1.0.jar
io.avaje.inject@9.0 file:///home/codespace/.m2/repository/io/avaje/avaje-inject/9.0/avaje-inject-9.0.jar
io.avaje.lang@1.1 file:///home/codespace/.m2/repository/io/avaje/avaje-lang/1.1/avaje-lang-1.1.jar
jakarta.inject@2.0.1 file:///home/codespace/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar
Apr 06, 2023 9:12:23 AM io.avaje.inject.spi.DBeanScope start
INFO: Wired beans in 16ms
org.example.bug.TestFactory@61e4705b
- - - - - -
openjdk version "21-ea" 2023-09-19
OpenJDK Runtime Environment (build 21-ea+16-1326)
OpenJDK 64-Bit Server VM (build 21-ea+16-1326, mixed mode, sharing)
javac 21-ea
java.base@21-ea
java.compiler@21-ea
java.datatransfer@21-ea
java.desktop@21-ea
java.instrument@21-ea
java.logging@21-ea
java.management@21-ea
java.management.rmi@21-ea
java.naming@21-ea
java.net.http@21-ea
java.prefs@21-ea
java.rmi@21-ea
java.scripting@21-ea
java.se@21-ea
java.security.jgss@21-ea
java.security.sasl@21-ea
java.smartcardio@21-ea
java.sql@21-ea
java.sql.rowset@21-ea
java.transaction.xa@21-ea
java.xml@21-ea
java.xml.crypto@21-ea
jdk.accessibility@21-ea
jdk.attach@21-ea
jdk.charsets@21-ea
jdk.compiler@21-ea
jdk.crypto.cryptoki@21-ea
jdk.crypto.ec@21-ea
jdk.dynalink@21-ea
jdk.editpad@21-ea
jdk.hotspot.agent@21-ea
jdk.httpserver@21-ea
jdk.incubator.concurrent@21-ea
jdk.incubator.vector@21-ea
jdk.internal.ed@21-ea
jdk.internal.jvmstat@21-ea
jdk.internal.le@21-ea
jdk.internal.opt@21-ea
jdk.internal.vm.ci@21-ea
jdk.internal.vm.compiler@21-ea
jdk.internal.vm.compiler.management@21-ea
jdk.jartool@21-ea
jdk.javadoc@21-ea
jdk.jcmd@21-ea
jdk.jconsole@21-ea
jdk.jdeps@21-ea
jdk.jdi@21-ea
jdk.jdwp.agent@21-ea
jdk.jfr@21-ea
jdk.jlink@21-ea
jdk.jpackage@21-ea
jdk.jshell@21-ea
jdk.jsobject@21-ea
jdk.jstatd@21-ea
jdk.localedata@21-ea
jdk.management@21-ea
jdk.management.agent@21-ea
jdk.management.jfr@21-ea
jdk.naming.dns@21-ea
jdk.naming.rmi@21-ea
jdk.net@21-ea
jdk.nio.mapmode@21-ea
jdk.random@21-ea
jdk.sctp@21-ea
jdk.security.auth@21-ea
jdk.security.jgss@21-ea
jdk.unsupported@21-ea
jdk.unsupported.desktop@21-ea
jdk.xml.dom@21-ea
jdk.zipfs@21-ea
bug file:///workspaces/mre-avaje-inject-1/target_manual/
io.avaje.applog@1.0 file:///home/codespace/.m2/repository/io/avaje/avaje-applog/1.0/avaje-applog-1.0.jar
io.avaje.inject@9.0 file:///home/codespace/.m2/repository/io/avaje/avaje-inject/9.0/avaje-inject-9.0.jar
io.avaje.lang@1.1 file:///home/codespace/.m2/repository/io/avaje/avaje-lang/1.1/avaje-lang-1.1.jar
jakarta.inject@2.0.1 file:///home/codespace/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar
Apr 06, 2023 9:12:25 AM io.avaje.inject.spi.DBeanScope start
INFO: Wired beans in 16ms
org.example.bug.TestFactory@5e8c92f4
- - - - - -
END Thu Apr 6 09:12:25 UTC 2023
A DESCRIPTION OF THE PROBLEM :
The issue occurs in module-info files in combination with Avaje-Inject.
Avaje-Inject generates Dependency Injection through Annotation Processing.
For this to work ServiceLoaders are used. In conjunction with JPMS the generated Implementation has to
be provided in the module-info. All of which seem to be well within the Specification and do work when using one of the workarounds discovered.
The issue only exists under the following conditions:
1. JPMS is used
2. The generated Module is imported instead of qualified fully
Once all conditions are met a compilation will fail initially, but the Source File will be generated by javac.
After that compilation suceeds regardless, because the Type can be resolved.
Workarounds include:
1. Fully qualify Modules instead of importing them
2. Run the compilation step twice
The only similar, but different issued found were
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Source Code for the Project is provided here:
https://github.com/NoonRightsWarriorBehindHovering/mre-avaje-inject-1
Using Maven and Javac allows to reproduce the issue easily.
Assuming Java is installed and jdk-20 and jdk-21 has been downloaded.
Maven allows automatic download of all dependencies (mvn compile, which fails), alternatively the dependencies can be downloaded from maven central and put into the locations specified in javac.sh.
By default the compilation fails.
Using the following comand:
sed '/import org.example.bug.BugModule;/d' src/main/java/module-info.java | sed 's/provides Module with BugModule/provides Module with org.example.bug.BugModule/' | tee src/main/java/module-info.java
Allows to update the sources to use the fully qualified name, which makes compilation work.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Both Maven(which uses javac internally afaik) and javac compile whether a given Module has been imported or qualified.
ACTUAL -
Compilation Errors
src/main/java/module-info.java:2: error: cannot find symbol
import org.example.bug.BugModule;
^
symbol: class BugModule
location: package org.example.bug
1 error
---------- BEGIN SOURCE ----------
See https://github.com/NoonRightsWarriorBehindHovering/mre-avaje-inject-1
Output should have been:
Apr 06, 2023 9:12:25 AM io.avaje.inject.spi.DBeanScope start
INFO: Wired beans in 16ms
org.example.bug.TestFactory@5e8c92f4
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
See above
FREQUENCY : always