Liquibase配置classpath提示jar不存在,能否使用相对index.js的路径?
问题原因
你当前配置的classpath值/jar/migrations-0.0.1-SNAPSHOT.jar以斜杠开头,属于系统根路径写法,Windows环境下会直接解析到当前磁盘根目录(即报错信息里的C盘根目录),因此无法匹配到项目目录内的jar包。
解决方案
不需要强制填写绝对路径,你可以用Node.js内置的__dirname变量生成相对于index.js的路径:__dirname会自动返回当前执行的index.js所在目录的绝对路径,拼接jar包的相对路径即可适配所有环境。
修改后的配置代码如下:
// 顶部先引入path模块 const path = require('path'); const POSTGRESSQL_DEFAULT_CONFIG = require('liquibase').POSTGRESSQL_DEFAULT_CONFIG; const myConfig = { ...POSTGRESSQL_DEFAULT_CONFIG, changeLogFile: 'db/master/changelog.xml', url: 'jdbc:postgresql://localhost:5432/saft-demo-dump?allowMultiQueries=TRUE', username: 'postgres', password: '*****', // 拼接index.js所在目录到jar包的相对路径 classpath: path.join(__dirname, './jar/migrations-0.0.1-SNAPSHOT.jar') } const instTs = new LiquibaseTS(myConfig);
注意事项
- 不要给相对路径开头加斜杠,否则会被系统识别为根路径,无法匹配项目内的资源
- 如果你所用的LiquibaseTS封装已做了项目路径适配,也可以直接写
classpath: "./jar/migrations-0.0.1-SNAPSHOT.jar"测试是否生效,上述__dirname拼接方案兼容性更高,优先使用。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

