使用Tycho构建时添加额外依赖导致类编译失败的解决咨询
看起来你在Tycho构建OSGi项目时踩了依赖管理的坑,这很常见——毕竟Tycho的依赖逻辑和普通Maven完全不一样,我来帮你一步步解决:
问题根源分析
你的核心问题出在两个地方:
- Tycho依赖OSGi规范而非普通Maven逻辑:你用
maven-dependency-plugin下载的jar(比如commons-lang、PMD系列)大多不是标准OSGi Bundle,直接用Require-Bundle无法识别;且你代码里用到了commons-io却没下载对应的jar包。 - build.properties路径配置错误:你写的路径带了项目前缀,和实际jar存放的位置不匹配,导致打包时找不到文件。
分步解决方案
1. 补全缺失依赖并修复build.properties
首先,你代码里用到了org.apache.commons.io.IOUtils,但当前maven-dependency-plugin的<artifactItems>里没有这个依赖,先补上:
<artifactItem> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> <type>jar</type> </artifactItem>
然后修正build.properties的路径(去掉项目前缀,和jar实际存放的plugins目录匹配):
bin.includes = ., \ META-INF/, \ OSGI-INF/l10n/bundle, \ plugins/commons-lang-2.6.jar, \ plugins/commons-io-1.3.2.jar, \ plugins/pmd-apex-6.14.0.jar, \ plugins/pmd-core-6.14.0.jar, \ plugins/pmd-visualforce-6.14.0.jar
2. 用嵌入依赖处理非OSGi jar
因为commons-lang、PMD这些jar不是标准OSGi Bundle,不能直接用Require-Bundle,需要把它们嵌入到你的bundle中。修改Manifest.mf:
- 删掉你之前加的错误
Require-Bundle项(比如commons-lang.commons-lang这类无效的符号名) - 调整
Bundle-ClassPath,把嵌入的jar加入类路径 - 添加Bnd指令自动处理嵌入依赖的类路径
修改后的关键配置:
Bundle-ClassPath: ., plugins/commons-lang-2.6.jar, plugins/commons-io-1.3.2.jar, plugins/pmd-core-6.14.0.jar, plugins/pmd-apex-6.14.0.jar, plugins/pmd-visualforce-6.14.0.jar # 嵌入非OSGi依赖,自动处理类路径 Embed-Dependency: commons-lang, commons-io, pmd-core, pmd-apex, pmd-visualforce;scope=compile|runtime Embed-Transitive: true # 保留原有正确的Require-Bundle配置 Require-Bundle: org.jsr-305;resolution:=optional, org.eclipse.core.runtime, org.eclipse.core.resources, ... # 其他原有依赖项保持不变
3. 清理无效配置
你之前尝试在pom.xml里加普通Maven依赖是没用的,Tycho不识别这类配置,保持maven-dependency-plugin用来下载jar到plugins目录即可,不需要额外的<dependencies>块。
4. 验证构建
现在执行编译命令:
mvn clean compile
如果还有错误,检查这几点:
- 所有用到的jar都被正确下载到项目根目录的
plugins文件夹 Bundle-ClassPath里的jar路径和build.properties完全一致Embed-Dependency里的artifactId和下载的jar的artifactId完全匹配
额外建议
如果后续有类似需求,优先找OSGi化的依赖版本(比如Eclipse Orbit仓库里的commons-lang、PMD Bundle),这样可以直接用Require-Bundle,避免嵌入依赖的复杂性。
内容的提问来源于stack exchange,提问作者Nagendra Singh
相关产品推荐
相关产品推荐

