Eclipse Acceleo-Tycho:含依赖模块的项目构建优化咨询
我正在用Tycho构建Acceleo插件项目,项目的mtl模板里引入了其他项目的模块/模板,存在依赖关系。已经创建了父pom.xml并包含所有插件和特性,每个Acceleo项目也有独立的pom.xml。但编译mtl文件时,出现无法解析依赖模块的错误。我通过在pom.xml里添加<jar>条目临时解决了问题:一条指向更新站点的jar(用p2.eclipse.plugin格式),另一条是当前构建中项目的硬编码本地路径。作为Tycho/Maven新手,想知道有没有更优的解决方法。
当前使用的pom.xml片段:
<plugin> <groupId>org.eclipse.acceleo</groupId> <artifactId>org.eclipse.acceleo.maven</artifactId> <executions> <execution> <phase>compile</phase> <goals> <goal>acceleo-compile</goal> </goals> </execution> </executions> <configuration> <useBinaryResources>false</useBinaryResources> <usePlatformResourcePath>false</usePlatformResourcePath> <acceleoProject> <root>${project.basedir}</root> <entries> <entry> <input>src</input> <output>target/classes</output> </entry> </entries> <jars> <jar>p2.eclipse.plugin:com.acme.fso.mdd.acceleo.lib</jar> <jar>C:/temp/app/com.acme.fso.fsd.gen.lib.acceleo/target/com.acme.fso.fsd.gen.lib.acceleo-${project.parent.version}.jar</jar> </jars> </acceleoProject> <packagesToRegister> <packageToRegister>com.acme.fso.mdd.model.types.TypesPackage</packageToRegister> </packagesToRegister> </configuration> </plugin>
1. 用Tycho的项目依赖替换硬编码路径
对于当前构建里的Acceleo项目依赖,完全不用写死本地路径。先在当前项目的pom.xml里添加对依赖项目的Maven依赖,再在Acceleo插件配置里用maven:前缀引用它:
- 先加依赖到
<dependencies>节点:
<dependencies> <dependency> <groupId>com.acme.fso</groupId> <!-- 对应依赖项目的groupId --> <artifactId>com.acme.fso.fsd.gen.lib.acceleo</artifactId> <version>${project.parent.version}</version> <type>eclipse-plugin</type> </dependency> </dependencies>
- 然后修改
<jars>里的硬编码条目:
<jars> <jar>p2.eclipse.plugin:com.acme.fso.mdd.acceleo.lib</jar> <jar>maven:com.acme.fso:com.acme.fso.fsd.gen.lib.acceleo</jar> </jars>
这样Tycho会自动从本地构建的构件或Maven仓库里拉取依赖,不用再维护硬编码路径。
2. 统一用P2仓库管理所有依赖
如果所有依赖的Acceleo模块都放在P2仓库里(包括本地构建生成的P2仓库),可以把当前构建的项目也部署到本地P2仓库,然后直接用p2.eclipse.plugin格式引用:
- 确保父pom或当前项目配置了对应的P2仓库(包括本地构建的P2仓库路径)。
- 把依赖项目的引用改成:
<jar>p2.eclipse.plugin:com.acme.fso.fsd.gen.lib.acceleo</jar>
Tycho会自动从配置的P2仓库解析依赖,不用手动处理路径或Maven依赖。
3. 开启Acceleo插件的自动依赖解析
试试给Acceleo Maven插件加个<useProjectDependencies>true</useProjectDependencies>配置,插件会自动识别项目的Maven依赖并加到编译路径里,不用手动在<jars>里写:
修改后的Acceleo插件配置:
<configuration> <useBinaryResources>false</useBinaryResources> <usePlatformResourcePath>false</usePlatformResourcePath> <useProjectDependencies>true</useProjectDependencies> <!-- 新增这行 --> <acceleoProject> <root>${project.basedir}</root> <entries> <entry> <input>src</input> <output>target/classes</output> </entry> </entries> <!-- 只留P2仓库的依赖,本地项目依赖由自动解析处理 --> <jars> <jar>p2.eclipse.plugin:com.acme.fso.mdd.acceleo.lib</jar> </jars> </acceleoProject> <packagesToRegister> <packageToRegister>com.acme.fso.mdd.model.types.TypesPackage</packageToRegister> </packagesToRegister> </configuration>
注意:得确保项目的Maven依赖配置正确,而且依赖项目会在当前项目编译前完成构建。
内容的提问来源于stack exchange,提问作者Che

