• Save
Tycho - good, bad or ugly ?
Upcoming SlideShare
Loading in...5
×
 

Tycho - good, bad or ugly ?

on

  • 1,665 views

Tycho promises to merge the world of osgi/p2 with Maven apparently making it dead easy to build plugins. ...

Tycho promises to merge the world of osgi/p2 with Maven apparently making it dead easy to build plugins.

The JBoss Tools and Developer Studio team moved to Tycho last year and with 350+ plugins we learned a lot about what Tycho can do and not do.

In this talk I will update on the Good, bad and ugly experiences we had and continue to have and discuss our recommendations on how to and how not use Tycho.

Slides from version given at EclipseCon 2012.

Recording available from EclipseCon Europe 2011 : http://www.fosslc.org/drupal/content/tycho-good-bad-and-ugly

Statistics

Views

Total Views
1,665
Slideshare-icon Views on SlideShare
1,665
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Apple Keynote

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • I’m here to talk about the good, bad and ugly sides of Tycho.\nMy name is Max Andersen I work for Red Hat and I work on the project named...\n
  • I’m here to talk about the good, bad and ugly sides of Tycho.\nMy name is Max Andersen I work for Red Hat and I work on the project named...\n
  • ...JBoss Tools. JBoss Tools is a set of plugins which focus on JBoss and related technology to make development experience around JBoss better. Tech such as AS it self, JSF, CDI, Seam, Birt, Maven etc. and we are in the top on eclipse market place for usage.\n
  • Which means we are used all around the world - these are showing the last 3 months “pings” to our usage plugin showing the distribution of a million startups. One of my favorite slides :)\n
  • But i’m here to talk about jboss tools in context of builds - and we are an old project, almost as old as eclipse it self and we’ve seen all the various build techs come and go but until Tycho came around we stayed with PDE ant build. Our project is rather big - a lot of modules, plugins and features whick makes us a.ka. the Big Ass project that moved to Tycho\n
  • But i’m here to talk about jboss tools in context of builds - and we are an old project, almost as old as eclipse it self and we’ve seen all the various build techs come and go but until Tycho came around we stayed with PDE ant build. Our project is rather big - a lot of modules, plugins and features whick makes us a.ka. the Big Ass project that moved to Tycho\n
  • But i’m here to talk about jboss tools in context of builds - and we are an old project, almost as old as eclipse it self and we’ve seen all the various build techs come and go but until Tycho came around we stayed with PDE ant build. Our project is rather big - a lot of modules, plugins and features whick makes us a.ka. the Big Ass project that moved to Tycho\n
  • So lets take a look at how our module(s) looked like when we used PDE/Ant Build. We had a root for each module, under here plugins/features/tests and site with their respective bundles/plugins/content. So what happens with this when moving to Tycho...?\n
  • ..absolutely nothing. And this is the reason why Tycho was able to get us off PDE ant build! Thank you! Of course we did have to add a pom.xml here and there...\n
  • ..actually everywhere ;) each level in that structure has a pom.xml but thankfully they are for most very concise. You simply just state the GAV (group,artifact,version) for you artifact and then the packaging. in this case it is eclipse-plugin but there is also a packaging for every other important eclipse packaging. Great stuff! This structure is our general layout..\n
  • ..actually everywhere ;) each level in that structure has a pom.xml but thankfully they are for most very concise. You simply just state the GAV (group,artifact,version) for you artifact and then the packaging. in this case it is eclipse-plugin but there is also a packaging for every other important eclipse packaging. Great stuff! This structure is our general layout..\n
  • ..actually everywhere ;) each level in that structure has a pom.xml but thankfully they are for most very concise. You simply just state the GAV (group,artifact,version) for you artifact and then the packaging. in this case it is eclipse-plugin but there is also a packaging for every other important eclipse packaging. Great stuff! This structure is our general layout..\n
  • ..actually everywhere ;) each level in that structure has a pom.xml but thankfully they are for most very concise. You simply just state the GAV (group,artifact,version) for you artifact and then the packaging. in this case it is eclipse-plugin but there is also a packaging for every other important eclipse packaging. Great stuff! This structure is our general layout..\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ..and is used with everyone of our modules ...and ...there is alot of them. and when I say Alot I mean alot. I didn’t call it Big Ass for nothing.\n
  • ...this general layout which I actually don’t know from where we got it actually turned out to be pretty good for us. It allows us to think about each module as a releasable unit (we don’t use that alot yet, but for build setup its very nice). A downside is the extra pom’s at each level but the great thing is that it allow us to build subparts very easily and something we hadn’t thought about upfront was that it actually gave a nice natural place for modules to customize their testing setup if need be or if a module had special needs compared to what is defined in the maven parent. And something that I’ve learned to love is that because there now is a structure defined across the whole module we can use mvn tools such as mvn version plugins to manage all this stuff. Something that pde ant never did.\n
  • ...this general layout which I actually don’t know from where we got it actually turned out to be pretty good for us. It allows us to think about each module as a releasable unit (we don’t use that alot yet, but for build setup its very nice). A downside is the extra pom’s at each level but the great thing is that it allow us to build subparts very easily and something we hadn’t thought about upfront was that it actually gave a nice natural place for modules to customize their testing setup if need be or if a module had special needs compared to what is defined in the maven parent. And something that I’ve learned to love is that because there now is a structure defined across the whole module we can use mvn tools such as mvn version plugins to manage all this stuff. Something that pde ant never did.\n
  • ...this general layout which I actually don’t know from where we got it actually turned out to be pretty good for us. It allows us to think about each module as a releasable unit (we don’t use that alot yet, but for build setup its very nice). A downside is the extra pom’s at each level but the great thing is that it allow us to build subparts very easily and something we hadn’t thought about upfront was that it actually gave a nice natural place for modules to customize their testing setup if need be or if a module had special needs compared to what is defined in the maven parent. And something that I’ve learned to love is that because there now is a structure defined across the whole module we can use mvn tools such as mvn version plugins to manage all this stuff. Something that pde ant never did.\n
  • ...this general layout which I actually don’t know from where we got it actually turned out to be pretty good for us. It allows us to think about each module as a releasable unit (we don’t use that alot yet, but for build setup its very nice). A downside is the extra pom’s at each level but the great thing is that it allow us to build subparts very easily and something we hadn’t thought about upfront was that it actually gave a nice natural place for modules to customize their testing setup if need be or if a module had special needs compared to what is defined in the maven parent. And something that I’ve learned to love is that because there now is a structure defined across the whole module we can use mvn tools such as mvn version plugins to manage all this stuff. Something that pde ant never did.\n
  • ...this general layout which I actually don’t know from where we got it actually turned out to be pretty good for us. It allows us to think about each module as a releasable unit (we don’t use that alot yet, but for build setup its very nice). A downside is the extra pom’s at each level but the great thing is that it allow us to build subparts very easily and something we hadn’t thought about upfront was that it actually gave a nice natural place for modules to customize their testing setup if need be or if a module had special needs compared to what is defined in the maven parent. And something that I’ve learned to love is that because there now is a structure defined across the whole module we can use mvn tools such as mvn version plugins to manage all this stuff. Something that pde ant never did.\n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...so to explain this here you see the layout for one of our modules - this time with versions - in this setup everything is all over the map, something some project is ok with others not so much since they release the whole module not individual parts of it. So lets try use the mvn version plugin on this stuff. We start by wanting to bump 2.0.1 to 2.0.2… \n
  • ...mvn tycho will now go through all the pom’s/manifest/feature etc. where it can safely do the bump and you end up with something like this….still alot of manual maintanence and for many of our plugins alot of manual tweaking.\n
  • ..thus we’ve made it so we just have the version listed in the top module root and now when we bump versions with tycho it actually bumps them all.\n
  • ...it might be hard for you guys to appreciate the impact of this but we have over 645 versionable artifact (for good and some bad reasons) and having this kind of automation is awesome.\n
  • ...some don’t like this approach and here I just have to point out that you can of course if you project needs it have parts of your module that is versioned very strictly and still benefit from this on the artifacts where the version is more tied to the overall release.\n
  • to sum up - the fact we moved to tycho gave us maven, which despite its reputation actually does provide great value to us because its possible to have tools work on the more powerful project model it provides over plain PDE build setups. Beyond the easy update of versions in all these artifacts - the fact I don’t have to see us repeat our self with respect to versions makes me happy...and remember version plugin is just one of them. code coverage, sonar, build setup etc. is others - I just took this one since its a not well knwon feature of tycho.\n
  • to sum up - the fact we moved to tycho gave us maven, which despite its reputation actually does provide great value to us because its possible to have tools work on the more powerful project model it provides over plain PDE build setups. Beyond the easy update of versions in all these artifacts - the fact I don’t have to see us repeat our self with respect to versions makes me happy...and remember version plugin is just one of them. code coverage, sonar, build setup etc. is others - I just took this one since its a not well knwon feature of tycho.\n
  • to sum up - the fact we moved to tycho gave us maven, which despite its reputation actually does provide great value to us because its possible to have tools work on the more powerful project model it provides over plain PDE build setups. Beyond the easy update of versions in all these artifacts - the fact I don’t have to see us repeat our self with respect to versions makes me happy...and remember version plugin is just one of them. code coverage, sonar, build setup etc. is others - I just took this one since its a not well knwon feature of tycho.\n
  • to sum up - the fact we moved to tycho gave us maven, which despite its reputation actually does provide great value to us because its possible to have tools work on the more powerful project model it provides over plain PDE build setups. Beyond the easy update of versions in all these artifacts - the fact I don’t have to see us repeat our self with respect to versions makes me happy...and remember version plugin is just one of them. code coverage, sonar, build setup etc. is others - I just took this one since its a not well knwon feature of tycho.\n
  • to sum up - the fact we moved to tycho gave us maven, which despite its reputation actually does provide great value to us because its possible to have tools work on the more powerful project model it provides over plain PDE build setups. Beyond the easy update of versions in all these artifacts - the fact I don’t have to see us repeat our self with respect to versions makes me happy...and remember version plugin is just one of them. code coverage, sonar, build setup etc. is others - I just took this one since its a not well knwon feature of tycho.\n
  • to sum up - the fact we moved to tycho gave us maven, which despite its reputation actually does provide great value to us because its possible to have tools work on the more powerful project model it provides over plain PDE build setups. Beyond the easy update of versions in all these artifacts - the fact I don’t have to see us repeat our self with respect to versions makes me happy...and remember version plugin is just one of them. code coverage, sonar, build setup etc. is others - I just took this one since its a not well knwon feature of tycho.\n
  • to sum up - the fact we moved to tycho gave us maven, which despite its reputation actually does provide great value to us because its possible to have tools work on the more powerful project model it provides over plain PDE build setups. Beyond the easy update of versions in all these artifacts - the fact I don’t have to see us repeat our self with respect to versions makes me happy...and remember version plugin is just one of them. code coverage, sonar, build setup etc. is others - I just took this one since its a not well knwon feature of tycho.\n
  • to sum up - the fact we moved to tycho gave us maven, which despite its reputation actually does provide great value to us because its possible to have tools work on the more powerful project model it provides over plain PDE build setups. Beyond the easy update of versions in all these artifacts - the fact I don’t have to see us repeat our self with respect to versions makes me happy...and remember version plugin is just one of them. code coverage, sonar, build setup etc. is others - I just took this one since its a not well knwon feature of tycho.\n
  • Another aspect of tycho is the whole “getting and resolving dependencies mechanism”. something that you in PDE had to do manually and in many time machine specific ways. With tycho you have your source and since it uses mvn an .m2 repository local on disk. Here the build will fail because of the missing Plugin Z - and thus you would go and add a p2 repository (or more) to your build. Now with that repository available tycho can create an implicit target platform by getting the missing Z from the repo and then build A,B and C. Easy stuff - but what if what you actually wanted was Plugin Z 1.7 ? what happens if you p2 repo gets a new 1.9 version ? Your build will be affected by it!\n
  • Another aspect of tycho is the whole “getting and resolving dependencies mechanism”. something that you in PDE had to do manually and in many time machine specific ways. With tycho you have your source and since it uses mvn an .m2 repository local on disk. Here the build will fail because of the missing Plugin Z - and thus you would go and add a p2 repository (or more) to your build. Now with that repository available tycho can create an implicit target platform by getting the missing Z from the repo and then build A,B and C. Easy stuff - but what if what you actually wanted was Plugin Z 1.7 ? what happens if you p2 repo gets a new 1.9 version ? Your build will be affected by it!\n
  • Another aspect of tycho is the whole “getting and resolving dependencies mechanism”. something that you in PDE had to do manually and in many time machine specific ways. With tycho you have your source and since it uses mvn an .m2 repository local on disk. Here the build will fail because of the missing Plugin Z - and thus you would go and add a p2 repository (or more) to your build. Now with that repository available tycho can create an implicit target platform by getting the missing Z from the repo and then build A,B and C. Easy stuff - but what if what you actually wanted was Plugin Z 1.7 ? what happens if you p2 repo gets a new 1.9 version ? Your build will be affected by it!\n
  • Another aspect of tycho is the whole “getting and resolving dependencies mechanism”. something that you in PDE had to do manually and in many time machine specific ways. With tycho you have your source and since it uses mvn an .m2 repository local on disk. Here the build will fail because of the missing Plugin Z - and thus you would go and add a p2 repository (or more) to your build. Now with that repository available tycho can create an implicit target platform by getting the missing Z from the repo and then build A,B and C. Easy stuff - but what if what you actually wanted was Plugin Z 1.7 ? what happens if you p2 repo gets a new 1.9 version ? Your build will be affected by it!\n
  • Another aspect of tycho is the whole “getting and resolving dependencies mechanism”. something that you in PDE had to do manually and in many time machine specific ways. With tycho you have your source and since it uses mvn an .m2 repository local on disk. Here the build will fail because of the missing Plugin Z - and thus you would go and add a p2 repository (or more) to your build. Now with that repository available tycho can create an implicit target platform by getting the missing Z from the repo and then build A,B and C. Easy stuff - but what if what you actually wanted was Plugin Z 1.7 ? what happens if you p2 repo gets a new 1.9 version ? Your build will be affected by it!\n
  • Another aspect of tycho is the whole “getting and resolving dependencies mechanism”. something that you in PDE had to do manually and in many time machine specific ways. With tycho you have your source and since it uses mvn an .m2 repository local on disk. Here the build will fail because of the missing Plugin Z - and thus you would go and add a p2 repository (or more) to your build. Now with that repository available tycho can create an implicit target platform by getting the missing Z from the repo and then build A,B and C. Easy stuff - but what if what you actually wanted was Plugin Z 1.7 ? what happens if you p2 repo gets a new 1.9 version ? Your build will be affected by it!\n
  • ...to help on that Tycho supports target definitions - here I can specify the Z plugin specific version and I can even add other plugins to the target platform which might not be explicitly needed by the plugin but might be relevant for actually running tests for this build. Same approach again tycho gets the plugin Z but now uses 1.7 and it also grabs the Q to do the build and after that Tycho can again build A,B and C.\n
  • ...to help on that Tycho supports target definitions - here I can specify the Z plugin specific version and I can even add other plugins to the target platform which might not be explicitly needed by the plugin but might be relevant for actually running tests for this build. Same approach again tycho gets the plugin Z but now uses 1.7 and it also grabs the Q to do the build and after that Tycho can again build A,B and C.\n
  • ...to help on that Tycho supports target definitions - here I can specify the Z plugin specific version and I can even add other plugins to the target platform which might not be explicitly needed by the plugin but might be relevant for actually running tests for this build. Same approach again tycho gets the plugin Z but now uses 1.7 and it also grabs the Q to do the build and after that Tycho can again build A,B and C.\n
  • ...to help on that Tycho supports target definitions - here I can specify the Z plugin specific version and I can even add other plugins to the target platform which might not be explicitly needed by the plugin but might be relevant for actually running tests for this build. Same approach again tycho gets the plugin Z but now uses 1.7 and it also grabs the Q to do the build and after that Tycho can again build A,B and C.\n
  • ...to help on that Tycho supports target definitions - here I can specify the Z plugin specific version and I can even add other plugins to the target platform which might not be explicitly needed by the plugin but might be relevant for actually running tests for this build. Same approach again tycho gets the plugin Z but now uses 1.7 and it also grabs the Q to do the build and after that Tycho can again build A,B and C.\n
  • Now what if I wanted to build C on its own - do I still need to check out A & B to build ? no, you can actually publish your results to a p2 repository (in reality its just a directory on an http server) and you as a user can do that or your hudson build can do it and other builds can now pick it up.\n
  • Now what if I wanted to build C on its own - do I still need to check out A & B to build ? no, you can actually publish your results to a p2 repository (in reality its just a directory on an http server) and you as a user can do that or your hudson build can do it and other builds can now pick it up.\n
  • Now what if I wanted to build C on its own - do I still need to check out A & B to build ? no, you can actually publish your results to a p2 repository (in reality its just a directory on an http server) and you as a user can do that or your hudson build can do it and other builds can now pick it up.\n
  • ...so how does that work ? well you just have your C plugin checked out and for this example i stated that C needs Z and B. Now because my latest builds are available in the p2 repositories tycho is again able to create a target platform that allows me to build C….so we used this setup but it actually gave us a lesson in time.\n
  • ...so how does that work ? well you just have your C plugin checked out and for this example i stated that C needs Z and B. Now because my latest builds are available in the p2 repositories tycho is again able to create a target platform that allows me to build C….so we used this setup but it actually gave us a lesson in time.\n
  • ...so how does that work ? well you just have your C plugin checked out and for this example i stated that C needs Z and B. Now because my latest builds are available in the p2 repositories tycho is again able to create a target platform that allows me to build C….so we used this setup but it actually gave us a lesson in time.\n
  • ...so how does that work ? well you just have your C plugin checked out and for this example i stated that C needs Z and B. Now because my latest builds are available in the p2 repositories tycho is again able to create a target platform that allows me to build C….so we used this setup but it actually gave us a lesson in time.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • Tycho is very good at matching how PDE/p2 is normally used by having .qualifiers and replace it with a real qualifier. its default a timestamp but you can also override it as shown here. the timpestamp is what caught us offguard since we have a build server in eastern us - our hudson instance lives there...and our team and community builds against it from all over the world. Now what happend is that tycho had a bug that made the build look as they were always done “back in time” and thus users local builds in Eu/Asia was hornored first, but those living behind that red line saw their builds sometime pickup old stuff because the timestamp was “ahead of time”.\n
  • luckily in 0.13 they fixed this and just like traditional mvn this qualifier is now generated with an UTC timestamp and not a local one! So at least use 0.13 if you are in a world wide team.\n
  • Another great thing about Tycho is that it generates updatesites just as easy as it builds plugins - since it has all the right metadata to do this based on the existing PDE build.properties and manifest.mf files it just works....but some things are missing in this picture...and that is...\n
  • Source features - I want our technical users to be able to see how we build the features they are using and let them contribute back easily. For that we need source Eclipse features. This before tycho required a lot of templating code and tedius setup and repetition. in tycho it just requires a bunch of xml noise.p.s. all this only work in 0.14+ \n
  • Source features - I want our technical users to be able to see how we build the features they are using and let them contribute back easily. For that we need source Eclipse features. This before tycho required a lot of templating code and tedius setup and repetition. in tycho it just requires a bunch of xml noise.p.s. all this only work in 0.14+ \n
  • The interesting part are that you just need to enable source-feature packaging and enable a p2-metadata generation of these during packaging.\nWhat are we getting for adding this bunch of xml ?\n
  • Before we had the updatesite as we were used to it...\n
  • Now we have source features in there - all nicely installable and reusable. Greatness! Just one of the many upsides of marrying maven and p2; it might not be perfect in the beginning but generally the end result is so much worth it.\n
  • ...but time is short and its time to try and sum up what is good, bad and ugly about Tycho . The good is that this stuff just works - the additional metadata is concise and opens up to use all the great stuff happening in the mvn ecosystem. And something I haven’t highlighted here is that the guys from sonatype and SAP and others are very active on the mailing list to help figure out the tricky corners and fix bugs you helped identify. The Bad side is that there are bugs and there have been some nasty ones but luckily most of these are fixed in 0.13 and onwards and I hope at tonight BOF’s we can tackle some of the left over issues… and if there is one ugly thing I should say about these is that to setup Tycho you need to understand mvn, osgi and P2 - and that is a challenge...but the same challenge also existed with PDE/Build and the power of tycho is that because it is much more strict it actually helped us to cleanup things we ignored or didnt realize was true problems for p2/osgi until Tycho told us differently.\n
  • ...but time is short and its time to try and sum up what is good, bad and ugly about Tycho . The good is that this stuff just works - the additional metadata is concise and opens up to use all the great stuff happening in the mvn ecosystem. And something I haven’t highlighted here is that the guys from sonatype and SAP and others are very active on the mailing list to help figure out the tricky corners and fix bugs you helped identify. The Bad side is that there are bugs and there have been some nasty ones but luckily most of these are fixed in 0.13 and onwards and I hope at tonight BOF’s we can tackle some of the left over issues… and if there is one ugly thing I should say about these is that to setup Tycho you need to understand mvn, osgi and P2 - and that is a challenge...but the same challenge also existed with PDE/Build and the power of tycho is that because it is much more strict it actually helped us to cleanup things we ignored or didnt realize was true problems for p2/osgi until Tycho told us differently.\n
  • ...but time is short and its time to try and sum up what is good, bad and ugly about Tycho . The good is that this stuff just works - the additional metadata is concise and opens up to use all the great stuff happening in the mvn ecosystem. And something I haven’t highlighted here is that the guys from sonatype and SAP and others are very active on the mailing list to help figure out the tricky corners and fix bugs you helped identify. The Bad side is that there are bugs and there have been some nasty ones but luckily most of these are fixed in 0.13 and onwards and I hope at tonight BOF’s we can tackle some of the left over issues… and if there is one ugly thing I should say about these is that to setup Tycho you need to understand mvn, osgi and P2 - and that is a challenge...but the same challenge also existed with PDE/Build and the power of tycho is that because it is much more strict it actually helped us to cleanup things we ignored or didnt realize was true problems for p2/osgi until Tycho told us differently.\n
  • ...so in overall Tycho is mostly just damn good :)\n
  • ...so in overall Tycho is mostly just damn good :)\n
  • ...and that actually concludes my talk and I’ve put some resource links here to what I’ve used to track/learn tycho and also the blog I’ve written about our tycho versions plugin for those that are interested...and with that I open up for questions.\n
  • ...and that actually concludes my talk and I’ve put some resource links here to what I’ve used to track/learn tycho and also the blog I’ve written about our tycho versions plugin for those that are interested...and with that I open up for questions.\n
  • ...and that actually concludes my talk and I’ve put some resource links here to what I’ve used to track/learn tycho and also the blog I’ve written about our tycho versions plugin for those that are interested...and with that I open up for questions.\n
  • ...and that actually concludes my talk and I’ve put some resource links here to what I’ve used to track/learn tycho and also the blog I’ve written about our tycho versions plugin for those that are interested...and with that I open up for questions.\n
  • ...and that actually concludes my talk and I’ve put some resource links here to what I’ve used to track/learn tycho and also the blog I’ve written about our tycho versions plugin for those that are interested...and with that I open up for questions.\n
  • ...and that actually concludes my talk and I’ve put some resource links here to what I’ve used to track/learn tycho and also the blog I’ve written about our tycho versions plugin for those that are interested...and with that I open up for questions.\n
  • ...and that actually concludes my talk and I’ve put some resource links here to what I’ve used to track/learn tycho and also the blog I’ve written about our tycho versions plugin for those that are interested...and with that I open up for questions.\n
  • Thank you - and Please go to this URL to vote on this talk! thank you!\n
  • Thank you - and Please go to this URL to vote on this talk! thank you!\n
  • Thank you - and Please go to this URL to vote on this talk! thank you!\n
  • Thank you - and Please go to this URL to vote on this talk! thank you!\n
  • Thank you - and Please go to this URL to vote on this talk! thank you!\n
  • Thank you - and Please go to this URL to vote on this talk! thank you!\n
  • Thank you - and Please go to this URL to vote on this talk! thank you!\n

