开发者

Selective jar packaging

I have my small program.jar that uses a small part of huge library.jar.

Is there a tool to repackage several jars into one so it can be run stand-alone and is as small as possib开发者_如何学Pythonle?

Update: size matters.


There is proguard, with ant and maven plugins. It removes unused code, optionally obfuscates and compresses to a single jar.

Proguard reduces the size on two fronts

  1. only the classes that are actually used are stored in the final jar.
  2. Long names, e.g. all the long package names, class names, are renamed to much shorter names, saving quite a bit of space.

Determining whether a class is used in java is a bit tricky. Static code analysis can get you so far, but you need to be a bit careful code accessed via reflection, since the tool may not be able to detect that. It handles Class.forName("x.y.z.Foo") but anything more complex and you'll need to add it to a config file of classes to include, It's possible to have a classloader generate a list of classes that are used at runtime, so this doesn't have to be arduous.

You might also want to investigate the pack200 compression scheme, as this can also bring a significant reduction in size of the jar.


JarJar is an ant based solution:

http://code.google.com/p/jarjar/

Or if you use maven, there's the shade plugin:

http://maven.apache.org/plugins/maven-shade-plugin/


You can try using the Ant jar task - more info can be read here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