You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@buildr.apache.org by Roy Tinker <ro...@gmail.com> on 2009/03/11 03:49:13 UTC
Package Buildr gem as a jar file
Hello,
I am looking to find a way to package Buildr as a single Jar file, to be run
alongside the jruby-complete-1.2.0RC2.jar file. Our current system (running
on Ant -- I'm trying to move to Buildr) downloads the executables (Jar and
Ant-XML) from source control and runs them on the JVM on a local machine
(which could be anywhere in the company). You can imagine how inconvenient
it would be to store all of 100 or more files associated with Buildr in
source control. It would be so much easier to have it all located inside a
single Jar file.
Nick Sieger has found a way of packaging gems as jars for JRuby -- see
http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar
Has anyone done this before? -- or, does anyone have an idea of where I can
start?
Here's what I have tried so far (with help from Nick's blog post) -- this is
a transcript of my session.
F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -S gem list
>
> *** LOCAL GEMS ***
>
> rake (0.8.4)
> rspec (1.1.12)
> sources (0.0.1)
>
> F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -S gem install -i ./buildr
> buildr --no-rdoc --no-ri
> JRuby limited openssl loaded. gem install jruby-openssl for full support.
> http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
> Successfully installed rake-0.8.1
> Successfully installed builder-2.1.2
> Successfully installed net-ssh-2.0.4
> Successfully installed net-sftp-2.0.1
> Successfully installed rubyzip-0.9.1
> Successfully installed highline-1.4.0
> Successfully installed rubyforge-1.0.0
> Successfully installed hoe-1.7.0
> Successfully installed Antwrap-0.7.0-java
> Successfully installed rspec-1.1.5
> Successfully installed xml-simple-1.0.11
> Successfully installed archive-tar-minitar-0.5.2
> Successfully installed jruby-openssl-0.2
> Successfully installed buildr-1.3.3-java
> 14 gems installed
>
> F:\jruby>jar cf buildr-gem.jar -C buildr .
>
> F:\jruby>dir
> Volume in drive F is DATA
> Volume Serial Number is ____-____
>
> Directory of F:\jruby
>
> 03/10/2009 07:41 PM <DIR> .
> 03/10/2009 07:41 PM <DIR> ..
> 03/06/2009 10:33 PM 279 build.rb
> 03/10/2009 07:40 PM <DIR> buildr
> *03/10/2009 07:42 PM 7,545,144 buildr-gem.jar*
> 03/09/2009 10:42 AM 10,279,665 jruby-complete-1.2.0RC2.jar
> 3 File(s) 17,825,088 bytes
> 3 Dir(s) 156,998,463,488 bytes free
>
> F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S gem list
>
> *** LOCAL GEMS ***
>
> Antwrap (0.7.0)
> archive-tar-minitar (0.5.2)
> builder (2.1.2)
> buildr (1.3.3)
> highline (1.4.0)
> hoe (1.7.0)
> jruby-openssl (0.2)
> net-sftp (2.0.1)
> net-ssh (2.0.4)
> rake (0.8.4, 0.8.1)
> rspec (1.1.12, 1.1.5)
> rubyforge (1.0.0)
> rubyzip (0.9.1)
> sources (0.0.1)
> xml-simple (1.0.11)
>
> F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S buildr
> jruby: No such file, directory, or command -- buildr
>
> F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar build.rb
> build.rb:3:in `require': no such file to load -- buildr (LoadError)
> from build.rb:3
>
> F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S irb
> irb(main):002:0> require 'rubygems'
> => true
> irb(main):003:0> require 'buildr'
> LoadError: no such file to load -- buildr
> from
> file:/F:/jruby/jruby-complete-1.2.0RC2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:
> in `require'
> from
> file:/F:/jruby/jruby-complete-1.2.0RC2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:
> in `require'
> from (irb):4
>
Thanks,
Roy
Re: Package Buildr gem as a jar file
Posted by Roy Tinker <ro...@gmail.com>.
Ok, I have filed JRUBY-3487, marked for fix in JRuby 1.2:
http://jira.codehaus.org/browse/JRUBY-3487
Thanks
Roy
On Wed, Mar 11, 2009 at 8:38 AM, Assaf Arkin <ar...@intalio.com> wrote:
> On Tue, Mar 10, 2009 at 7:49 PM, Roy Tinker <ro...@gmail.com> wrote:
>
> > Hello,
> >
> > I am looking to find a way to package Buildr as a single Jar file, to be
> > run
> > alongside the jruby-complete-1.2.0RC2.jar file. Our current system
> (running
> > on Ant -- I'm trying to move to Buildr) downloads the executables (Jar
> and
> > Ant-XML) from source control and runs them on the JVM on a local machine
> > (which could be anywhere in the company). You can imagine how
> inconvenient
> > it would be to store all of 100 or more files associated with Buildr in
> > source control. It would be so much easier to have it all located inside
> a
> > single Jar file.
> >
> > Nick Sieger has found a way of packaging gems as jars for JRuby -- see
> > http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar
> >
>
> *Note*: Unfortunately this technique does not yet work with gems that
> include Java code in embedded jar files (e.g., hpricot, mongrel,
> jruby-openssl). See JRUBY-3299 <http://jira.codehaus.org/browse/JRUBY-3299
> >.
> (We’d like to get this fixed for 1.1.7, but could use your help.)
>
> JRUBY 3229 is still open, and we do use jruby-openssl, so you should see
> Buildr failing when it tries to load that library. However, it not finding
> bin/buildr sounds to me like a JRuby bug:
>
> $ unzip -l buildr-gem.jar | head
> Archive: buildr-gem.jar
> Length Date Time Name
> -------- ---- ---- ----
> 0 03-10-09 23:01 META-INF/
> 60 03-10-09 23:01 META-INF/MANIFEST.MF
> 0 03-10-09 22:56 bin/
> 344 03-10-09 22:55 bin/autospec
> 344 03-10-09 22:56 bin/buildr
> 371 03-10-09 22:55 bin/minitar
> 338 03-10-09 22:54 bin/rake
>
> $ jruby -rbuildr-gem.jar -S autospec
> /bin/sh: autotest: command not found
>
> $ jruby -rbuildr-gem.jar -S buildr
> buildr:1: undefined method `buildr' for JRuby::Commands:Class
> (NoMethodError)
>
> $ jruby -rbuildr-gem.jar -S minitar
>
> file:/Users/assaf/work/test/buildr-gem.jar!/gems/archive-tar-minitar-0.5.2/bin/minitar:19:
> undefined method `require_gem' for main:Object (NoMethodError)
> from
>
> file:/Users/assaf/work/test/buildr-gem.jar!/gems/archive-tar-minitar-0.5.2/bin/minitar:19:in
> `load'
> from /opt/local/share/java/jruby/bin/minitar:19
>
> (I have minitar installed separately, so it picks the bin from outside the
> JAR)
>
> Assaf
>
>
>
> > Has anyone done this before? -- or, does anyone have an idea of where I
> can
> > start?
> >
> > Here's what I have tried so far (with help from Nick's blog post) -- this
> > is
> > a transcript of my session.
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -S gem list
> > >
> > > *** LOCAL GEMS ***
> > >
> > > rake (0.8.4)
> > > rspec (1.1.12)
> > > sources (0.0.1)
> > >
> > > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -S gem install -i
> ./buildr
> > > buildr --no-rdoc --no-ri
> > > JRuby limited openssl loaded. gem install jruby-openssl for full
> support.
> > > http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
> > > Successfully installed rake-0.8.1
> > > Successfully installed builder-2.1.2
> > > Successfully installed net-ssh-2.0.4
> > > Successfully installed net-sftp-2.0.1
> > > Successfully installed rubyzip-0.9.1
> > > Successfully installed highline-1.4.0
> > > Successfully installed rubyforge-1.0.0
> > > Successfully installed hoe-1.7.0
> > > Successfully installed Antwrap-0.7.0-java
> > > Successfully installed rspec-1.1.5
> > > Successfully installed xml-simple-1.0.11
> > > Successfully installed archive-tar-minitar-0.5.2
> > > Successfully installed jruby-openssl-0.2
> > > Successfully installed buildr-1.3.3-java
> > > 14 gems installed
> > >
> > > F:\jruby>jar cf buildr-gem.jar -C buildr .
> > >
> > > F:\jruby>dir
> > > Volume in drive F is DATA
> > > Volume Serial Number is ____-____
> > >
> > > Directory of F:\jruby
> > >
> > > 03/10/2009 07:41 PM <DIR> .
> > > 03/10/2009 07:41 PM <DIR> ..
> > > 03/06/2009 10:33 PM 279 build.rb
> > > 03/10/2009 07:40 PM <DIR> buildr
> > > *03/10/2009 07:42 PM 7,545,144 buildr-gem.jar*
> > > 03/09/2009 10:42 AM 10,279,665 jruby-complete-1.2.0RC2.jar
> > > 3 File(s) 17,825,088 bytes
> > > 3 Dir(s) 156,998,463,488 bytes free
> > >
> > > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S gem
> > list
> > >
> > > *** LOCAL GEMS ***
> > >
> > > Antwrap (0.7.0)
> > > archive-tar-minitar (0.5.2)
> > > builder (2.1.2)
> > > buildr (1.3.3)
> > > highline (1.4.0)
> > > hoe (1.7.0)
> > > jruby-openssl (0.2)
> > > net-sftp (2.0.1)
> > > net-ssh (2.0.4)
> > > rake (0.8.4, 0.8.1)
> > > rspec (1.1.12, 1.1.5)
> > > rubyforge (1.0.0)
> > > rubyzip (0.9.1)
> > > sources (0.0.1)
> > > xml-simple (1.0.11)
> > >
> > > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S
> buildr
> > > jruby: No such file, directory, or command -- buildr
> > >
> > > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar
> build.rb
> > > build.rb:3:in `require': no such file to load -- buildr (LoadError)
> > > from build.rb:3
> > >
> > > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S irb
> > > irb(main):002:0> require 'rubygems'
> > > => true
> > > irb(main):003:0> require 'buildr'
> > > LoadError: no such file to load -- buildr
> > > from
> > >
> >
> file:/F:/jruby/jruby-complete-1.2.0RC2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:
> > > in `require'
> > > from
> > >
> >
> file:/F:/jruby/jruby-complete-1.2.0RC2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:
> > > in `require'
> > > from (irb):4
> > >
> >
> >
> > Thanks,
> > Roy
> >
>
Re: Package Buildr gem as a jar file
Posted by Assaf Arkin <ar...@intalio.com>.
On Tue, Mar 10, 2009 at 7:49 PM, Roy Tinker <ro...@gmail.com> wrote:
> Hello,
>
> I am looking to find a way to package Buildr as a single Jar file, to be
> run
> alongside the jruby-complete-1.2.0RC2.jar file. Our current system (running
> on Ant -- I'm trying to move to Buildr) downloads the executables (Jar and
> Ant-XML) from source control and runs them on the JVM on a local machine
> (which could be anywhere in the company). You can imagine how inconvenient
> it would be to store all of 100 or more files associated with Buildr in
> source control. It would be so much easier to have it all located inside a
> single Jar file.
>
> Nick Sieger has found a way of packaging gems as jars for JRuby -- see
> http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar
>
*Note*: Unfortunately this technique does not yet work with gems that
include Java code in embedded jar files (e.g., hpricot, mongrel,
jruby-openssl). See JRUBY-3299 <http://jira.codehaus.org/browse/JRUBY-3299>.
(We’d like to get this fixed for 1.1.7, but could use your help.)
JRUBY 3229 is still open, and we do use jruby-openssl, so you should see
Buildr failing when it tries to load that library. However, it not finding
bin/buildr sounds to me like a JRuby bug:
$ unzip -l buildr-gem.jar | head
Archive: buildr-gem.jar
Length Date Time Name
-------- ---- ---- ----
0 03-10-09 23:01 META-INF/
60 03-10-09 23:01 META-INF/MANIFEST.MF
0 03-10-09 22:56 bin/
344 03-10-09 22:55 bin/autospec
344 03-10-09 22:56 bin/buildr
371 03-10-09 22:55 bin/minitar
338 03-10-09 22:54 bin/rake
$ jruby -rbuildr-gem.jar -S autospec
/bin/sh: autotest: command not found
$ jruby -rbuildr-gem.jar -S buildr
buildr:1: undefined method `buildr' for JRuby::Commands:Class
(NoMethodError)
$ jruby -rbuildr-gem.jar -S minitar
file:/Users/assaf/work/test/buildr-gem.jar!/gems/archive-tar-minitar-0.5.2/bin/minitar:19:
undefined method `require_gem' for main:Object (NoMethodError)
from
file:/Users/assaf/work/test/buildr-gem.jar!/gems/archive-tar-minitar-0.5.2/bin/minitar:19:in
`load'
from /opt/local/share/java/jruby/bin/minitar:19
(I have minitar installed separately, so it picks the bin from outside the
JAR)
Assaf
> Has anyone done this before? -- or, does anyone have an idea of where I can
> start?
>
> Here's what I have tried so far (with help from Nick's blog post) -- this
> is
> a transcript of my session.
>
> F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -S gem list
> >
> > *** LOCAL GEMS ***
> >
> > rake (0.8.4)
> > rspec (1.1.12)
> > sources (0.0.1)
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -S gem install -i ./buildr
> > buildr --no-rdoc --no-ri
> > JRuby limited openssl loaded. gem install jruby-openssl for full support.
> > http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
> > Successfully installed rake-0.8.1
> > Successfully installed builder-2.1.2
> > Successfully installed net-ssh-2.0.4
> > Successfully installed net-sftp-2.0.1
> > Successfully installed rubyzip-0.9.1
> > Successfully installed highline-1.4.0
> > Successfully installed rubyforge-1.0.0
> > Successfully installed hoe-1.7.0
> > Successfully installed Antwrap-0.7.0-java
> > Successfully installed rspec-1.1.5
> > Successfully installed xml-simple-1.0.11
> > Successfully installed archive-tar-minitar-0.5.2
> > Successfully installed jruby-openssl-0.2
> > Successfully installed buildr-1.3.3-java
> > 14 gems installed
> >
> > F:\jruby>jar cf buildr-gem.jar -C buildr .
> >
> > F:\jruby>dir
> > Volume in drive F is DATA
> > Volume Serial Number is ____-____
> >
> > Directory of F:\jruby
> >
> > 03/10/2009 07:41 PM <DIR> .
> > 03/10/2009 07:41 PM <DIR> ..
> > 03/06/2009 10:33 PM 279 build.rb
> > 03/10/2009 07:40 PM <DIR> buildr
> > *03/10/2009 07:42 PM 7,545,144 buildr-gem.jar*
> > 03/09/2009 10:42 AM 10,279,665 jruby-complete-1.2.0RC2.jar
> > 3 File(s) 17,825,088 bytes
> > 3 Dir(s) 156,998,463,488 bytes free
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S gem
> list
> >
> > *** LOCAL GEMS ***
> >
> > Antwrap (0.7.0)
> > archive-tar-minitar (0.5.2)
> > builder (2.1.2)
> > buildr (1.3.3)
> > highline (1.4.0)
> > hoe (1.7.0)
> > jruby-openssl (0.2)
> > net-sftp (2.0.1)
> > net-ssh (2.0.4)
> > rake (0.8.4, 0.8.1)
> > rspec (1.1.12, 1.1.5)
> > rubyforge (1.0.0)
> > rubyzip (0.9.1)
> > sources (0.0.1)
> > xml-simple (1.0.11)
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S buildr
> > jruby: No such file, directory, or command -- buildr
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar build.rb
> > build.rb:3:in `require': no such file to load -- buildr (LoadError)
> > from build.rb:3
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S irb
> > irb(main):002:0> require 'rubygems'
> > => true
> > irb(main):003:0> require 'buildr'
> > LoadError: no such file to load -- buildr
> > from
> >
> file:/F:/jruby/jruby-complete-1.2.0RC2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:
> > in `require'
> > from
> >
> file:/F:/jruby/jruby-complete-1.2.0RC2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:
> > in `require'
> > from (irb):4
> >
>
>
> Thanks,
> Roy
>
Re: Package Buildr gem as a jar file
Posted by Alex Boisvert <bo...@intalio.com>.
Hi Roy,
I'm also interested in this... So far what I've done is simply install
JRuby, add all the Gems and rezip it for redistribution.
The .jar file approach looks interesting. I'll play with it a little bit
and report if I manage to get anything working.
alex
On Tue, Mar 10, 2009 at 7:49 PM, Roy Tinker <ro...@gmail.com> wrote:
> Hello,
>
> I am looking to find a way to package Buildr as a single Jar file, to be
> run
> alongside the jruby-complete-1.2.0RC2.jar file. Our current system (running
> on Ant -- I'm trying to move to Buildr) downloads the executables (Jar and
> Ant-XML) from source control and runs them on the JVM on a local machine
> (which could be anywhere in the company). You can imagine how inconvenient
> it would be to store all of 100 or more files associated with Buildr in
> source control. It would be so much easier to have it all located inside a
> single Jar file.
>
> Nick Sieger has found a way of packaging gems as jars for JRuby -- see
> http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar
>
> Has anyone done this before? -- or, does anyone have an idea of where I can
> start?
>
> Here's what I have tried so far (with help from Nick's blog post) -- this
> is
> a transcript of my session.
>
> F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -S gem list
> >
> > *** LOCAL GEMS ***
> >
> > rake (0.8.4)
> > rspec (1.1.12)
> > sources (0.0.1)
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -S gem install -i ./buildr
> > buildr --no-rdoc --no-ri
> > JRuby limited openssl loaded. gem install jruby-openssl for full support.
> > http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
> > Successfully installed rake-0.8.1
> > Successfully installed builder-2.1.2
> > Successfully installed net-ssh-2.0.4
> > Successfully installed net-sftp-2.0.1
> > Successfully installed rubyzip-0.9.1
> > Successfully installed highline-1.4.0
> > Successfully installed rubyforge-1.0.0
> > Successfully installed hoe-1.7.0
> > Successfully installed Antwrap-0.7.0-java
> > Successfully installed rspec-1.1.5
> > Successfully installed xml-simple-1.0.11
> > Successfully installed archive-tar-minitar-0.5.2
> > Successfully installed jruby-openssl-0.2
> > Successfully installed buildr-1.3.3-java
> > 14 gems installed
> >
> > F:\jruby>jar cf buildr-gem.jar -C buildr .
> >
> > F:\jruby>dir
> > Volume in drive F is DATA
> > Volume Serial Number is ____-____
> >
> > Directory of F:\jruby
> >
> > 03/10/2009 07:41 PM <DIR> .
> > 03/10/2009 07:41 PM <DIR> ..
> > 03/06/2009 10:33 PM 279 build.rb
> > 03/10/2009 07:40 PM <DIR> buildr
> > *03/10/2009 07:42 PM 7,545,144 buildr-gem.jar*
> > 03/09/2009 10:42 AM 10,279,665 jruby-complete-1.2.0RC2.jar
> > 3 File(s) 17,825,088 bytes
> > 3 Dir(s) 156,998,463,488 bytes free
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S gem
> list
> >
> > *** LOCAL GEMS ***
> >
> > Antwrap (0.7.0)
> > archive-tar-minitar (0.5.2)
> > builder (2.1.2)
> > buildr (1.3.3)
> > highline (1.4.0)
> > hoe (1.7.0)
> > jruby-openssl (0.2)
> > net-sftp (2.0.1)
> > net-ssh (2.0.4)
> > rake (0.8.4, 0.8.1)
> > rspec (1.1.12, 1.1.5)
> > rubyforge (1.0.0)
> > rubyzip (0.9.1)
> > sources (0.0.1)
> > xml-simple (1.0.11)
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S buildr
> > jruby: No such file, directory, or command -- buildr
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar build.rb
> > build.rb:3:in `require': no such file to load -- buildr (LoadError)
> > from build.rb:3
> >
> > F:\jruby>java -jar jruby-complete-1.2.0RC2.jar -rbuildr-gem.jar -S irb
> > irb(main):002:0> require 'rubygems'
> > => true
> > irb(main):003:0> require 'buildr'
> > LoadError: no such file to load -- buildr
> > from
> >
> file:/F:/jruby/jruby-complete-1.2.0RC2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:
> > in `require'
> > from
> >
> file:/F:/jruby/jruby-complete-1.2.0RC2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:
> > in `require'
> > from (irb):4
> >
>
>
> Thanks,
> Roy
>