Tycho - good, bad or ugly ? Tycho - good, bad or ugly ? Presentation Transcript

  • Tycho: Max Rydahl Andersen Red Hat at EclipseCon 2012
  • Tycho: Max Rydahl Andersen Red Hat at EclipseCon 2012
  • •Plugins for JBoss and related technology•AS, JSF, CDI, Seam, Portal, Birt, Maven, …•Top ~5 plugin on Eclipse Market Place
  • 1.200.000 starts of JBoss Tools January-March 2012
  • •45 modules•~8 year old •222 plugins•PDE Ant Build •76 features •36 test features •154 test plugins
  • •45 modules •~8 year old •222 plugins •PDE Ant Build •76 features •36 test features •154 test pluginsa.k.a. The “Big Ass” Project that moved to Tycho
  • PDE/Ant Build common plugins .core .ui ... features .feature .source.fe ature ... tests .tests ... site
  • PDE/Tychocommon plugins .core .ui ... features .feature .source.fe ature ... tests .tests ... site
  • PDE/Tychocommon plugins .core <?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> .ui <parent> <groupId>org.jboss.tools.common</groupId> ... <artifactId>plugins</artifactId> <version>3.3.0-SNAPSHOT</version> </parent> features .feature <groupId>org.jboss.tools.common.plugins</groupId> .source.fe <artifactId>org.jboss.tools.common</artifactId> ature <packaging>eclipse-plugin</packaging> </project> ... tests .tests ... site
  • PDE/Tychocommon plugins .core <?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> .ui <parent> <groupId>org.jboss.tools.common</groupId> ... <artifactId>plugins</artifactId> <version>3.3.0-SNAPSHOT</version> </parent> features .feature <groupId>org.jboss.tools.common.plugins</groupId> .source.fe <artifactId>org.jboss.tools.common</artifactId> ature <packaging>eclipse-plugin</packaging> </project> ... <packaging>eclipse-test-plugin</packaging> <packaging>eclipse-feature</packaging> tests .tests <packaging>eclipse-repository</packaging> <packaging>eclipse-application</packaging> ... site
  • common plugins .core ”Big Ass” .ui ... features .feature .source.fe ature ... tests .tests ... site
  • common plugins .core hibernate CDI ”Big Ass” plugins .core JSF plugins .core ... plugins .core ... plugins .core plugins .core seam plugins .core .ui .ui .ui .ui .ui .ui .ui ... ... ... ... ... features .feature ... ... .source.fe features .feature features .feature ature features .feature features .feature features .feature features .feature ... .source.fe ature .source.fe ature .source.fe .source.fe .source.fe tests .tests .source.fe ature ature ature ... ature ... ... ... ... ... tests .tests site ... tests .tests ... tests .tests tests .tests tests .tests tests .tests ... site ... site ... ... ... site site site site ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core .ui .ui .ui .ui .ui .ui .ui .ui .ui .ui .ui .ui ... ... ... ... ... ... ... ... ... ... ... ... features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe ature ature ature ature ature ature ature ature ature ature ature ature... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... ... ... ... ... ... ... ... ... ... ... ... .ui .ui .ui .ui .ui .ui .ui .ui .ui .ui .ui .ui tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature site site site site site site site site site site site site .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe ature ature ature ature ature ature ature ature ature ature ature ature ... ... ... ... ... ... ... ... ... ... ... ... tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... plugins .core ... ... ... ... ... ... ... ... ... ... ... ... .ui .ui .ui .ui .ui .ui .ui .ui .ui .ui .ui .ui site site site site site site site site site site site site ... ... ... ... ... ... ... ... ... ... ... ... features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature features .feature .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe .source.fe ature ature ature ature ature ature ature ature ature ature ature ature ... ... ... ... ... ... ... ... ... ... ... ... tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests tests .tests ... ... ... ... ... ... ... ... ... ... ... ... site site site site site site site site site site site site
  • General Layoutcommon plugins .core .ui ... features .feature .source.fe ature ... tests .tests ... site
  • General Layoutcommon plugins .core •module is a “releasable unit” .ui ... features .feature .source.fe ature ... tests .tests ... site
  • General Layoutcommon plugins .core •module is a “releasable unit” .ui •pom.xml at each level ... features .feature .source.fe ature ... tests .tests ... site
  • General Layoutcommon plugins .core •module is a “releasable unit” .ui •pom.xml at each level ... •allows to build subparts very features .feature easily .source.fe ature ... tests .tests ... site
  • General Layoutcommon plugins .core •module is a “releasable unit” .ui •pom.xml at each level ... •allows to build subparts very features .feature easily .source.fe •separate customization for ature modules ... tests .tests ... site
  • General Layoutcommon plugins .core •module is a “releasable unit” .ui •pom.xml at each level ... •allows to build subparts very features .feature easily .source.fe •separate customization for ature modules •Can use mvn version per module ... tests .tests ... site
  • tycho-versions-plugincommon plugins .core .ui ... features .feature .source.fe ature ... tests .tests ... site
  • tycho-versions-plugincommon plugins .core 1.0.22.0.1 2.0.1 .ui 1.0.3 ... 1.1.2 features .feature 2.0.1 2.0.1 .source.fe ature 2.0.1 ... 1.1.2 tests .tests 1.1.2 2.0.1 ... 1.1.2 site 1.1.3
  • tycho-versions-plugincommon plugins .core 1.0.22.0.1 2.0.1 .ui 1.0.3 ... 1.1.2 mvn org.eclipse.tycho:tycho-versions- features .feature 2.0.1 plugin:set-version -DnewVersion=2.0.2 2.0.1 .source.fe ature 2.0.1 ... 1.1.2 tests .tests 1.1.2 2.0.1 ... 1.1.2 site 1.1.3
  • tycho-versions-plugincommon plugins .core 1.0.22.0.2 2.0.2 .ui 1.0.3 ... 1.1.2 features .feature 2.0.2 2.0.2 .source.fe ature 2.0.2 ... 1.1.2 tests .tests 1.1.2 2.0.2 ... 1.1.2 site 1.1.3
  • tycho-versions-plugincommon plugins .core 2.0.22.0.2 2.0.2 .ui 2.0.2 ... 2.0.2 features .feature 2.0.2 2.0.2 .source.fe ature 2.0.2 ... 2.0.2 tests .tests 2.0.2 2.0.2 ... 2.0.2 site 2.0.2
  • tycho-versions-plugincommon plugins .core 2.0.22.0.2 2.0.2 .ui 2.0.2 ... 2.0.2 mvn org.eclipse.tycho:tycho-versions- features .feature 2.0.2 plugin:set-version -DnewVersion=2.1.0 2.0.2 .source.fe ature 2.0.2 ... 2.0.2 tests .tests 2.0.2 2.0.2 ... 2.0.2 site 2.0.2
  • tycho-versions-plugincommon plugins .core 2.1.02.1.0 2.1.0 .ui 2.1.0 ... 2.1.0 features .feature 2.1.0 2.1.0 .source.fe ature 2.1.0 ... 2.1.0 tests .tests 2.1.0 2.1.0 ... 2.1.0 site 2.1.0
  • tycho-versions-plugincommon plugins .core 1.7.32.1.0 2.1.0 .ui 2.1.0 ... 2.1.0 features .feature 2.1.0 2.1.0 .source.fe ature 2.1.0 ... 2.1.0 tests .tests 2.1.0 2.1.0 ... 2.1.0 site 2.1.0
  • tycho-versions-plugincommon plugins .core 1.7.32.1.0 2.1.0 .ui 2.1.0 ... 2.1.0 mvn org.eclipse.tycho:tycho-versions- features .feature 2.1.0 plugin:set-version -DnewVersion=2.1.1 2.1.0 .source.fe ature 2.1.0 ... 2.1.0 tests .tests 2.1.0 2.1.0 ... 2.1.0 site 2.1.0
  • tycho-versions-plugincommon plugins .core 1.7.32.1.1 2.1.1 .ui 2.1.1 ... 2.1.1 features .feature 2.1.1 2.1.1 .source.fe ature 2.1.1 ... 2.1.1 tests .tests 2.1.1 2.1.1 ... 2.1.1 site 2.1.1
  • tycho-versions-plugincommon plugins .core 1.7.32.1.1 2.1.1 .ui 2.1.1 •Easy update of versions in ... 2.1.1 •pom.xml •manifest.mf features .feature 2.1.1 •feature.xml 2.1.1 .source.fe ature 2.1.1 •site.xml ... 2.1.1 •.product tests .tests 2.1.1 •…. 2.1.1 ... 2.1.1 •Don’t Repeat Yourself site 2.1.1
  • Plugin A Require-Bundle: Z [1.2;2.0] Plugin B Plugin CRequire-Bundle: Z [1.7;2.0] Source
  • Plugin A Require-Bundle: Z [1.2;2.0] Plugin B Plugin CRequire-Bundle: Z [1.7;2.0] Source ~/.m2/repository
  • Plugin A p2 repositories Require-Bundle: Z [1.2;2.0] Plugin Q 1.2.1 Plugin B Plugin Z 1.7 Plugin Z 1.8 Plugin CRequire-Bundle: Z [1.7;2.0] Plugin Z 2.0 Source ~/.m2/repository
  • Plugin A p2 repositories Require-Bundle: Z [1.2;2.0] Plugin Q 1.2.1 Plugin B Plugin Z 1.7 Plugin Z 1.8 Plugin CRequire-Bundle: Z [1.7;2.0] Plugin Z 2.0 Source Plugin Z 1.8 ~/.m2/repository
  • Plugin A p2 repositories Require-Bundle: Z [1.2;2.0] Plugin Q 1.2.1 Plugin B Plugin Z 1.7 Plugin Z 1.8 Plugin CRequire-Bundle: Z [1.7;2.0] Plugin Z 2.0 Source Plugin B 1.2.3 Plugin C Plugin Z 1.8 1.2.3 Plugin A 1.2.3 ~/.m2/repository
  • Plugin A p2 repositories Require-Bundle: Z [1.2;2.0] Plugin Z 1.7 Plugin Q Plugin Q 1.2.1 Plugin B Target Definition Plugin Z 1.7 Plugin Z 1.8 Plugin CRequire-Bundle: Z [1.7;2.0] Plugin Z 2.0 Source ~/.m2/repository
  • Plugin A p2 repositories Require-Bundle: Z [1.2;2.0] Plugin Z 1.7 Plugin Q Plugin Q 1.2.1 Plugin B Target Definition Plugin Z 1.7 Plugin Z 1.8 Plugin CRequire-Bundle: Z [1.7;2.0] Plugin Z 2.0 Source Plugin Z 1.7 Plugin Q 1.2.1 ~/.m2/repository
  • Plugin A p2 repositories Require-Bundle: Z [1.2;2.0] Plugin Z 1.7 Plugin Q Plugin Q 1.2.1 Plugin B Target Definition Plugin Z 1.7 Plugin Z 1.8 Plugin CRequire-Bundle: Z [1.7;2.0] Plugin Z 2.0 Source Plugin B Plugin Z 1.7 1.2.3 Plugin C 1.2.3 Plugin A Plugin Q 1.2.1 1.2.3 ~/.m2/repository
  • Plugin A p2 repositories Require-Bundle: Z [1.2;2.0] Plugin Z 1.7 Plugin Q Plugin Q 1.2.1 Plugin B Target Definition Plugin Z 1.7 Plugin Z 1.8 Plugin CRequire-Bundle: Z [1.7;2.0] Plugin Z 2.0 Source Plugin B Plugin Z 1.7 1.2.3 Plugin C 1.2.3 Plugin A Plugin Q 1.2.1 1.2.3 ~/.m2/repository
  • Plugin A p2 repositories Require-Bundle: Z [1.2;2.0] Plugin Z 1.7 Plugin Q Plugin Q 1.2.1 Plugin B Target Definition Plugin Z 1.7 Plugin Z 1.8 Plugin CRequire-Bundle: Z [1.7;2.0] Plugin Z 2.0 Source Plugin B Plugin Z 1.7 1.2.3 Plugin C Plugin B 1.2.3 1.2.3 Plugin A Plugin Q 1.2.1 1.2.3 Plugin A 1.2.3 ~/.m2/repository
  • p2 repositories Plugin Z 1.7 Plugin Q Plugin Q 1.2.1 Plugin C Target Definition Plugin Z 1.7Require-Bundle: Z Plugin Z 1.8 [1.7;2.0] B Plugin Z 2.0 Source Plugin B 1.2.3 Plugin A 1.2.3 ~/.m2/repository
  • p2 repositories Plugin Z 1.7 Plugin Q Plugin Q 1.2.1 Plugin C Target Definition Plugin Z 1.7Require-Bundle: Z Plugin Z 1.8 [1.7;2.0] B Plugin Z 2.0 Source Plugin B Plugin Z 1.7 1.2.3 Plugin B 1.2.3 Plugin Q 1.2.1 Plugin A 1.2.3 ~/.m2/repository
  • p2 repositories Plugin Z 1.7 Plugin Q Plugin Q 1.2.1 Plugin C Target Definition Plugin Z 1.7Require-Bundle: Z Plugin Z 1.8 [1.7;2.0] B Plugin Z 2.0 Source Plugin B Plugin Z 1.7 1.2.3 Plugin B 1.2.3 Plugin C Plugin Q 1.2.1 1.2.3 Plugin A 1.2.3 ~/.m2/repository
  • ! ! <format>vyyyyMMdd-HHmm-${BID}</format>
  • ! ! <format>vyyyyMMdd-HHmm-${BID}</format>
  • ! ! <format>vyyyyMMdd-HHmm-${BID}</format>
  • ! ! <format>vyyyyMMdd-HHmm-${BID}</format>
  • ! ! <format>vyyyyMMdd-HHmm-${BID}</format>
  • ! ! <format>vyyyyMMdd-HHmm-${BID}</format>
  • 0.13+ ! ! <format>vyyyyMMdd-HHmm-${BID}</format>
  • Update Sitescommon plugins .core artifacts.jar content.jar .ui features/org.jboss.tools.forge.feature_1.0.0.v20120327-0403-Beta3.jar ... features/org.jboss.tools.forge.test.feature_1.0.0.v20120327-0403-Beta3.jar features .feature .source.fe plugins/org.jboss.tools.forge.core.test_1.0.0.v20120327-0403-Beta3.jar ature plugins/org.jboss.tools.forge.core_1.0.0.v20120327-0403-Beta3.jar ... plugins/org.jboss.tools.forge.runtime.ext_1.0.0.v20120327-0403-Beta3.jar tests .tests plugins/org.jboss.tools.forge.runtime_1.0.0.v20120327-0403-Beta3.jar ... site plugins/org.jboss.tools.forge.ui.test_1.0.0.v20120327-0403-Beta3.jar plugins/org.jboss.tools.forge.ui_1.0.0.v20120327-0403-Beta3.jar
  • Source Featurescommon plugins .core .ui ... features .feature .source.fe ature ... tests .tests ... site
  • Source Features <plugins>common plugins .core <plugin> <groupId>org.eclipse.tycho.extras</groupId> <artifactId>tycho-source-feature-plugin</artifactId> .ui <version>${tychoVersion}</version> <executions> <execution> ... <id>source-feature</id> <phase>package</phase> <goals> features .feature <goal>source-feature</goal> </goals> </execution> .source.fe </executions> ature </plugin> <plugin> ... <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-p2-plugin</artifactId> <version>${tychoVersion}</version> tests .tests <executions> <execution> <id>attached-p2-metadata</id> <phase>package</phase> ... <goals> <goal>p2-metadata</goal> site </goals> </execution> </executions> </plugin> </plugins>
  • Source Features <plugins>common plugins .core <plugin> <groupId>org.eclipse.tycho.extras</groupId> <artifactId>tycho-source-feature-plugin</artifactId> .ui <version>${tychoVersion}</version> <executions> <execution> ... <id>source-feature</id> <phase>package</phase> <goals> features .feature <goal>source-feature</goal> </goals> </execution> .source.fe </executions> ature </plugin> <plugin> ... <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-p2-plugin</artifactId> <version>${tychoVersion}</version> tests .tests <executions> <execution> <id>attached-p2-metadata</id> <phase>package</phase> ... <goals> <goal>p2-metadata</goal> site </goals> </execution> 0.14+ </executions> </plugin> </plugins>
  • Source Features <plugins>common plugins .core <plugin> <groupId>org.eclipse.tycho.extras</groupId> <artifactId>tycho-source-feature-plugin</artifactId> .ui <version>${tychoVersion}</version> <executions> <execution> ... <id>source-feature</id> <phase>package</phase> <goals> features .feature <goal>source-feature</goal> </goals> </execution> .source.fe </executions> ature </plugin> <plugin> ... <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-p2-plugin</artifactId> <version>${tychoVersion}</version> tests .tests <executions> <execution> <id>attached-p2-metadata</id> <phase>package</phase> ... <goals> <goal>p2-metadata</goal> site </goals> </execution> </executions> </plugin> </plugins>
  • Source Featurescommon plugins .core artifacts.jar content.jar .ui features/org.jboss.tools.forge.feature_1.0.0.v20120327-0403-Beta3.jar ... features/org.jboss.tools.forge.test.feature_1.0.0.v20120327-0403-Beta3.jar features .feature .source.fe plugins/org.jboss.tools.forge.core.test_1.0.0.v20120327-0403-Beta3.jar ature plugins/org.jboss.tools.forge.core_1.0.0.v20120327-0403-Beta3.jar ... plugins/org.jboss.tools.forge.runtime.ext_1.0.0.v20120327-0403-Beta3.jar tests .tests plugins/org.jboss.tools.forge.runtime_1.0.0.v20120327-0403-Beta3.jar ... site plugins/org.jboss.tools.forge.ui.test_1.0.0.v20120327-0403-Beta3.jar plugins/org.jboss.tools.forge.ui_1.0.0.v20120327-0403-Beta3.jar
  • Source Featurescommon plugins .core artifacts.jar content.jar .ui features/org.jboss.tools.forge.feature.source_1.0.0.v20120327-0403-Beta3.jar features/org.jboss.tools.forge.feature_1.0.0.v20120327-0403-Beta3.jar ... features/org.jboss.tools.forge.test.feature.source_1.0.0.v20120327-0403-Beta3. features/org.jboss.tools.forge.test.feature_1.0.0.v20120327-0403-Beta3.jar features .feature plugins/org.jboss.tools.forge.core.source_1.0.0.v20120327-0403-Beta3.jar plugins/org.jboss.tools.forge.core.test.source_1.0.0.v20120327-0403-Beta3.jar .source.fe plugins/org.jboss.tools.forge.core.test_1.0.0.v20120327-0403-Beta3.jar ature plugins/org.jboss.tools.forge.core_1.0.0.v20120327-0403-Beta3.jar ... plugins/org.jboss.tools.forge.runtime.ext.source_1.0.0.v20120327-0403-Beta3.ja plugins/org.jboss.tools.forge.runtime.ext_1.0.0.v20120327-0403-Beta3.jar tests .tests plugins/org.jboss.tools.forge.runtime.source_1.0.0.v20120327-0403-Beta3.jar plugins/org.jboss.tools.forge.runtime_1.0.0.v20120327-0403-Beta3.jar plugins/org.jboss.tools.forge.ui.source_1.0.0.v20120327-0403-Beta3.jar ... plugins/org.jboss.tools.forge.ui.test.source_1.0.0.v20120327-0403-Beta3.jar site plugins/org.jboss.tools.forge.ui.test_1.0.0.v20120327-0403-Beta3.jar plugins/org.jboss.tools.forge.ui_1.0.0.v20120327-0403-Beta3.jar
  • Concise, Large Ecosystem, improving, growing, versatile, responsive community, Just WorksHas had some nasty bugs - but they are fixed (0.13/0.14+) Need to understand Maven + OSGi + p2 (Speed?)
  • Tycho:
  • Tycho: just damn’good
  • Tycho: Resources: http://wiki.eclipse.org/Category:Tycho http://wiki.eclipse.org/Tycho/ Reference_Card http://wiki.eclipse.org/Tycho/ http://bit.ly/maxtycho Packaging_Types“Coping with versions in large multi-module osgi projects” - http://bit.ly/rTWUsq
  • ?? ?? ?Tycho: Resources: ? ? http://wiki.eclipse.org/Category:Tycho http://wiki.eclipse.org/Tycho/ Reference_Card http://wiki.eclipse.org/Tycho/ http://bit.ly/maxtycho Packaging_Types“Coping with versions in large multi-module osgi projects” - http://bit.ly/rTWUsq
  • Tycho: http://bit.ly/maxtycho
  • ?? ?? ?Tycho: ? ? http://bit.ly/maxtycho