View on GitHub

Facade

Facade significantly minimizes the space used by your project's /lib

Download this project as a .zip file Download this project as a tar.gz file

Facade

Facade tries to create a jar from all of the jars used by a project. The facade jar should contain only classes the project actually uses, nothing else.

This is currently just a library, but it should evolve to a Maven plugin and perhaps a web project.

Features

Source Dependency Resolution

Facade can resolve the dependencies of .java source files. Currently like this:

final Set<ClassName> dependencies = Dependencies
    .ofSource(SourceFile.fromFilepath("/abs/path/to/Source.java"))
    .set();

Binary Class Dependency Resolution

Facade can also resolve the dependencies of compiled binary .class files:

final Set<ClassName> dependencies = Dependencies
    .ofClass(ClassFile.fromFilepath("/abs/path/to/Class.class"))
    .set();

The Dependencies API can also work with the classpath or with Core API File objects (no streams yet though). For more info on the Dependencies API have a look at the wiki.

Library minimization

This will try to find all the 'actual dependencies' that a set of sources use, package them in a Jar and return it.

final JarFile outJar = Minimizer
    .sources("/abs/path/to/src/dir")
    .libs("/abs/path/to/libs") // this can also be a Maven ~/.m2/repository
    .getJar();

You can also set the output dir for the minimizer, have a look at the wiki for info.

Component Events

Facade can notify you for updates on what it is currently doing. For instanse if you want to get detailed info while resolving the dependencies of a binary class you can:

ListenerRegistrar.listeners(new Object() {

    @Subscribe
    public void listenOnStart(ClassDependencyResolutionStartEvent e) {
        // this will be called when the resolution starts
    }

    @Subscribe
    public void listenOnEnd(ClassDependencyResolutionEndEvent e) {
        // this will be called when the resolution ends
    }
}).register();

There is a whole hierarchy of events you can listen to, there is a wiki page on this also.

Usage

In order to use the library you can either:

You can also build the master branch (on your own risk) in the same way you build the latest tag.

Notes

Keep in mind that we're currently in very early alpha and the API changes constantly and can change dramatically :) Also wildcard imports in source files like import com.something.*; are currently not supported. So calling source dependency resolution on such a file or on a set containing one will result in an exception.