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

在MWE2工作流中从OCLInEcore生成Java代码的问题

问题:Maven-Tycho构建中跳过OCL约束的代码生成

我希望在Maven-Tycho构建过程中,从带有OCL约束的.ecore元模型生成Java代码。在Eclipse环境内操作时,代码生成可正常运行,但通过MWE2工作流调用的Tycho构建却跳过了OCL相关的代码生成。

配置情况

我有一个嵌入OCL约束(OCLInEcore)的.ecore元模型model.ecore,为避免使用委托,已在对应的model.genmodel文件中配置了:

<genAnnotations source="http://www.eclipse.org/OCL/GenModel">
    <details key="Use Delegates" value="false"/>
    <details key="Use Null Annotations" value="true"/>
</genAnnotations>

同时设置了operationReflection="true",在Eclipse中打开GenModel并选择“Generate Model Code”时该配置可正常工作。

问题详情

我想通过.mwe2建模工作流调用代码生成以整合到Maven-Tycho构建中,当前工作流文件及Maven插件配置如上,但OCL相关代码未被生成。我已找到相关Bug报告及示例项目,却不清楚如何整合这些组件,请问是否遗漏了关键配置?


解决方案

以下是几个必须补充的关键配置,确保Tycho+MWE2能正确生成OCL相关代码:

1. MWE2工作流中添加OCL代码生成器依赖

在你的.mwe2文件里,需明确引入OCL的代码生成模块,确保工作流能加载OCL相关生成逻辑:

module generateModelWorkflow

import org.eclipse.emf.mwe.utils.*
import org.eclipse.emf.mwe2.ecore.*
import org.eclipse.ocl.examples.build.mwe2.*

Workflow {
    component = GenerateModel {
        genModel = "platform:/resource/your.model.project/model.genmodel"
        projectName = "your.model.project"
        // 必须添加OCL生成器的处理器
        addListener = OCLGeneratorAdapter {}
    }
}

2. Tycho构建中添加OCL相关依赖

在pom.xml里,确保Tycho构建能获取到OCL代码生成的相关插件依赖:

<dependencies>
    <!-- OCL核心依赖 -->
    <dependency>
        <groupId>org.eclipse.ocl</groupId>
        <artifactId>org.eclipse.ocl.ecore</artifactId>
        <version>[你的OCL版本]</version>
        <scope>compile</scope>
    </dependency>
    <!-- OCL代码生成依赖 -->
    <dependency>
        <groupId>org.eclipse.ocl</groupId>
        <artifactId>org.eclipse.ocl.examples.build</artifactId>
        <version>[你的OCL版本]</version>
        <scope>runtime</scope>
    </dependency>
    <!-- EMF代码生成核心依赖 -->
    <dependency>
        <groupId>org.eclipse.emf</groupId>
        <artifactId>org.eclipse.emf.codegen.ecore</artifactId>
        <version>[你的EMF版本]</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

3. 完善GenModel的OCL全局配置

除已配置的Use Delegates=false,还需确保GenModel顶层节点开启OCL代码生成开关:

  • 打开GenModel,选中顶层Model节点
  • 在Properties视图的OCL选项卡中,勾选Generate OCL Infrastructure Code和Generate OCL Body Code
  • 保存GenModel,确保配置序列化到XML中(对应<genModel>节点下会新增更多OCL相关的<details>项)

4. MWE2插件配置中指定OCL类路径

在pom.xml的Tycho MWE2插件配置里,显式添加OCL相关插件到工作流类路径:

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>tycho-mwe2-plugin</artifactId>
            <version>[你的Tycho版本]</version>
            <executions>
                <execution>
                    <id>generate-model</id>
                    <goals>
                        <goal>run-workflow</goal>
                    </goals>
                    <configuration>
                        <workflowFile>src/main/resources/generateModelWorkflow.mwe2</workflowFile>
                        <dependencies>
                            <!-- 添加OCL构建插件到工作流类路径 -->
                            <dependency>
                                <groupId>org.eclipse.ocl</groupId>
                                <artifactId>org.eclipse.ocl.examples.build</artifactId>
                                <version>[你的OCL版本]</version>
                            </dependency>
                        </dependencies>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

内容的提问来源于stack exchange,提问作者tobs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:48:22