[ 
https://issues.apache.org/jira/browse/CALCITE-5300?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17610080#comment-17610080
 ] 

Stamatis Zampetakis commented on CALCITE-5300:
----------------------------------------------

A workaround to the problem is to add an explicit dependency to immutables 
value annotations:

{noformat}
<dependency>
      <groupId>org.immutables</groupId>
      <artifactId>value-annotations</artifactId>
      <version>2.8.8</version>
    </dependency>
{noformat}

However, it is not great to force other projects to add a dependency to 
immutables in order to compile their code. From my perspective this looks like 
a Calcite problem and we should find a way to deal with it.

> 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
>            Priority: Major
>
> 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)

Reply via email to