Skip to content

agalloch/diet-engine

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Status: Build Status Coverage Status Static Code Analysis Status Dependency Status

Chat with us: Chat at https://gitter.im/Codarama/diet-engine

Diet

Diet tries to create a jar from all of the jars used by a project. The result 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 mostly uneeded for web development.

Features

Source Dependency Resolution:

Diet 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:

Diet 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:

Diet 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.register(new EventListener<ComponentEvent>() {
    public void on(ComponentEvent event) {
        // will be called on any event
    }
});

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

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%