Continuous integration & eclipse plugin development - eclipse

I am developing a set of eclipse plugins, and I have several JUnit plugin tests that actually start another instance of eclipse, create a mock workspace and a mock project and runs various operations on them. I want to put that on continuous integration and I am at loss as to where to start. I am using Hudson, would there be any plugins that makes that easier? Can those tests launch eclipse in headless mode or something on the CI server? Pointers would be much appreciated.

I think the best solution for building Eclipse-based software currently is Tycho - it is based on Maven and uses your standard Eclipse files (like manifest, target platform, product definition). I got started with it using an intro from this blog: http://mattiasholmqvist.se/2010/02/building-with-tycho-part-1-osgi-bundles/, and it worked really well. We also use Hudson, and since Tycho is Maven-based, Hudson integration was trivial and worked simply by calling Maven, which Hudson supports out of the box.

As far as I know, Buckminster tries to solve these problems: you can create descriptors, and then Buckminster can execute your tasks.
For Hudson there is a Buckminster module, that helps executing the Buckminster builds.

maybe this helps you to avoid plugin tests? ;) i like to avoid them... by using mock objects...
http://blog.srvme.de/2010/12/10/mock-eclipse-ifile/

Related

How to create an Eclipse plugin for custom Ant tasks?

I have written a couple of Ant tasks in Eclipse that may be of use to more people, and am looking for a way to make them easily distributable. Creating an Eclipse plugin that provides these Ant tasks is the first thing that came to mind, but I'm not quite sure how to do this.
Are there any good tutorials out there on how to create an Eclipse plugin that provides only a couple of Ant targets?

CloudBees + PlayFramework + Eclipse

I want to develop and manage my DEV#CloudBees and RUN#CloudBees workspace from Eclipse, for a PlayFramework project, and I will have to work with it from several different PC. I'm using the Cloudbees SVN repository, Jenkins CI solution, database ... everything.
I installed CloudBees and PlayFramework plugins for Eclipse, created my CloudBees account, SVN repository, project, Jenkins Job and database. I've created my Play project, eclipsified it.
I understand and I have tested each component of my targeted working environment but I didn't manage to make them work smoothly together.
1- I've seen some Play modules for CloudBees but it is only for command-line use. Is there a nice Eclipse plugin wrapper for this ?
2- I have some issues writing the build.xml, especially when referencing the PlayFramework libs, because I can not use the local installation as it won't work on Jenkins.
3- How can I deploy to RUN#CloudBees from Eclipse ? If i use the CloudBees plugin, it doesn't package the PlayFramework libs.
4- How can I use the testing features of Play to be integrated in Jenkins ?
I have a lot of questions but it is enough for now :) By the way, PlayFramework is awesome and CloudBees a life-saving work environment.
Thank you for your help.
Contact the support, they are really helpful..and fast!
they do have a plugin for Jenkins, ask to get it installed on your server..I use the command
play auto-test
and it works fine. You'll need some code to check for failures depending on the .failures files. check this link
I received a very quick and efficient answer from Cloudbees support.
It confirms what mericano1 and Ryan said (thanks to them).
The CloudBees Jenkins service let users install some customization plugins like the Play! Framework one !
After adding it to the core configuration, you can add a new build step "Play!" in your job configuration and set the Play! commands you need. For example "clean", then "deps --sync" and finally "auto-test". You can also add the war -o toto.war if you need the binary.
You can check the "Play! auto-test reports" checkbox. You'll have an additional icon "Play! Test Result" in the left menu of the build result page to watch the ... Play test result page (unbelieavable :)).
Still in the job configuration, you can check the "Deploy to CloudBees" features. I didn't tried but I think the Play! libs issues wouldn't be resolved. So, add the cloudbees 0.2.2 plugin in your Play! project dependencies.yml, and you can add the bees:app:deploy command in your build step.
For Eclipse, the CloudBees plugin is fully functionnal, once you have configurated your Jenkins job. But you should stay with the Play! process to develop locally and not the Run DEV#/CloudBees Local.
1) The cloudbees module is only for the command-line. There is no Eclipse plugin (that I know of). However, the command-line is really simple play bees:app:deploy
2) Not sure here
3) Deploying Play Framework Apps is a bit different from deploying J2EE (because of the necessary play war command), thus deploying a Play app to Cloudbees from Eclipse might not be possible. However, see 1).
4) I think there is a Play plugin for Jenkins. I have never used it on/off Cloudbees.
OK, so I provided some help on questions 2 and 4, and unfortunately, the answers may not have been what you hoped. I suggest switching to command-line when it is time to deploy.
In eclipse click on external tools menu and create a new command as noted by Ryan in 1).
then you can simply click on the external tool icon.

