buildr-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Guymon <>
Subject Re: Creating an uberjar using Buildr
Date Thu, 19 May 2011 20:29:03 GMT

So I found an uberjar solution that works with the with my 20+ jar 

It uses one-jar, . The build process is 
not pretty, but it works. It requires the one-jar bootstrap jar to be 
exploded and updating the manifest with the class main for the app. The 
app dependencies are crammed into the lib dir, with the app jar in the 
main dir. It is all jarred using the jdk jar -cvmf command, the 
package(:zip) did not work for some reason. Seems to start up a lot 
faster than Buildr run command.

On 04/14/2011 11:51 AM, Michael Guymon wrote:
> While the uberjar task works 'in theory' it ended up not being usable 
> for the project I am working on. The classloader of Classworlds would 
> bomb on reflection based injection used by Spring annotations. The app 
> is also noticeably slower on startup using Classworlds as well. *sigh*
> The package(:jar).merge sounds good, but wouldn't duplicates get 
> overwritten? I have config xmls that are layered in various jars under 
> the same name. The solution I ended up with was to use `buildr run` 
> from a checkout of the app. Perhaps I'll tweak the app to avoid the 
> name collision and try the package(:jar).merge.
> I am half tempted to monkey around with Classworlds (perhaps Maven's 
> shale?) directly to make it do what I want. Seems being able to make 
> uberjars would be useful. Of coarse, I like java as stand alone 
> services and avoid the monolithic app servers, so I am a bit bias.
> On 04/14/2011 03:13 AM, Marc-André Laverdière wrote:
>> I think that Alex's option is good enough for most cases, but I do see
>> a point in integrating this. I think that Buildr will benefit a lot
>> from having a richer feature set, as it would attract more people to
>> it.
>> Just my 2 paise :)
>> On 4/14/11, Alex Boisvert<>  wrote:
>>> Cool, thanks for sharing!
>>> I usually do package(:jar).merge(some_other_jar) myself ... until it 
>>> gets
>>> intolerably slow.  Don't know why rubyzip is so CPU-consuming... 
>>> anyway at
>>> that point I end up forking to zip/jar and do the same externally.
>>> alex
>>> On Wed, Apr 13, 2011 at 2:08 PM, Michael Guymon
>>> <>wrote:
>>>> I spent hours fighting Classworld's uberjar to get it to work, 
>>>> figured I
>>>> would share the fruit of my labor. There are no examples that I 
>>>> could find
>>>> and the docs are outdated, so I hit it with a hammer until it 
>>>> worked. The
>>>> task will package the project jar and it's dependencies, allowing the
>>>> produced jar to be run by 'java -jar'. Here is the example task:
>>>> It copies the project jars, creates the classworld conf, explodes the
>>>> classwords-boot jar and wraps it up into project-ubjerjar-version.jar
>>>> --Michael

View raw message