Invoke .emf from Ant programatically ? [message #1257401] |
Wed, 26 February 2014 06:34  |
Eclipse User |
|
|
|
I tried AntRunner of eclipse ant core,
***************************************************************************
AntRunner runner = new org.eclipse.ant.core.AntRunner();
runner.setBuildFileLocation("C:\\epsilon\\workspace\\ISUpdate\\model\\build.xml");
runner.setArguments("-Dmessage=Building -verbose");
try {
System.out.println(runner.getAvailableTargets());
} catch (CoreException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
runner.start(null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*******************************************************************************
Also tried regular ant api
**********************************************************************
File buildFile = new File(
"C:\\epsilon\\workspace\\ISUpdate\\model\\build.xml");
Project antProject = new Project();
antProject.setUserProperty("ant.file", buildFile.getAbsolutePath());
antProject.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
antProject.addReference("ant.ProjectHelper", helper);
helper.parse(antProject, buildFile);
String target = "main";
System.out.println(antProject.getJavaVersion());
antProject.executeTarget(target);
********************************************************************************
But I am unable generate
In the AntRunner api i am getting core exception and BUILD FAILED
In the later it says unable to find epsilon.eugenia tag
***********************************************************************
My Ant script :
- <project default="main">
- <target name="main">
<epsilon.eugenia src="new_file.emf" />
</target>
</project>
************************************************************************
Kindly help : How to generate code from emfatic file programatically either through ant or eugenia source code!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Re: Invoke .emf from Ant programatically ? [message #1752115 is a reply to message #1751913] |
Wed, 18 January 2017 20:35   |
Eclipse User |
|
|
|
Hi Dimitris,
Thank you for all your help, it was very useful and accurate. Finally the ANT file was correctly executed. Just in case someone else needs the complete solution, these are the steps to follow:
When you want to programatically execute an ANT file with epsilon transformations, (and maybe you have Xtext files):
- Develop your Xtext grammar, execute the mwe2 file, and generate "Model", "Edit", and "Editor" code from the genmodel file.
- Generate a runnable JAR from the Xtext project based on the steps provided in https://www.eclipse.org/forums/index.php/t/369157/
- Create your Epsilon standalone project based on the following example https://git.eclipse.org/c/epsilon/org.eclipse.epsilon.git/tree/examples/org.eclipse.epsilon.examples.workflow.standalone
- Include the required dependencies (see Note 1 below)
- Implement the Ant Executor (see Note 2 below)
- Implement the Xtext model reader (see Note 3 below)
Note 1 (Required dependencies):
- ant.jar
- ant-launcher.jar
- mydsl.jar (obtained from step 2)
- epsilon-1.X-workflow-emf-src.jar
- epsilon-1.X-workflow-src.jar
- org.eclipse.emf.jar
- org.eclipse.emf.common.jar
- org.eclipse.emf.ecore.jar
- org.eclipse.emf.ecore.xmi.jar
- org.eclipse.emf.jar
- org.eclipse.xsd.jar
- org.eclipse.epsilon.*.jar (depending on your project needs)
Note 2 (ANT executor):
File file = new File(pathAnt);
Project project = new Project();
project.init();
DefaultLogger logger = new DefaultLogger();
logger.setErrorPrintStream(System.err);
logger.setOutputPrintStream(System.err);
logger.setMessageOutputLevel(Project.MSG_INFO);
project.setProperty("ant.file", file.getAbsolutePath());
project.addBuildListener(logger);
project.fireBuildStarted();
ProjectHelper helper = ProjectHelper.getProjectHelper();
project.addReference("ant.projectHelper", helper);
helper.parse(project, file);
project.executeTarget(project.getDefaultTarget());
Note 3 (Xtext model reader):
This code is based on https://wiki.eclipse.org/Xtext/FAQ#How_do_I_load_my_model_in_a_standalone_Java_application.C2.A0.3F and https://www.eclipse.org/epsilon/doc/articles/in-memory-emf-model/.
StandaloneSetup setup = new StandaloneSetup();
setup.setPlatformUri("../");
Injector injector = new CoCo2AfmStandaloneSetupGenerated().createInjectorAndDoEMFRegistration();
XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);
URI uri = URI.createURI("ModelURI");
Resource resource = resourceSet.getResource(uri, true);
InMemoryEmfModel emfModel = new InMemoryEmfModel(resource);
emfModel.loadModel();
emfModel.setModelFile("ModelPath");
emfModel.setName("ModelName");
Additional Note:
If you have problems to modify a model (although you have set store=true), use the storeModel task after executing the transformation (it happens to me).
<epsilon.storeModel model="ModelName"/>
[Updated on: Thu, 19 January 2017 13:31] by Moderator
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.18844 seconds