Spring Boot+Maven配置Pkl遭遇依赖冲突问题求助
Pkl Spring Boot Maven项目依赖版本冲突解决
我在给Maven构建的Spring Boot应用配置Pkl时,参考了Pkl官方Spring文档,但文档仅提供Gradle配置指引。添加pkl-codegen-java依赖后,和已引入的pkl-spring(版本0.15.0)因版本不一致(pkl-codegen-java使用0.25.2)出现大量org.pkl.core下的重复类冲突,导致duplicate-finder-maven-plugin报错。
现有依赖配置
原依赖
<dependency> <groupId>org.pkl-lang</groupId> <artifactId>pkl-spring</artifactId> <version>0.15.0</version> <scope>compile</scope> </dependency>
新增依赖
<dependency> <groupId>org.pkl-lang</groupId> <artifactId>pkl-codegen-java</artifactId> <version>0.25.2</version> </dependency>
报错信息
[ERROR] Failed to execute goal org.basepom.maven:duplicate-finder-maven-plugin:1.4.0:check (default) on project adventureservService: Found duplicate classes/resources! -> [Help 1]
随后出现大量org.pkl.core下的重复类警告。
解决方法
1. 统一所有Pkl相关依赖版本
Pkl的各个组件(pkl-spring、pkl-codegen-java等)必须使用完全一致的版本,否则极易出现类冲突。可以选择两种方式:
- 将
pkl-spring版本升级到与pkl-codegen-java一致的0.25.2:
<dependency> <groupId>org.pkl-lang</groupId> <artifactId>pkl-spring</artifactId> <version>0.25.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.pkl-lang</groupId> <artifactId>pkl-codegen-java</artifactId> <version>0.25.2</version> </dependency>
- 或者将
pkl-codegen-java降级到0.15.0,保持版本统一。
2. 用Maven依赖管理统一管控版本
为避免后续添加Pkl组件时再次出现版本不一致,建议在dependencyManagement中引入Pkl的BOM来统一声明版本:
<dependencyManagement> <dependencies> <dependency> <groupId>org.pkl-lang</groupId> <artifactId>pkl-bom</artifactId> <version>0.25.2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
之后在dependencies中引入Pkl组件时无需指定版本,自动继承BOM中的统一版本:
<dependency> <groupId>org.pkl-lang</groupId> <artifactId>pkl-spring</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.pkl-lang</groupId> <artifactId>pkl-codegen-java</artifactId> </dependency>
3. 临时排除冲突依赖(不推荐)
如果暂时无法统一版本,可以尝试排除其中一个依赖中的重复pkl-core模块,但这种方法可能引发类缺失问题,仅作为临时方案:
例如排除pkl-spring中的pkl-core:
<dependency> <groupId>org.pkl-lang</groupId> <artifactId>pkl-spring</artifactId> <version>0.15.0</version> <scope>compile</scope> <exclusions> <exclusion> <groupId>org.pkl-lang</groupId> <artifactId>pkl-core</artifactId> </exclusion> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

