You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:30:00