Stamatis Zampetakis created CALCITE-5300: --------------------------------------------
Summary: Cannot access org.immutables.value.Value error when extending standard rules Key: CALCITE-5300 URL: https://issues.apache.org/jira/browse/CALCITE-5300 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.32.0 Environment: Tested with JDK 8, 11, 17, 19 Reporter: Stamatis Zampetakis A compilation error is raised when a project depends on calcite-core (version 1.28.0 onwards) and log4j2-core and there is a custom rule extending some standard rule from Calcite, which uses the [Immutables library](https://immutables.github.io/) {{@Value}} annotation. The error is the following: {noformat} [ERROR] cannot access org.immutables.value.Value [ERROR] class file for org.immutables.value.Value not found {noformat} To reproduce the problem it suffices to do the following. 1. Create a maven project with the following dependencies: {noformat} <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-core</artifactId> <version>1.32.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.1</version> </dependency> {noformat} 2. Write a rule that extends some standard rule from Calcite. {code:java} import org.apache.calcite.rel.rules.ProjectMergeRule; public class MyProjectMergeRule extends ProjectMergeRule { public MyProjectMergeRule(Config config) { super(config); } } {code} 3. Compile the project {code:java} mvn clean install {code} The problem is not dependent to a specific JDK or maven version but does require log4j-core to be in the classpath; log4j-core has an annotation processor and this somehow triggers the problem when the annotations are not in the classpath (LOG4J2-3609). Calcite does not declare the immutable annotations as an implementation dependency thus the annatations are not present in (the classpath of) 3rd party projects depending on calcite-core. -- This message was sent by Atlassian Jira (v8.20.10#820010)