Linux服务器上JDeveloper ojmake无法加载pom.xml引用库的问题求助
Oracle ADF Maven项目CI/CD中ojmake依赖识别问题解决
关于ojmake对jpr类路径的依赖
是的,ojmake默认会优先读取JDeveloper项目文件(.jpr/.jpx)中的传统类路径配置,而非自动继承Maven的依赖上下文。本地环境正常是因为JDeveloper已经基于jpr配置维护了本地依赖缓存,但CI环境没有这个缓存,且ojmake默认不会主动扫描Maven已加载的依赖库,这就导致了编译时的package does not exist错误。
同步pom.xml与jpr描述符的方法
1. 用Oracle Maven插件自动同步
Oracle官方的oracle-maven-plugin提供了initialize目标,可基于pom.xml的依赖自动更新jpr文件的类路径配置。在CI流水线中,先执行以下命令完成同步:
mvn oracle:initialize
该命令会将pom中声明的依赖同步到jpr的<classpath>节点,确保ojmake能读取到正确的依赖条目。
2. 手动统一依赖配置(精确控制场景)
如果自动同步不符合需求,可手动编辑.jpr文件:
- 打开项目的
.jpr文件,定位到<classpath>节点 - 移除本地路径的依赖条目,替换为Maven依赖的引用格式,示例:
同时确保pom.xml中已声明对应依赖,保持两边配置一致。<classpath> <library name="com.oracle.adf.library:adf-controller:12.2.1.4.0" type="maven"/> <!-- 其他Maven依赖按此格式添加 --> </classpath>
调整CI流水线的ojmake插件配置
在pom.xml的oracle-maven-plugin配置中,显式传递Maven的编译类路径给ojmake,强制其使用Maven依赖而非仅依赖jpr配置:
<plugin> <groupId>com.oracle.maven</groupId> <artifactId>oracle-maven-plugin</artifactId> <version>12.2.1.4.0</version> <executions> <execution> <id>ojmake-compile</id> <phase>compile</phase> <goals> <goal>ojmake</goal> </goals> <configuration> <source>${project.build.sourceDirectory}</source> <destdir>${project.build.outputDirectory}</destdir> <!-- 注入Maven编译阶段的完整类路径 --> <classpath>${project.compileClasspathElements}</classpath> <project>${project.basedir}/src/main/META-INF/adf-config.xml</project> </configuration> </execution> </executions> </plugin>
${project.compileClasspathElements}会自动获取Maven编译阶段的所有依赖路径,确保ojmake能找到所需的包。
CI环境额外注意事项
- 确保CI环境的Maven settings.xml已配置Oracle Maven仓库,能正常拉取ADF相关依赖
- 不要依赖CI环境中的本地JDeveloper安装路径,所有依赖均通过Maven管理
- 执行ojmake前,确保
mvn compile已完成,编译产物已生成
内容的提问来源于stack exchange,提问作者30thh
相关产品推荐
相关产品推荐