Managing external jar dependencies

I'v written a selenium framework which needs to be extended to the team. I've checked in the code in SVN. How can I make sure that external jars are added to build path and folder that folder by other team members? Basically I want to manage these dependencies better. Somebody said, Maven can take care of these so I tried to install m2eclipse plugin for eclipse 3.2 without any success. Can Maven solve this problem and is there any better way of managing it?
Do the easy way: commit the jars into SVN. It will save everybody a lot of time.
If you are amenable to using Eclipse, Maven, and m2eclipse, I would suggest using SpringSource Tool Suite. It is an Eclipse based IDE with Maven and m2eclipse pre-bundled. This bundling makes getting those three tools to work together very easy.

JavaRebel with a Multi-module Enterprise Project in Maven

Does anybody have experience working with JavaRebel, specifically for a large web application built using Maven? There is a JavaRebel plugin for Maven that seems under-documented, does anybody have comments on how it works, can you really update one class in a Multi-module Enterprise Project and have it "automagically" change on your Server?
Are there any issues with different IDEs and this setup? For example NetBeans will not let you compile one class at a time in a Maven project (from what I can tell).
Disclaimer: I work for ZeroTurnaround.
JRebel (formerly JavaRebel) installation involves the application configuration file "rebel.xml" and modifying the container startup command line.
The Maven plugin is used to generate the "rebel.xml" file, that is used by the JRebel agent running in the container to find the files in the workspace. This allows to use IDE building to compile .java files and skip the Maven build process, as the changes to files will be picked up from the workspace. However as it relies on the IDE to compile the classes, it does depend on the IDE ability to compile efficiently. I know for sure that Eclipse will compile classes one at a time and am fairly sure you can configure NetBeans and IntelliJ IDEA to do the same.
In addition to the Maven/rebel.xml configuration you also need to configure the container startup command line. You may also need to install and IDE plugin or do some additional configuration to have the best expirience with JRebel. Following through the steps of Installation manual ensures that.
Hope this helps.
Disclaimer: I've not actually used this plugin myself.
This tutorial implies that JavaRebel works well with Eclipse 3.4. If you are also using m2eclipse it should work ok with Maven projects as well (as long as you ensure that Maven and Eclipse are compiling to the same target folder so the Eclipse incremental compiler can be used to modify the class file).
According to this post, you should configure the javarebel-maven-plugin to generate the rebel.xml (used to mount external folders to the application classpath). There's also a general installation guide you may find useful.

synchronising / maintaining ant and eclipse classpaths

I'd be interested to find out about any automated processes that people have for ensuring that the project classpaths for the ant and eclipse configurations are in synch. In my case, I want the classpath defined in the ant build file to be the master configuration, since its used for our production builds. As part of the build i'd like to add an ant target that will verify that the eclipse classpath is up to date, or at least indicate differences between the two classpaths.
I'm aware of ant4eclipse but its focus is in the opposite direction, ensuring that the eclipse classpath is master and that the ant build reuses the eclipse path. I like the idea behind AntAndEclipse but am wondering are their ant other tools in this space that i'm not aware of.
You solution at a previous company was to have ant invoke Eclipse to do the compiles as described here:
http://www.eclipse.org/articles/Article-PDE-Automation/automation.html
I'm not aware of any ant tools which can do this but I've switched from ant to Maven a few years ago and never looked back. You can use the "Maven integration for Eclipse" to make Eclipse use the Maven classpath.
As of today, I'm not 100% happy with the Eclipse plugin, though. It's a bit slow and due to the different philosophy of Eclipse and Maven, some operations behave strange. For example, Eclipse doesn't differentiate between a "production" and "test" classpath, so you can get compile errors in Maven when everything looks great in Eclipse.
My solution was to use the plugin to keep the classpath in sync and compile from the commandline.
there is an ant task to do xml transformations, we used that task to create the classpath in our build file. It was a little trick to get the XSL right but once it worked it was great
Did you evaluate Apache IVY? Currently I am building a Continuous Integration environment at our place and we use IVY to handle our dependencies. There is a eclipse plugin that takes the dependency configuration of eclipse and uses it as eclipse classpath.
Currently this solution looks quite promising.
My team wrote an Eclipse plug-in to add a new type of library to the Java Build Path->Add Library option in the project settings. This custom library type allowed both Eclipse and ANT to reference the same canonical list of dependencies.
Nowadays, I'd probably look at IVY for doing the same thing if I was locked into using ANT, rather than writing my own.
You need Ant2Eclipse.