Java 11+Quarkus 3.X集成Pentaho时依赖校验失败求助
解决Pentaho集成Quarkus 3.X/Java 11的Maven校验和错误问题
问题根源
你配置的Pentaho仓库URL是Web UI界面地址,而非Maven仓库的实际资源地址。Maven尝试从该地址下载pom文件时,获取到的是HTML页面(包含<!doctype>标签),而非合法的Maven pom,因此触发校验和不匹配错误。
解决方案步骤
1. 替换正确的Pentaho Maven仓库地址
将仓库URL修改为去掉/ui/的实际仓库地址:
<repositories> <repository> <id>PentahoRepo</id> <name>Pentaho repository</name> <!-- 修正后的仓库URL --> <url>https://repo.orl.eng.hitachivantara.com/native/pnt-mvn/</url> <layout>default</layout> <releases> <enabled>true</enabled> <updatePolicy>never</updatePolicy> <checksumPolicy>warn</checksumPolicy> </releases> </repository> </repositories>
2. 精简依赖(适配Quarkus服务器环境)
移除不必要的桌面端依赖(如kettle-ui-swt),避免引入SWT相关的本地库冲突:
<dependencies> <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-core</artifactId> <version>9.4.0.0-343</version> </dependency> <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-engine</artifactId> <version>9.4.0.0-343</version> </dependency> <!-- 仅在需要数据库对话框时保留,否则可移除 --> <!-- <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-dbdialog</artifactId> <version>9.4.0.0-343</version> </dependency> --> <!-- 使用适配Log4j2的日志插件(Quarkus默认用Log4j2) --> <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-log4j2-plugin</artifactId> <version>9.4.0.0-343</version> </dependency> </dependencies>
3. 清理本地Maven缓存
删除本地仓库中已下载的错误文件,避免残留影响:
# Windows rmdir /s /q C:\Users\vyeung\.m2\repository\pentaho-kettle # Linux/macOS rm -rf ~/.m2/repository/pentaho-kettle
Quarkus中触发Pentaho任务的示例代码
初始化Kettle环境并执行转换:
import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.trans.Trans; import org.pentaho.di.trans.TransMeta; import jakarta.enterprise.context.ApplicationScoped; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; @Path("/pentaho") @ApplicationScoped public class PentahoResource { @GET @Path("/run-transformation") public String runTransformation() { try { // 初始化Kettle环境 KettleEnvironment.init(); // 加载转换文件(路径可配置为资源文件或外部路径) TransMeta transMeta = new TransMeta("path/to/your/transformation.ktr"); Trans trans = new Trans(transMeta); // 执行转换 trans.execute(null); trans.waitUntilFinished(); if (trans.getErrors() > 0) { return "转换执行失败,错误数:" + trans.getErrors(); } else { return "转换执行成功"; } } catch (KettleException e) { return "执行出错:" + e.getMessage(); } } }
额外注意事项
- 确保Pentaho 9.4与Java 11兼容(官方已支持Java 8/11)
- Quarkus打包时,若使用原生镜像,需注意Pentaho依赖的反射/资源加载配置,可通过
quarkus.native.additional-build-args添加必要的反射配置 - 若需要数据库连接,需添加对应数据库驱动依赖,并确保Kettle转换中的连接配置正确
内容的提问来源于stack exchange,提问作者vincentyeung
相关产品推荐
相关产品推荐

