{
    "componentChunkName": "component---src-templates-post-js",
    "path": "/blog/2011/08/08/jruby-branch-merged/",
    "result": {"data":{"blog":{"html":"<div class=\"paragraph\">\n<p><span class=\"image\"><img src=\"https://web.archive.org/web/*/https://agentdero.cachefly.net/continuousblog/jruby.png\" alt=\"jruby\" width=\"150\"></span> Yesterday, <a href=\"https://twitter.com/kohsukekawa\">Kohsuke</a> <a href=\"https://groups.google.com/group/jenkinsrb/msg/32815b1ea917355d\">announced</a> that the 'jruby' branch of jenkins-core had been <a href=\"https://github.com/jenkinsci/jenkins/commit/f6373f7ada14a7914f4ae08b6af4c1b27d343c21\">merged to master</a>.</p>\n</div>\n<div class=\"paragraph\">\n<p>This doesn&#8217;t mean that we&#8217;re done and that you can go forth and write pure ruby plugins&#8230;&#8203; not by any stretch of the imagination. Instead, what it <em>does</em> mean, is that the Jenkins mainline is much more friendly to runtime analysis of classes with which it is not familiar.</p>\n</div>\n<div class=\"sect1\">\n<h2 id=\"the-problem\"><a class=\"anchor\" href=\"#the-problem\"></a>The problem</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>When analyzing plugin classes, Jenkins uses just about every kind of metadata you can think of to get information about them: Class name, Field names, method names, member modifiers, annotations, you name it. It even uses the containing class relationship for inner classes to match Descriptors with what they describe.</p>\n</div>\n<div class=\"paragraph\">\n<p>It&#8217;s all a great example of convention over configuration (CoC). In fact, I&#8217;ve never really seen CoC implemented in a Java project before as successfully as it has been in Jenkins. Plugin authors don&#8217;t have to duplicate any metadata that Jenkins can figure out for you&#8201;&#8212;&#8201;and it&#8217;s alot! The drawback though, is that extensions depend very heavily on conforming to the structure of a conventional Java class.</p>\n</div>\n<div class=\"paragraph\">\n<p>The changes in this merge, and in several of the modules on which Jenkins depends, allow more than ever to get this information by asking an object directly rather than querying its private class structure.</p>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"the-kicker\"><a class=\"anchor\" href=\"#the-kicker\"></a>The Kicker</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Many of theses changes aren&#8217;t even JRuby specific! While they do enable JRuby integration, They&#8217;re really just making things more friendly for dynamic languages in general. So, in theory, it should pave the way for others like JavaScript and Python.</p>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"where-now\"><a class=\"anchor\" href=\"#where-now\"></a>Where now?</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>We&#8217;re still working on the ruby runtime and tools which will provide as crisp a Ruby development experience as we can. I don&#8217;t want to proffer an estimate of when those will begin to be useable, but it is important to mark this very important milestone and explain what it does and does not mean.</p>\n</div>\n<div class=\"sect2\">\n<h3 id=\"we-need-you\"><a class=\"anchor\" href=\"#we-need-you\"></a>We need you!</h3>\n<div class=\"paragraph\">\n<p>There is still much work to be done to enable a writing Jenkins plugins in Ruby, we are looking for people who know Ruby and feel like pitching in: writing Rake tasks, improving the glue layer, documentation, etc.</p>\n</div>\n<div class=\"paragraph\">\n<p>If you&#8217;re interested, most of the action is happening on the <a href=\"https://groups.google.com/group/jenkinsrb\">jenkinsrb@googlegroups.com</a> mailing list, so join us!</p>\n</div>\n<hr>\n</div>\n</div>\n</div>","id":"34e23e7c-2907-539a-934f-3d4a07f89787","title":"JRuby Branch merged!","date":"2011-08-08T00:00:00.000Z","slug":"/blog/2011/08/08/jruby-branch-merged/","links":{"discourse":""},"authors":[{"avatar":null,"blog":null,"github":"cowboyd","html":"","id":"cowboyd","irc":null,"linkedin":null,"name":"Charles Lowell","slug":"/blog/authors/cowboyd","twitter":null}]}},"pageContext":{"next":"/blog/2011/08/09/jenkins-user-conference-call-for-papers/","previous":"/blog/2011/08/08/jenkins-user-conference/","id":"34e23e7c-2907-539a-934f-3d4a07f89787"}},
    "staticQueryHashes": ["1271460761","3649515864"]}