98 Star 574 Fork 123

闲.大赋(李家智) / Beetl

 / 详情

antlr4-runtime 4.9.3 与hibenate 6的 antlr4-runtime 4.10.1兼容问题

待办的
创建于  
2023-03-16 21:52

咱门beetl 3.14.1.RELEASE版本虽然支持springboot3了,但是antlr4-runtime 为4.9.3版本,没法使用spring data jpa啊,spring data jpa中 hibernate 的 antlr4-runtime为4.10.1版本。

评论 (5)

林林七 创建了任务

@林林七 beetl可以打包各个版本的antlr,下周发布一个打包最新antlr的版本

@林林七 已经支持,可以使用如下

<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl-springboot-starter-jdk17</artifactId>
    <version>3.15.0.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-runtime</artifactId>
        </exclusion>
    </exclusions>
</dependency> 

@闲.大赋(李家智) 是否考虑在springboot3.x 提高 antlr4-runtime 的版本呢?

beetl仍然是与jpa的高版本antlr4冲突,我采用下面的办法,将它的版本降低到符合beetl:

<!-- https://mvnrepository.com/artifact/com.ibeetl/beetl-springboot-starter-jdk17 -->
<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl-springboot-starter-jdk17</artifactId>
    <version>3.15.14.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-runtime</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.antlr</groupId>
    <artifactId>antlr4-runtime</artifactId>
    <version>4.11.1</version>
</dependency>

兼容springboot3.x的jpa,最后的解决方案,其他一切没变,利用java的加载机制,重写 org.beetl.core.engine.DefaultTemplateEngine 类的初始化方法:
ininAntlrRuntime 中增加:||version.startsWith("4.13")

if(version.startsWith("4.10")||version.startsWith("4.11")||version.startsWith("4.12")||version.startsWith("4.13")){
                parserBuilder  = ObjectUtil.tryInstance("org.beetl.core.engine.BeetlAntlrParser411",classLoader);
            }else if(version.startsWith("4.9")||version.startsWith("4.8")||version.startsWith("4.7")){
                parserBuilder  = ObjectUtil.tryInstance("org.beetl.core.engine.BeetlAntlrParser49",classLoader);
            }else if(version.startsWith("4.5")||version.startsWith("4.6")) {
                parserBuilder  = ObjectUtil.tryInstance("org.beetl.core.engine.BeetlAntlrParser45",classLoader);
            }
            if(parserBuilder==null){
                throw new IllegalArgumentException("不支持的antlr版本:"+version+",联系xiandafu@126.con 定制,或者参考源码antlr4.5-support");
            }

输入图片说明

@闲.大赋(李家智) 作者手动判断 antlr 的版本号,感觉有点奇怪。建议改成下面的:

// 伪代码 version=4.13.0
if(Integer.valueOf(version.split("\\.")[1])>=10){
    parserBuilder  = ObjectUtil.tryInstance("org.beetl.core.engine.BeetlAntlrParser411",classLoader);
}

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
29 xiandafu 1678706040 2159235 lingkang top 1578967487
Java
1
https://gitee.com/xiandafu/beetl.git
git@gitee.com:xiandafu/beetl.git
xiandafu
beetl
Beetl

搜索帮助