前提
解决的是参考这篇教程学习CodeQL时遇到的问题:CodeQL从入门到放弃
解决方案
原命令
database create ~/CodeQL/databases/micro-service-seclab-database --language="java" --command="mvn clean install --file pom.xml" --source-root=~/CodeQL/micro-service-seclab/
改为
database create ~/CodeQL/databases/micro-service-seclab-database --language="java" --command="mvn clean install -DskipTests --file pom.xml" --source-root=~/CodeQL/micro-service-seclab/
也就是在 mvn clean install
后加上 -DskipTests
跳过项目单元测试。
原理分析
核心报错:
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
说明 SpringBoot 在加载应用上下文时尝试连接数据库,但找不到 hibernate.dialect
,也无法从数据库连接中自动推断,因此失败。
解决逻辑
CodeQL 构建数据库的本质是追踪项目的编译过程,因此不需要运行测试。只要项目代码能成功编译,CodeQL 就能生成数据库。所以直接跳过。
其他注意点
还是应该尊重教程的环境(JDK版本和Maven版本)
- JDK版本切换建议阅读这篇教程:三个步骤教会你自由切换JDK版本,超级简单!
- JDK 1.8下载在这篇教程找链接:Java8(JDK1.8)最新下载安装教程
- Maven 3.6.3下载在这篇教程找链接:maven3.6.3下载与安装。