Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-2908

phoenix-core depends on both antlr 3.5 and antlr 2.7.7

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Resolved
    • Affects Version/s: None
    • Fix Version/s: 4.8.0
    • Labels:

      Description

      when executing 'mvn dependency:tree -pl=phoenix-core'. It shows that we depends on both antlr-3.5.jar and antlr-2.7.7.jar.

      [INFO] org.apache.phoenix:phoenix-core:jar:4.6-adh6u-SNAPSHOT
      [INFO] +- org.antlr:antlr:jar:3.5:compile
      [INFO] | - org.antlr:ST4:jar:4.0.7:compile
      [INFO] +- org.antlr:antlr-runtime:jar:3.5:compile
      [INFO] | - org.antlr:stringtemplate:jar:3.2.1:compile
      [INFO] | - antlr:antlr:jar:2.7.7:compile

      Moreover, in the final jar file phoenix-4.6.0-HBase-1.1-client.jar, it contains both antlr 3.5 and 2.7.7 too. Fortunately they have different package name and will not cause unexpected problems. So it does not have any negative effects, but it is a existed problem.

      https://github.com/antlr/stringtemplate4/issues/51
      https://github.com/antlr/antlr3/issues/75
      It seems that it is a known issue and has not been solved and never will be for antlr 3. I don't know whether it still exists in antlr 4.

      I searched the source code and generated source code and i cannot find explicit import for classes in antlr-*.jar, but only antlr-runtime instead. Is antlr 3.5 necessary for phoenix?
      I did the following things:
      1. remove antlr 3.5 dependency from pom
      2. add exclusion of stringtemplate for antlr-runtime (so it will not have the transit dependency of antlr 2.7.7)

      Then, both antlr 3.5 and antlr 2.7.7 disappeared. After that, all IT/UTs passed. Everything seems to be fine.

      Moreover, I added java parameter '-verbose:class' for sqlline.py and see which antlr class is loaded. The result shows that only classes in antlr-runtime had been loaded, not any in antlr 3.5/2.7.7.

      So, I think it might be safe to remove dependency of antlr 3.5 and exclude stringtemplate from antlr-runtime.

        Attachments

        1. PHOENIX-2908_removeBothAntlr_v3.patch
          2 kB
          William Yang
        2. PHOENIX-2908_removeBothAntlr_v2.patch
          2 kB
          William Yang
        3. PHOENIX-2908_removeBothAntlr.patch
          2 kB
          William Yang
        4. PHOENIX-2908_removeOnlyAntlr2.7.7.patch
          0.5 kB
          William Yang

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              yhxx511 William Yang
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: