Run JET Templates without Eclipse - eclipse

I need to generate java code from jet templates using a maven project and it should be done outside eclipse environment, but so far i haven't figure out how to do this.
I'm using maven 3x and jet 1.1.x.
I've tried several approaches but none of them seems to work:
invoke library org.eclipse.emf.codegen.jet.JETCompiler. This library seems to have a strong dependency with eclipse's environment and for such reason it failed.
one of maven's jet plugin doesn't work neither and i'm using the same example as provided in the offical website ([tikal-maven-jet-plugin][1]), here's how it looks like:
http://network.tikalk.com/release/tikal-maven-jet-plugin/usage.html
Does anyone have an idea how to do this?
Thanks a lot,
Carlos

Because of the way JET works, it'll only actually be runnable inside an eclipse environment. However, it's actually possible to launch eclipse headlessly to run an ant build script, so you get the eclipse parts you need running, without the UI. In order to do this, you need to launch the org.eclipse.ant.core.antRunner application. There's some documentation on how to do that here: http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2FantRunner.htm
Once you've launched the antRunner application, you can use the JET ant tasks to compile your templates and run your transform: http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.jet.doc%2Freferences%2Fant%2FantTasks.xhtml
There are some important caveats about headless template compilation which are relevant if you're headlessly compiling eclipse plugins, documented here: http://wiki.eclipse.org/JET_FAQ_How_to_I_compile_JET_templates_in_a_headless_build
I'm not sure how well any of this integrated with Maven, but this seems to be the best approach from ant. If you're wanting to run a transform from Java, there's some information here: http://wiki.eclipse.org/JET_FAQ_How_do_I_run_a_JET_transformation_from_Java%3F. You will still need to be in an eclipse environment for it to work though.

