Eclipse jmerge 学习:一个最简单的例子2008-08-06 09:37 最近要做代码生成方面的工作,考虑需要合并生成的代码和用户手工修改的代码,研究一下eclipse的jmerge,在网上发现了一篇非常好的资料《使用Eclipse的JMerge 定制生成的代码和编辑器》,试着做几个例子。
源文件,相当于新生成的代码,Source.java.txt:
package aa;
import java.util.*;
public class Cust {
private String pa="source";
private String p_source;
public void methodA() {
System.out.println("methodA in source");
}
public void method_source() {
}
}
目标文件,相当于以前生成的代码、经过用户修改后的代码,Target.java.txt:
package aa;
import java.math.*;
public class Cust {
private String pa="target";
private String p_target;
public void methodA() {
System.out.println("methodA in target");
}
public void method_target() {
}
}
配置文件,最简单的merge.xml:
<?xml version="1.0" encoding="UTF-8"?>
<merge:options xmlns:merge="http://www.eclipse.org/org/eclipse/emf/codegen/jmerge/Options">
<merge:pull sourceGet="Method/getBody" targetPut="Method/setBody"/>
</merge:options>
测试类,调用jmerge执行合并(将新生成的代码覆盖到以前生成的被修改过的代码),并输出合并结果,Test.java
import org.eclipse.emf.codegen.merge.java.JMerger;
public class Test {
public static void main(String[] args) throws Exception {
JMerger jmerger = new JMerger();
String merge = "D:\\gmf\\workspace\\demo\\src\\merge.xml";
String source = "D:\\gmf\\workspace\\demo\\src\\Source.java.txt";
String target = "D:\\gmf\\workspace\\demo\\src\\Target.java.txt";
String content=jmerger.execute(null, new String[] { merge, source, target });
System.out.println(content);
//
}
}
执行结果:
package aa;
import java.util.*;
import java.math.*;
public class Cust {
private String pa="target";
private String p_source;
private String p_target;
public void methodA() {
System.out.println("methodA in source");
}
public void method_source() {
}
public void method_target() {
}
}
结论:
1 . 一个方法如果只在源文件或只在目标文件中存在,那么他们都会保留在合并后的文件中;如果一个方法同时出现在源文件或目标文件,那么源文件的方法或覆盖目标文件的方法。
2. 一个属性如果同时出现在源文件和目标文件,只是属性值不一样,将会保留目标文件的属性值设置。?还得继续研究原因!
3. 原来最简单的文件合并并不需要特殊的javadoc支持。
续:修改merge.xml增加对属性的合并规则:
<?xml version="1.0" encoding="UTF-8"?>
<merge:options xmlns:merge= "http://www.eclipse.org/org/eclipse/emf/codegen/jmerge/Options">
<merge:pull sourceGet="Method/getBody" targetPut="Method/setBody"/>
<merge:pull sourceGet="Field/getInitializer" targetPut="Field/setInitializer"/>
</merge:options>
运行结果是:
package aa;
import java.util.*;
import java.math.*;
public class Cust {
private String pa="source";
private String p_source;
private String p_target;
public void methodA() {
System.out.println("methodA in source");
}
public void method_source() {
}
public void method_target() {
}
}
分析:
<merge:pull sourceGet="Method/getBody" targetPut="Method/setBody"/> 读取源文件的方法体并设置为目标文件的方法体
<merge:pull sourceGet="Field/getInitializer" targetPut="Field/setInitializer"/> 读取源文件的属性值并设置为目标文件的属性值
分享到:
相关推荐
jMerge是用于查看和解决两个文件之间差异的图形工具。 jMerge完全用Java编写,并尝试提供一个简单而功能强大的用户界面。
EMF工程包含两个强劲的代码生成工具:JET (Java Emitter Templates)和JMerge (Java Merge),使用JET你可以使用类似JSP的语法(实际上是JSP语法的子集)很容易的去编写模板来描述你想要生成的代码.
EMF(EclipseModelingFramework)是一个模型架构和代码生成工具,它可以用来建构以结构化数据为... 建立模型 EMF通过JET和JMERGE来实现支持MDA,它可以从annotatedJava,UML,orXMLSchema三种模型生成Eclipseplug-in代
Eclipse建模框架(EMF)项目中的JET(Java Emitter Templates)和JMerge(Java Merge)正是为此目的而设计的两大利器。本文将详细介绍如何使用JET来创建模板,并通过示例来演示如何利用这些模板自动生成Java源代码。...
matplotlib-3.6.3-cp39-cp39-linux_armv7l.whl
numpy-2.0.1-cp39-cp39-linux_armv7l.whl
基于springboot个人公务员考试管理系统源码数据库文档.zip
onnxruntime-1.13.1-cp310-cp310-win_amd64.whl
基于springboot的西山区家政服务网站源码数据库文档.zip
Linux环境下,关于C++静态库的封装和调用代码。 TestLib是库目录。 TestLibCall是调用库的目录。
基于springboot软件技术交流平台源码数据库文档.zip
numpy-1.20.1-cp39-cp39-linux_armv7l.whl
ASP.NET酒店管理系统源码(WPF) 一、源码特点 采用WPF进行开发的酒店管理系统源码,界面相当美观,功能齐全 二、菜单功能 1、预订登记:可选择入住时间、离店时间、所在城市、证件类型,保存、删除、查询、返回 2、住宿结算:新增入住、保存、删除、查询、返回 3、今日盘点:查询、返回 4、查询统计: 5、房间管理:增加房间类型、删除类型、增加房间、删除房间、保存、返回 6、用户管理:增加用户、删除用户、保存、返回 7、系统配置:基本功能 8、显示当前系统时间等功能的实现
坠落的天空小游戏图片和代码
论文描述:该论文研究了某一特定领域的问题,并提出了新的解决方案。论文首先对问题进行了详细的分析和理解,并对已有的研究成果进行了综述。然后,论文提出了一种全新的解决方案,包括算法、模型或方法。在整个研究过程中,论文使用了合适的实验设计和数据集,并进行了充分的实验验证。最后,论文对解决方案的性能进行了全面的评估和分析,并提出了进一步的研究方向。 源码内容描述:该源码实现了论文中提出的新的解决方案。源码中包含了算法、模型或方法的具体实现代码,以及相关的数据预处理、实验设计和性能评估代码。源码中还包括了合适的注释和文档,以方便其他研究者理解和使用。源码的实现应该具有可读性、可维护性和高效性,并能够复现论文中的实验结果。此外,源码还应该尽可能具有通用性,以便在其他类似问题上进行进一步的应用和扩展。
环境说明: 开发语言:python Python版本:3.6.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:pycharm
基于springboot高校学术交流平台源码数据库文档.zip
onnxruntime-1.16.2-cp310-cp310-win_amd64.whl
基于springboot+vue的实践性教学系统源码数据库文档.zip
基于springboot的校园二手物品交易系统源码数据库文档.zip