从 Java 程序执行 Kermeta 文件
execute a Kermeta file from a Java program
我开发了一个生成 Kermeta XMI 文件的转换。
我的问题是我会在后台 运行 这个转换(.kmt 文件),也就是说从 Java 程序。
我尝试了很多代码,但总是没有结果。
有人可以帮助我吗?
预先感谢您的帮助。
运行 kermeta 程序取决于 Kermeta 的版本及其执行上下文。
使用 Kermeta 2,kmt 代码被编译成 scala。由于 scala 与 java 的兼容性,可以直接从 java 调用此 scala 代码。
您首先需要声明至少一个主要操作,以便生成适当的初始化操作。
假设您在 kermeta 代码中的 class "org::example::FooToBar" 中有一个方法 "transformFooToBar"。
使用标签将其声明为主要入口点
@mainClass "org::example::FooToBar"
@mainOperation "transformFooToBar"
这个主要操作必须只有字符串参数。
这将生成一个实用程序 scala class org.example.MainRunner,其中包含有用的初始化方法和一个可以从命令行调用的主要操作。
- 案例 1/ 使用 Kermeta 2 代码从 eclipse 插件调用:
这是最简单的情况,调用方法
org.example.MainRunner.init4eclipse()
在任何其他调用之前。然后调用你的主要方法 org.example.KerRichFactory.createFooToBar.transformFooToBar()
您可以调用任何其他 classes 或方法(即,即使参数不是 String)
这对于基于kermeta转换的eclipse构建工具来说非常方便。
- 案例 2/Kermeta 2 代码从标准 java 应用程序调用(即不在 eclipse 插件中 运行ning)
那么初始化方法就是
org.example.MainRunner.init()
案例 2 的常见陷阱:许多 运行 作为独立的转换仍然需要在其内部引用系统中使用 eclipse uri 方案来操纵模型。 IE。 platform:/plugin/... , platform:/resource/..., pathmap:/... ,或更复杂的 uri 映射(通常使用自定义协议)(您可以通过查看 xmi 文件轻松检查)作为文本)
在那种情况下,由于 Eclipse 平台不 运行 提供搜索机制,您需要手动提供等效的 URI 映射以将这些 URI 映射到您的本地系统 URI(即到文件:/... 或 jar:file:/ URI)
一种可能性是使用提供此类映射的 urimap.properties 文件。默认情况下,当 运行 在 eclipse 中运行 kermeta 程序时,会为当前的 eclipse 配置生成一个 urimap.properties。
将 kermeta 程序部署到另一台计算机或使用自定义部署包时,您必须 provide/compute 目标计算机的等效文件。
为了方便起见,您可以设置此 urimap.properties 文件的位置感谢系统 属性 "urimap.file.location"
我开发了一个生成 Kermeta XMI 文件的转换。
我的问题是我会在后台 运行 这个转换(.kmt 文件),也就是说从 Java 程序。
我尝试了很多代码,但总是没有结果。
有人可以帮助我吗? 预先感谢您的帮助。
运行 kermeta 程序取决于 Kermeta 的版本及其执行上下文。 使用 Kermeta 2,kmt 代码被编译成 scala。由于 scala 与 java 的兼容性,可以直接从 java 调用此 scala 代码。 您首先需要声明至少一个主要操作,以便生成适当的初始化操作。 假设您在 kermeta 代码中的 class "org::example::FooToBar" 中有一个方法 "transformFooToBar"。 使用标签将其声明为主要入口点
@mainClass "org::example::FooToBar"
@mainOperation "transformFooToBar"
这个主要操作必须只有字符串参数。 这将生成一个实用程序 scala class org.example.MainRunner,其中包含有用的初始化方法和一个可以从命令行调用的主要操作。
- 案例 1/ 使用 Kermeta 2 代码从 eclipse 插件调用:
这是最简单的情况,调用方法
org.example.MainRunner.init4eclipse()
在任何其他调用之前。然后调用你的主要方法 org.example.KerRichFactory.createFooToBar.transformFooToBar()
您可以调用任何其他 classes 或方法(即,即使参数不是 String)
这对于基于kermeta转换的eclipse构建工具来说非常方便。
- 案例 2/Kermeta 2 代码从标准 java 应用程序调用(即不在 eclipse 插件中 运行ning)
那么初始化方法就是
org.example.MainRunner.init()
案例 2 的常见陷阱:许多 运行 作为独立的转换仍然需要在其内部引用系统中使用 eclipse uri 方案来操纵模型。 IE。 platform:/plugin/... , platform:/resource/..., pathmap:/... ,或更复杂的 uri 映射(通常使用自定义协议)(您可以通过查看 xmi 文件轻松检查)作为文本) 在那种情况下,由于 Eclipse 平台不 运行 提供搜索机制,您需要手动提供等效的 URI 映射以将这些 URI 映射到您的本地系统 URI(即到文件:/... 或 jar:file:/ URI) 一种可能性是使用提供此类映射的 urimap.properties 文件。默认情况下,当 运行 在 eclipse 中运行 kermeta 程序时,会为当前的 eclipse 配置生成一个 urimap.properties。 将 kermeta 程序部署到另一台计算机或使用自定义部署包时,您必须 provide/compute 目标计算机的等效文件。
为了方便起见,您可以设置此 urimap.properties 文件的位置感谢系统 属性 "urimap.file.location"