Skip to content

Dependencies of <type>modular-processor</type> fail if project uses them with a different type #1039

@cbarlin

Description

@cbarlin

Affected version

4.0.0-rc-5

Bug description

Not sure if this is a bug in the compiler plugin or in javac, but if you have a dependency that is marked with a type of modular-processor and it depends on a module that you also depend on (as in, type modular-jar), then javac throws an java.lang.module.FindException.

Using my (admittedly quite large, sorry) project as an example you can see here I've declared my dependencies like so:

<dependency>
    <groupId>io.avaje</groupId>
    <artifactId>avaje-inject</artifactId>
    <version>${avaje-inject.version}</version>
    <type>modular-jar</type>
</dependency>
<dependency>
    <groupId>io.avaje</groupId>
    <artifactId>avaje-inject-generator</artifactId>
    <version>${avaje-inject.version}</version>
    <type>modular-processor</type>
</dependency>

(note: avaje-inject-generator itself depends on avaje-inject).

When running mvn compile though, the below stack trace occurs:

Stack trace
[INFO] --- compiler:4.0.0-beta-4:compile (default-compile) @ aru-processor-core ---
[WARNING]  Parameter 'debug' (user property 'maven.compiler.debug') is deprecated: Setting this flag to false is replaced by <debuglevel>none</debuglevel>.
[INFO] Compiling all files.
[INFO] 
[ERROR] An exception has occurred in the compiler (25). Please file a bug against the Java compiler via the Java bug reporting page (https://bugreport.java.com) after checking the Bug Database (https://bugs.java.com) for duplicates. Include your program, the following diagnostic, and the parameters passed to the Java compiler in your report. Thank you.
java.lang.module.FindException: Module io.avaje.inject not found, required by io.avaje.inject.generator
        at java.base/java.lang.module.Resolver.findFail(Resolver.java:921)
        at java.base/java.lang.module.Resolver.resolve(Resolver.java:192)
        at java.base/java.lang.module.Resolver.bind(Resolver.java:315)
        at java.base/java.lang.module.Resolver.bind(Resolver.java:219)
        at java.base/java.lang.module.Configuration.resolveAndBind(Configuration.java:543)
        at java.base/java.lang.module.Configuration.resolveAndBind(Configuration.java:347)
        at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.getServiceLoader(JavacFileManager.java:1169)
        at jdk.compiler/com.sun.tools.javac.main.DelegatingJavaFileManager.getServiceLoader(DelegatingJavaFileManager.java:169)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.initProcessorLoader(JavacProcessingEnvironment.java:270)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.<init>(JavacProcessingEnvironment.java:240)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.instance(JavacProcessingEnvironment.java:195)
        at jdk.compiler/com.sun.tools.javac.api.BasicJavacTask.initPlugins(BasicJavacTask.java:218)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.prepareCompiler(JavacTaskImpl.java:204)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:101)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
        at org.apache.maven.plugin.compiler.ToolExecutor.compile(ToolExecutor.java:968)
        at org.apache.maven.plugin.compiler.AbstractCompilerMojo.compile(AbstractCompilerMojo.java:1381)
        at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1190)
        at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:198)
        at org.apache.maven.plugin.DefaultBuildPluginManager$MojoWrapper.execute(DefaultBuildPluginManager.java:244)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:339)
        at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:310)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:214)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:179)
        at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:168)
        at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:165)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:110)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:61)
        at org.apache.maven.lifecycle.internal.DefaultLifecycleStarter.execute(DefaultLifecycleStarter.java:123)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:310)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:225)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:149)
        at org.apache.maven.cling.invoker.mvn.MavenInvoker.doExecute(MavenInvoker.java:452)
        at org.apache.maven.cling.invoker.mvn.MavenInvoker.execute(MavenInvoker.java:97)
        at org.apache.maven.cling.invoker.mvn.MavenInvoker.execute(MavenInvoker.java:81)
        at org.apache.maven.cling.invoker.LookupInvoker.doInvoke(LookupInvoker.java:165)
        at org.apache.maven.cling.invoker.LookupInvoker.invoke(LookupInvoker.java:134)
        at org.apache.maven.cling.ClingSupport.run(ClingSupport.java:76)
        at org.apache.maven.cling.MavenCling.main(MavenCling.java:51)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        at java.base/java.lang.reflect.Method.invoke(Method.java:565)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:255)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:201)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:361)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:314)

[ERROR] COMPILATION ERROR: Cannot compile io.github.cbarlin:aru-processor-core:jar:0.8.2-SNAPSHOT main classes.
[INFO] For trying to compile from the command-line, use:
    cd aru-processor-core
    javac @target/javac.args

Looking at the javac args that are given, it seems that avaje-inject-generator is included in --processor-module-path and avaje-inject is included in --module-path

