/Facade

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

Primary LanguageJavaGNU General Public License v2.0GPL-2.0

Build Status Coverage Status

Ownership changed

Join the chat at https://gitter.im/ayld/Facade

The official repo for this project is now here.

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, an eclpse plugin and perhaps a web project.

It's main target group is currently android development as space conservation is completely uneeded for web development, but it can be used for that also.

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.

Donations:

Fund me on Gittip