The tikal-maven-jet-plugin worked for me.
Here's a sample of a JET file I used in src/main/templates/generator.jet, I don't use the EMF classes, just standard Map.
<%# jet class="TableModelGenerator" package="net.trajano.framework.tool" %>
<% java.util.Map meta = (java.util.Map)argument; %>
package <%=meta.get("PackageName")%>;
public class <%=meta.get("ClassName")%> {
}
The plugin configuration I used is
<plugin>
<groupId>com.tikal</groupId>
<artifactId>tikal-maven-jet-plugin</artifactId>
<version>0.4.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<includeTemplates>
<include>**/*.jet</include>
</includeTemplates>
</configuration>
</plugin>

Related

Debuggin Vert.x-Maven-Projekt inside Eclipse

I am currently developing an Vert.x Application inside Eclipse with maven. I did the Projekt-Setup like descripted here: http://vertx.io/maven_dev.html
Everything went fine, the project builds succesfully and the server gets started successfully in debug mode via the maven launch configuration with the goal: package vertx:runMod
However, if i set a breakpoint, the debugger stops at the right position and showing me the right stacktrace but it doesnt show me the line inside the source. instead of that it shows the infamous "Source not found"-screen with the "Edit Source Lookup Path"-Button.
The funny thing about this is that this also happens when the breakpoint is inside one of my own java files.
I can also navigate into the source of for example vertx-core-2.0.0-final-sources.jar via STRG-Left click on a vert.x class . After doing this i can see the debug-Infos on Variables ect. via mouse-over as usual. If i double click on the stack again eclipse changes back to the "source not found"-screen-tab again.
I also tried to run the maven goal "clean eclipse:eclipse" on my Project as suggested here: Run Vertx in an IDE with no success.
I also tried all suggestions from here: Eclipse Maven debug - source not found with no success
I think it has something to do with the way the application gets launched. (via vert.x Container-Instance out of maven goal)
Its Eclipse Luna (4.4) with m2e-Plugin vers. 1.5 with maven 3.2.1, and vert.x 2.1
Any Help would be great. THX in advance
At least i found out how to debug into my own source files. I simply had to generate the source.jar for my project when it gets installed via the maven goal. I added the following to my pom under the <plugins> -section
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
After that i linked this generated source-jar-file to my debugger via the "Edit Source Lookup Path"-Button (this has to be done only the first time)
The flaw about this is, if i change a single line in my source files i have to rebuild the whole projekt including the source.jar via maven -install. If i am not doing this the debugger ends up in wrong line numbers.
I also didnt found out how to debug into the classes that are inside my dependency-jars. So at least this isnt solved yet.

m2e cannot run nested instances of Eclipse

I'm using the Tycho eclipserun plugin to generate Java source code for an EMF model during build (as opposed to having the sources checked in). Configuring the plugin to run as part of the maven build works fine, but I would also like to configure m2e so that the same goal is executed when building from inside Eclipse. So, I imagined that could get away with just specifying <execute/> instead of <ignore/> in the lifecycle mapping metadata, like so:
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.eclipse.tycho.extras</groupId>
<artifactId>tycho-eclipserun-plugin</artifactId>
<versionRange>[0.21.0,)</versionRange>
<goals>
<goal>eclipse-run</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute />
</action>
</pluginExecution>
But then m2e complains saying
Execution default of goal
org.eclipse.tycho.extras:tycho-eclipserun-plugin:0.21.0:eclipse-run
failed: java.lang.IllegalStateException: Cannot run multiple Equinox
instances in one build. Consider configuring the Tycho build
extension, so that all mojos using Tycho functionality share the same
Equinox runtime.
(org.eclipse.tycho.extras:tycho-eclipserun-plugin:0.21.0:eclipse-run:default:generate-sources)
Ok, so m2e cannot run a nested Equinox instance in the same build, which kind of make sense.
Is there a solution for this? One solution I could imagine would be to execute a standalone Eclipse, but I really like the way the eclipserun plugin allows be to do that just by specifying a remote p2 repo and a bunch of features to include, instead of having to set up a standalone Eclipse more or less manually.
If you are already running in Eclipse, you could execute your EMF generation steps in that runtime directly. So you'd need to configure a builder which does the same steps as the tycho-eclipserun-plugin.
In general, for the case where some build step needs to be executed in Eclipse, but in a different way than in Maven, m2e has the concept of configurators: A configurator could tell m2e what to do when it encounters a certain build plug-in. So in case of the tycho-eclipserun-plugin, the configurator could let the goal run in a forked process instead of in-process. However, I'm not aware of such a m2e configurator, and it remains to decide whether it is really a good idea to fork processes as part of the incremental Eclipse build.

Launch GWT in dev mode while running server on Spring-boot

I have created web application using Spring boot and gwt 2.6.0.
Changed location of generated files:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>${gwt.plugin.version}</version>
<executions>
<execution>
<configuration>
<module>my.module</module>
<webappDirectory>src/main/resources/gwt-public/</webappDirectory>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
And if running my application standalone everything works correctly, because all the needed files are accessible.
But the question is - how to run GWT in development mode (from Intellij IDEA). I am trying to run it in -noserver mode, it launches but in browser there is nothing.
As I understand I need to specify war directory which is used by dev plugin, so it means I need to explicitly set packaging to war? I have no clear thoughts about it.
you can compile a war, run the server and then run gwt debug, but after the browser opens change the url to the localhost:xxxx whatever spring is running, but leave the servercode=127.0.0.1 as is.
or you can use gwt:debug on maven plugin instaed of compile.
looky here: http://mojo.codehaus.org/gwt-maven-plugin/debug-mojo.html
I got this working by adding this to your gwt-maven-plugin configuration:
<superDevMode>false</superDevMode>
If you are going to change the URL as Zerkotin suggests, then I supplied this additional property:
<noServer>true</noServer>
to stop the mvn-gwt-plugin from starting up the embedded Jetty instance. But this did not allow me to recompile on the fly.
To get it working in super dev mode, I set this up in my gwt-maven-plugin config:
true
true
Then I started up Spring Boot as normal (using java -jar myweb.jar). Then I started up maven gwt plugin (mvn gwt-debug), attached IntelliJ to the debugger (using remote), went to code server URL (NOT my app URL), set up those book marklets, then went to my app URL, and when I want to recompile, I just hit those bookmarklets.

wro4j & m2e Eclipse not compiling LESS

I am trying to setup my developer env so that I can use maven to compile my LESS files for formal builds, but also have Eclipse compile the LESS for incremental builds so I dont have to keep kicking of maven tasks every time I make a LESS change. Having looked around - it seems like wro4j & the maven plugin & the m2e-wtp plugin should provide all that.
My setup is as follows: I have just installed the latest stable Eclipse (Java EE package, that includes the WTP stuff - v4.3) and I have installed the m2e plugin and the m2e-wtp plugins.
pom.xml:
<plugin>
<groupId>ro.isdc.wro4j</groupId>
<artifactId>wro4j-maven-plugin</artifactId>
<version>1.4.5</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<configuration>
<targetGroups>roa-all</targetGroups>
<destinationFolder>${project.build.directory}/${project.build.finalName}</destinationFolder>
<cssDestinationFolder>${project.build.directory}/${project.build.finalName}/css/</cssDestinationFolder>
<jsDestinationFolder>${project.build.directory}/${project.build.finalName}/js/</jsDestinationFolder>
<wroManagerFactory>ro.isdc.wro.maven.plugin.manager.factory.ConfigurableWroManagerFactory</wroManagerFactory>
</configuration>
</plugin>
wro.properties:
preProcessors=cssImport,semicolonAppender
postProcessors=lessCss,cssMinJawr
wro.xml:
<groups xmlns="http://www.isdc.ro/wro">
<group name="roa-all">
<css>/less/*.less</css>
</group>
</groups>
Inside my /less/ folder are basically a few css files that I have renamed .less files, and one where I have actually added some LESS syntax with a few colour variables set. This mostly works, as I make changes to my LESS, the plugin detects and rebuilds my uber css file, however, rather critically, it doesn't seem to be compiling the LESS - it combines the files, and minifies, but my #variables are all still in LESS syntax.
I also noticed that the maven plugin was up to v 1.7.0 so tried upgrading to that to see if that was the problem, but that just does nothing at all (nothing gets built at all and I have no uber css etc)
Anyone had any experience setting this up or know anything I have missed in the setup?
The problem was because I had some invalid LESS in one of my files - this basically meant the compile step was failing, so the other LESS files were not being compiled to CSS (which resulted in the LESS variables being output in my file) - With the Eclipse incremental build, this failure was not being reported so I didn't see it.
I discovered it by explicitly running the maven command, and then got the normal maven logs which included details of the compilation failure.
That aside, the eclipse incremental build for LESS is working really nicely since!
As mentioned in the comments above, I wrote up how to set it all up here:
Eclipse & LESS - Better development time with incremental builds

GWT maven compiler output directory

I need to set output directory location for GWT compiler using maven plugin.
I've investigated the GWT compiler and gwt-maven-plugin docs and did not find any options for this.
For example:
I have two modules named editor and console and gwt-maven-plugin compiles them to %ROOT%/editor and %ROOT%/console dirs.
But I need to have these modules compiled into %ROOT%/ria/editor and %ROOT%/ria/console dirs to reduce effort to maintain the URL based security and other stuff.
Is it possible to set ria directory in plugin configuration to avoid unneeded new ANT task creation for moving compiled modules stuff to needed place?
I had to un-check the checkbox highlighted in the below screenshot
<plugin>
<artifactId>gwt-maven-plugin</artifactId>
<configuration>
<webappDirectory>${project.build.directory}/${project.build.finalName}/ria</webappDirectory>
</configuration>
</plugin>
See http://mojo.codehaus.org/gwt-maven-plugin/compile-mojo.html#webappDirectory
It won't play well with the DevMode though, unless you run in -noserver mode (which I'd recommend anyway for any middle-sized/big project)