Resulting javac args
--release 21
-proc:full
-g:none
--module-version 0.8.2-SNAPSHOT
--module-path "/home/conrad/.m2/repository/org/jspecify/jspecify/1.0.0/jspecify-1.0.0.jar:../advanced-record-utils-annotations/target/classes:../aru-prism-prison/target/classes:/home/conrad/.m2/repository/io/micronaut/sourcegen/micronaut-sourcegen-generator-java/1.8.4/micronaut-sourcegen-generator-java-1.8.4.jar:/home/conrad/.m2/repository/org/apache/commons/commons-lang3/3.20.0/commons-lang3-3.20.0.jar:/home/conrad/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.2.3/caffeine-3.2.3.jar:/home/conrad/.m2/repository/io/avaje/avaje-inject/12.4/avaje-inject-12.4.jar:/home/conrad/.m2/repository/com/google/errorprone/error_prone_annotations/2.43.0/error_prone_annotations-2.43.0.jar:/home/conrad/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar:/home/conrad/.m2/repository/io/avaje/avaje-inject-aop/12.4/avaje-inject-aop-12.4.jar:/home/conrad/.m2/repository/io/avaje/avaje-applog/1.2/avaje-applog-1.2.jar:/home/conrad/.m2/repository/io/avaje/avaje-inject-events/12.4/avaje-inject-events-12.4.jar:/home/conrad/.m2/repository/io/avaje/avaje-prism-core/2.0/avaje-prism-core-2.0.jar:/home/conrad/.m2/repository/io/avaje/avaje-spi-core/2.16/avaje-spi-core-2.16.jar"
--processor-module-path "/home/conrad/.m2/repository/io/avaje/avaje-inject-generator/12.4/avaje-inject-generator-12.4.jar:/home/conrad/.m2/repository/io/avaje/avaje-prisms/2.0/avaje-prisms-2.0.jar:/home/conrad/.m2/repository/io/avaje/avaje-spi-service/2.16/avaje-spi-service-2.16.jar"
--source-path "src/main/java"
-d "target/classes"
"src/main/java/io/github/cbarlin/aru/core/ClaimableOperation.java"
"src/main/java/io/github/cbarlin/aru/core/ExecutableElementUtils.java"
"src/main/java/io/github/cbarlin/aru/core/analysers/ImportAnalyser.java"
"src/main/java/io/github/cbarlin/aru/core/analysers/PackageTargetAnalyser.java"
"src/main/java/io/github/cbarlin/aru/core/analysers/TargetAnalyser.java"
"src/main/java/io/github/cbarlin/aru/core/analysers/TargetAnalysisResult.java"
"src/main/java/io/github/cbarlin/aru/core/analysers/RecordTargetAnalyser.java"
"src/main/java/io/github/cbarlin/aru/core/analysers/ConcreteTargetAnalyser.java"
"src/main/java/io/github/cbarlin/aru/core/analysers/InterfaceTargetAnalyser.java"
"src/main/java/io/github/cbarlin/aru/core/analysers/LibraryLoadedTargetAnalyser.java"
"src/main/java/io/github/cbarlin/aru/core/analysers/TypeConverterAnalyser.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/BuilderClass.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/UtilsClass.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/sorting/AnnotationSpecComparator.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/sorting/FieldSpecComparator.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/sorting/TypeNameComparator.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/sorting/MethodSpecComparator.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/sorting/TypeSpecComparator.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/ToBeBuilt.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/GenerationArtifact.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/IToBeBuilt.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/PreBuilt.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/ToBeBuiltClass.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/ToBeBuiltInterface.java"
"src/main/java/io/github/cbarlin/aru/core/artifacts/ToBeBuiltRecord.java"
"src/main/java/io/github/cbarlin/aru/core/factories/BeanScopeFactory.java"
"src/main/java/io/github/cbarlin/aru/core/factories/InterfaceElementPrismFactory.java"
"src/main/java/io/github/cbarlin/aru/core/factories/RecordComponentPrismFactory.java"
"src/main/java/io/github/cbarlin/aru/core/factories/RecordElementPrismFactory.java"
"src/main/java/io/github/cbarlin/aru/core/factories/SupportedAnnotations.java"
"src/main/java/io/github/cbarlin/aru/core/factories/SupportedAnnotationsFactory.java"
"src/main/java/io/github/cbarlin/aru/core/factories/PropertyConfigLoader.java"
"src/main/java/io/github/cbarlin/aru/core/factories/UseInterfaceDefaultClassFactory.java"
"src/main/java/io/github/cbarlin/aru/core/impl/ScopeHolder.java"
"src/main/java/io/github/cbarlin/aru/core/impl/logging/NoOpAppLog.java"
"src/main/java/io/github/cbarlin/aru/core/impl/logging/NoOpHandler.java"
"src/main/java/io/github/cbarlin/aru/core/impl/logging/NoOpLogger.java"
"src/main/java/io/github/cbarlin/aru/core/impl/types/analyser/BasicAnalyser.java"
"src/main/java/io/github/cbarlin/aru/core/impl/types/analyser/CoreSpecialisedComponentFactory.java"
"src/main/java/io/github/cbarlin/aru/core/impl/visitors/BuilderClassCreatorVisitor.java"
"src/main/java/io/github/cbarlin/aru/core/impl/visitors/InterfaceUtilsJavadocVisitor.java"
"src/main/java/io/github/cbarlin/aru/core/impl/visitors/builder/AddEmptyConstruction.java"
"src/main/java/io/github/cbarlin/aru/core/impl/visitors/builder/AddCopyConstruction.java"
"src/main/java/io/github/cbarlin/aru/core/impl/visitors/builder/AddGetter.java"
"src/main/java/io/github/cbarlin/aru/core/impl/visitors/builder/AddField.java"
"src/main/java/io/github/cbarlin/aru/core/impl/visitors/builder/AddPlainBuild.java"
"src/main/java/io/github/cbarlin/aru/core/impl/visitors/builder/AddSetter.java"
"src/main/java/io/github/cbarlin/aru/core/mirrorhandlers/MergedMirror.java"
"src/main/java/io/github/cbarlin/aru/core/mirrorhandlers/SyntheticAnnotationValue.java"
"src/main/java/io/github/cbarlin/aru/core/mirrorhandlers/SourceTrackingAnnotationMirror.java"
"src/main/java/io/github/cbarlin/aru/core/mirrorhandlers/StackingAnnotationMirror.java"
"src/main/java/io/github/cbarlin/aru/core/mirrorhandlers/MirrorOfDefaults.java"
"src/main/java/io/github/cbarlin/aru/core/mirrorhandlers/MapBasedAnnotationMirror.java"
"src/main/java/io/github/cbarlin/aru/core/mirrorhandlers/ToPrettierAnnotationSpec.java"
"src/main/java/io/github/cbarlin/aru/core/types/OperationType.java"
"src/main/java/io/github/cbarlin/aru/core/types/components/ConstructorComponent.java"
"src/main/java/io/github/cbarlin/aru/core/types/components/OptionalComponent.java"
"src/main/java/io/github/cbarlin/aru/core/types/components/TypeConverterComponent.java"
"src/main/java/io/github/cbarlin/aru/core/types/components/BasicAnalysedComponent.java"
"src/main/java/io/github/cbarlin/aru/core/types/components/DelegatingComponent.java"
"src/main/java/io/github/cbarlin/aru/core/types/components/AnalysedCollectionComponent.java"
"src/main/java/io/github/cbarlin/aru/core/types/components/AnalysedOptionalComponent.java"
"src/main/java/io/github/cbarlin/aru/core/types/AnalysedInterface.java"
"src/main/java/io/github/cbarlin/aru/core/types/AnalysedComponent.java"
"src/main/java/io/github/cbarlin/aru/core/types/AnalysedRecord.java"
"src/main/java/io/github/cbarlin/aru/core/types/AnalysedTypeConverter.java"
"src/main/java/io/github/cbarlin/aru/core/types/LibraryLoadedTarget.java"
"src/main/java/io/github/cbarlin/aru/core/types/ProcessingTarget.java"
"src/main/java/io/github/cbarlin/aru/core/types/UseInterfaceDefaultClass.java"
"src/main/java/io/github/cbarlin/aru/core/types/AnalysedType.java"
"src/main/java/io/github/cbarlin/aru/core/visitors/InterfaceVisitor.java"
"src/main/java/io/github/cbarlin/aru/core/visitors/RecordVisitor.java"
"src/main/java/io/github/cbarlin/aru/core/visitors/AruVisitor.java"
"src/main/java/io/github/cbarlin/aru/core/visitors/CollectionRecordVisitor.java"
"src/main/java/io/github/cbarlin/aru/core/wiring/CoreGlobalScope.java"
"src/main/java/io/github/cbarlin/aru/core/wiring/CorePerComponentScope.java"
"src/main/java/io/github/cbarlin/aru/core/wiring/CorePerInterfaceScope.java"
"src/main/java/io/github/cbarlin/aru/core/wiring/CorePerRecordScope.java"
"src/main/java/io/github/cbarlin/aru/core/wiring/InjectModuleFinder.java"
"src/main/java/io/github/cbarlin/aru/core/CommonsConstants.java"
"src/main/java/io/github/cbarlin/aru/core/AdvRecUtilsProcessor.java"
"src/main/java/io/github/cbarlin/aru/core/AdvRecUtilsSettings.java"
"src/main/java/io/github/cbarlin/aru/core/AnnotationSupplier.java"
"src/main/java/io/github/cbarlin/aru/core/PreviousCompilationChecker.java"
"src/main/java/io/github/cbarlin/aru/core/TypeElementUtils.java"
"src/main/java/io/github/cbarlin/aru/core/UtilsProcessingContext.java"
"src/main/java/io/github/cbarlin/aru/core/OptionalClassDetector.java"
"src/main/java/module-info.java"

Fiddling around with the arguments, if I copy (not move) the transitive depencies of avaje-inject-generator across to the --processor-module-path it does seem to move along (in that I get a different error saying that a generated class can't be found - that might be me never having used javac directly though).

I'm guessing that the plugin needs to ensure transitive dependencies always end up in the processor-module-path even if they are already in the module-path? Though to me that seems redundant...

Thanks for all the work you guys do - it's really appreciated!

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions