Home » Modeling » EMF » Programmatically Generate Eclipse Project (Edit Code, etc.)
Programmatically Generate Eclipse Project (Edit Code, etc.) [message #1716230] |
Wed, 02 December 2015 11:14 |
Florian Goenner Messages: 15 Registered: December 2015 |
Junior Member |
|
|
I am currently working on a project for generating .genmodel files and according to that, model code, edit code and so on from a given .ecore file into a desired directory. Generating model code works just fine for me, however, after invoking generator.generate(genModel, GenBaseGeneratorAdapter.EDIT_PROJECT_TYPE, new BasicMonitor.Printing(System.out)); my resulting file only consists of the generated source code, plugin xml, etc. but without the eclipse specific project files (.classpath, compiled java code - bin directory -, .project file). Compared to that, right clicking the .genmodel file -> generate edit code gives me the desired result with the project popping up in the workspace.
Do you have any hints how to achieve that?
Thanks in advance!
|
|
|
Re: Programmatically Generate Eclipse Project (Edit Code, etc.) [message #1716254 is a reply to message #1716230] |
Wed, 02 December 2015 13:50 |
Ed Merks Messages: 33140 Registered: July 2009 |
Senior Member |
|
|
Florian,
You should look in
org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter.ensureProjectExists(String,
Object, Object, boolean, Monitor). Perhaps
org.eclipse.emf.common.EMFPlugin.IS_ECLIPSE_RUNNING is false.
On 02/12/2015 2:12 PM, Florian Goenner wrote:
> I am currently working on a project for generating .genmodel files and
> according to that, model code, edit code and so on from a given .ecore
> file into a desired directory. Generating model code works just fine
> for me, however, after invoking generator.generate(genModel,
> GenBaseGeneratorAdapter.EDIT_PROJECT_TYPE, new
> BasicMonitor.Printing(System.out)); my resulting file only consists of
> the generated source code, plugin xml, etc. but without the eclipse
> specific project files (.classpath, compiled java code - bin directory
> -, .project file). Compared to that, right clicking the .genmodel file
> -> generate edit code gives me the desired result with the project
> popping up in the workspace.
> Do you have any hints how to achieve that?
>
> Thanks in advance!
>
Ed Merks
Professional Support: https://www.macromodeling.com/
|
|
|
Re: Programmatically Generate Eclipse Project (Edit Code, etc.) [message #1716839 is a reply to message #1716254] |
Tue, 08 December 2015 13:52 |
Florian Goenner Messages: 15 Registered: December 2015 |
Junior Member |
|
|
Thanks!
I now changed my project to an RCP Application, however, when calling the generation process anew, I am getting the following:
>> Generating code
>> Generating edit packages
>> Creating EMF project TestBookStoreProject.edit (TestBookStoreProject.edit)
>> Opening 'TestBookStoreProject.edit'.
>> Refreshing '/TestBookStoreProject.edit'.
org.eclipse.core.runtime.CoreException: Problems encountered while setting project description.
at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1349)
at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1376)
at org.eclipse.emf.codegen.ecore.Generator$EclipseHelper.createEMFProject(Generator.java:836)
at org.eclipse.emf.codegen.ecore.Generator.createEMFProject(Generator.java:547)
at org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter$EclipseHelper.ensureProjectExists(GenBaseGeneratorAdapter.java:517)
at org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter.ensureProjectExists(GenBaseGeneratorAdapter.java:346)
at org.eclipse.emf.codegen.ecore.genmodel.generator.GenModelGeneratorAdapter.generateEdit(GenModelGeneratorAdapter.java:302)
at org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter.doGenerate(GenBaseGeneratorAdapter.java:219)
at org.eclipse.emf.codegen.ecore.generator.AbstractGeneratorAdapter.generate(AbstractGeneratorAdapter.java:317)
at org.eclipse.emf.codegen.ecore.generator.Generator.generate(Generator.java:708)
at org.eclipse.emf.codegen.ecore.generator.Generator.generate(Generator.java:619)
at org.eclipse.emf.codegen.ecore.Generator$PlatformRunnable$1.run(Generator.java:436)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2313)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2295)
at org.eclipse.emf.codegen.ecore.Generator$PlatformRunnable.run(Generator.java:466)
at org.eclipse.emf.codegen.ecore.Generator.run(Generator.java:112)
at at.jku.sea.cloud.gmf.adapter.plugin.utils.PluginGenerator.generateEditCode(PluginGenerator.java:118)
at at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication.start(GMFApplication.java:28)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
Contains: Nature does not exist: org.eclipse.pde.PluginNature.
I am utterly confused what that means (as I am not absolutely familiar with Eclipse Plug-In Development)
For reference, here is my plugin.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
id="GMFApplication"
point="org.eclipse.core.runtime.applications">
<application>
<run
class="at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication">
</run>
</application>
</extension>
</plugin>
Currently, I am calling the code generation process in this manner:
org.eclipse.emf.codegen.ecore.Generator gen = new org.eclipse.emf.codegen.ecore.Generator();
ArrayList<String> args = new ArrayList<String>();
args.add("-autoBuild");
args.add("-reconcile");
args.add("-model");
args.add(genModelLocation);
String[] argsArr = args.toArray(new String[args.size()]);
gen.run(argsArr);
Again, any help would be greatly appreciated!
[Updated on: Tue, 08 December 2015 14:04] Report message to a moderator
|
|
|
Re: Programmatically Generate Eclipse Project (Edit Code, etc.) [message #1716842 is a reply to message #1716839] |
Tue, 08 December 2015 14:07 |
Ed Merks Messages: 33140 Registered: July 2009 |
Senior Member |
|
|
Florian,
We do try to set the natures, and one of those is the PDE nature. It
looks like that nature must exist so that implies that the PDE Core
plugin needs to be part of your launch. Same goes for the Java nature.
On 08/12/2015 2:52 PM, Florian Goenner wrote:
> Thanks!
> I now changed my project to an RCP Application, however, when calling
> the generation process anew, I am getting the following:
>
>>> Generating code
>>> Generating edit packages
>>> Creating EMF project TestBookStoreProject.edit
>>> (TestBookStoreProject.edit)
>>> Opening 'TestBookStoreProject.edit'.
>>> Refreshing '/TestBookStoreProject.edit'.
> org.eclipse.core.runtime.CoreException: Problems encountered while
> setting project description.
> at
> org.eclipse.core.internal.resources.Project.setDescription(Project.java:1349)
> at
> org.eclipse.core.internal.resources.Project.setDescription(Project.java:1376)
> at
> org.eclipse.emf.codegen.ecore.Generator$EclipseHelper.createEMFProject(Generator.java:836)
> at
> org.eclipse.emf.codegen.ecore.Generator.createEMFProject(Generator.java:547)
> at
> org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter$EclipseHelper.ensureProjectExists(GenBaseGeneratorAdapter.java:517)
> at
> org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter.ensureProjectExists(GenBaseGeneratorAdapter.java:346)
> at
> org.eclipse.emf.codegen.ecore.genmodel.generator.GenModelGeneratorAdapter.generateEdit(GenModelGeneratorAdapter.java:302)
> at
> org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter.doGenerate(GenBaseGeneratorAdapter.java:219)
> at
> org.eclipse.emf.codegen.ecore.generator.AbstractGeneratorAdapter.generate(AbstractGeneratorAdapter.java:317)
> at
> org.eclipse.emf.codegen.ecore.generator.Generator.generate(Generator.java:708)
> at
> org.eclipse.emf.codegen.ecore.generator.Generator.generate(Generator.java:619)
> at
> org.eclipse.emf.codegen.ecore.Generator$PlatformRunnable$1.run(Generator.java:436)
> at
> org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2313)
> at
> org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2295)
> at
> org.eclipse.emf.codegen.ecore.Generator$PlatformRunnable.run(Generator.java:466)
> at org.eclipse.emf.codegen.ecore.Generator.run(Generator.java:112)
> at
> at.jku.sea.cloud.gmf.adapter.plugin.utils.PluginGenerator.generateEditCode(PluginGenerator.java:118)
> at
> at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication.start(GMFApplication.java:28)
> at
> org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
> at
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
> at
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
> at
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
> at
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
> at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
> at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
> Contains: Nature does not exist: org.eclipse.pde.PluginNature.
>
>
> I am utterly confused what that means (as I am not absolutely familiar
> with Eclipse Plug-In Development)
>
> For reference, here is my plugin.xml:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <?eclipse version="3.4"?>
> <plugin>
>
> <extension
> id="GMFApplication"
> point="org.eclipse.core.runtime.applications">
> <application>
> <run
> class="at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication">
> </run>
> </application>
> </extension>
>
> </plugin>
>
>
> Again, any help would be greatly appreciated!
Ed Merks
Professional Support: https://www.macromodeling.com/
|
|
|
Re: Programmatically Generate Eclipse Project (Edit Code, etc.) [message #1716848 is a reply to message #1716842] |
Tue, 08 December 2015 14:48 |
Florian Goenner Messages: 15 Registered: December 2015 |
Junior Member |
|
|
After adding to the required Plug-In's in my MANIFEST.MF, I am receiving the following:
!SESSION 2015-12-08 15:22:21.971 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.8.0_45
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE
Framework arguments: -application at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication
Command-line arguments: -application at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication -data C:\Users\Florian\Desktop\workspace/../runtime-at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication -dev file:C:/Users/Florian/Desktop/workspace/.metadata/.plugins/org.eclipse.pde.core/at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication/dev.properties -os win32 -ws win32 -arch x86_64 -consoleLog
!ENTRY at.jku.sea.cloud.gmf.adapter.plugin 2 0 2015-12-08 15:22:22.616
!MESSAGE Could not resolve module: at.jku.sea.cloud.gmf.adapter.plugin [23]
Unresolved requirement: Require-Bundle: org.eclipse.pde.core; bundle-version="3.10.2"
!ENTRY org.eclipse.osgi 4 0 2015-12-08 15:22:22.617
!MESSAGE Application error
!STACK 1
java.lang.RuntimeException: Application "at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication" could not be found in the registry. The applications available are: org.eclipse.jdt.core.JavaCodeFormatter, org.eclipse.jdt.core.JavaIndexer, org.eclipse.emf.mwe.core.WorkflowRunner, org.eclipse.emf.codegen.ecore.Generator, org.eclipse.ant.core.antRunner, org.eclipse.emf.codegen.CodeGen, org.eclipse.emf.codegen.JMerger, org.eclipse.equinox.app.error.
at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:248)
at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
An error has occurred. See the log file
C:\Users\Florian\Desktop\workspace\.metadata\.plugins\org.eclipse.pde.core\at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication\1449584542116.log.
Furthermore, after inspecting the produced .project file I also realized, that the entire content of the buildSpec section was missing...
It looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>TestBookStoreProject</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
Sorry for the inconvenience I might cause!
|
|
|
Re: Programmatically Generate Eclipse Project (Edit Code, etc.) [message #1716856 is a reply to message #1716848] |
Tue, 08 December 2015 15:48 |
Ed Merks Messages: 33140 Registered: July 2009 |
Senior Member |
|
|
Florian,
It's an issue of what bundle are part of your launch configuration. I
don't know how you created the launch configuration, but be sure to
validate it.
On 08/12/2015 3:48 PM, Florian Goenner wrote:
> After adding org.eclipse.pde.core to the required Plug-In's in my
> MANIFEST.MF, I am receiving the following:
>
> !SESSION 2015-12-08 15:22:21.971
> -----------------------------------------------
> eclipse.buildId=unknown
> java.version=1.8.0_45
> java.vendor=Oracle Corporation
> BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE
> Framework arguments: -application
> at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication
> Command-line arguments: -application
> at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication -data
> C:\Users\Florian\Desktop\workspace/../runtime-at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication
> -dev
> file:C:/Users/Florian/Desktop/workspace/.metadata/.plugins/org.eclipse.pde.core/at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication/dev.properties
> -os win32 -ws win32 -arch x86_64 -consoleLog
>
> !ENTRY at.jku.sea.cloud.gmf.adapter.plugin 2 0 2015-12-08 15:22:22.616
> !MESSAGE Could not resolve module: at.jku.sea.cloud.gmf.adapter.plugin
> [23]
> Unresolved requirement: Require-Bundle: org.eclipse.pde.core;
> bundle-version="3.10.2"
>
>
> !ENTRY org.eclipse.osgi 4 0 2015-12-08 15:22:22.617
> !MESSAGE Application error
> !STACK 1
> java.lang.RuntimeException: Application
> "at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication" could not be
> found in the registry. The applications available are:
> org.eclipse.jdt.core.JavaCodeFormatter,
> org.eclipse.jdt.core.JavaIndexer,
> org.eclipse.emf.mwe.core.WorkflowRunner,
> org.eclipse.emf.codegen.ecore.Generator,
> org.eclipse.ant.core.antRunner, org.eclipse.emf.codegen.CodeGen,
> org.eclipse.emf.codegen.JMerger, org.eclipse.equinox.app.error.
> at
> org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:248)
> at
> org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
> at
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
> at
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
> at
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
> at
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
> at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
> at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
> An error has occurred. See the log file
> C:\Users\Florian\Desktop\workspace\.metadata\.plugins\org.eclipse.pde.core\at.jku.sea.cloud.gmf.adapter.plugin.GMFApplication\1449584542116.log.
>
>
>
> Furthermore, after inspecting the produced .project file I also
> realized, that the entire content of the buildSpec section was
> missing... It looks like this:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <projectDescription>
> <name>TestBookStoreProject</name>
> <comment></comment>
> <projects>
> </projects>
> <buildSpec>
> </buildSpec>
> <natures>
> </natures>
> </projectDescription>
>
>
> Sorry for the inconvenience I might cause!
Ed Merks
Professional Support: https://www.macromodeling.com/
|
|
| | |
Re: Programmatically Generate Eclipse Project (Edit Code, etc.) [message #1723720 is a reply to message #1723042] |
Wed, 17 February 2016 11:11 |
Florian Goenner Messages: 15 Registered: December 2015 |
Junior Member |
|
|
Zille,
This is my code snippet for creating a genmodel
public void createGenModel(final String ecoreLocation,final String genModelDirectory, final String modelCodeDirectory, final String modelPlugInID, final String modelName, final String basePackage, final String prefix)
throws IOException {
GenModel genModel = GenModelFactory.eINSTANCE.createGenModel();
genModel.setComplianceLevel(GenJDKLevel.JDK70_LITERAL);
genModel.setModelDirectory(modelCodeDirectory);
genModel.setModelPluginID(modelPlugInID);
genModel.getForeignModel().add(new Path(ecoreLocation).lastSegment());
genModel.setModelName(modelName);
// genModel.setRootExtendsInterface(Constants.GEN_MODEL_EXTENDS_INTERFACE.getValue());
genModel.initialize(Collections.singleton(loadECoreFile(ecoreLocation)));
GenPackage genPackage = genModel.getGenPackages().get(0);
genPackage.setPrefix(prefix);
genPackage.setBasePackage(basePackage);
try {
URI genModelURI = URI.createFileURI(genModelDirectory);
final XMIResourceImpl genModelResource = new XMIResourceImpl(
genModelURI);
// genModelResource.getDefaultSaveOptions().put(XMLResource.OPTION_ENCODING,
// Constants.GEN_MODEL_XML_ENCODING.getValue());
genModelResource.getContents().add(genModel);
genModelResource.save(Collections.EMPTY_MAP);
} catch (IOException e) {
String msg = null;
if (e instanceof FileNotFoundException) {
msg = "Unable to open output file ";
} else {
msg = "Unexpected IO Exception writing ";
}
throw new RuntimeException(msg, e);
}
}
here an example usage: createGenModel(ecorePath, genmodelToDirectory, "/MindmapProject/src", "MindmapProject", "Mindmap", "testpackage", "Mindmap");
|
|
|
Goto Forum:
Current Time: Thu Apr 25 05:30:21 GMT 2024
Powered by FUDForum. Page generated in 0.03268 seconds
|