在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
相关产品推荐
相关产品推荐

