Skip to content

A plugin for SBT to facilitate the use of ProGuard to create single jars for SBT-managed projects.

License

GPL-2.0, Unknown licenses found

Licenses found

GPL-2.0
LICENSE
Unknown
LICENSE.ext
Notifications You must be signed in to change notification settings

nuttycom/sbt-proguard-plugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

##Usage

Requires SBT. For SBT 0.9.0 and higher, please see siasia's version for XSBT: https://github.com/siasia/xsbt-proguard-plugin.git

To use the plugin in a project, you need to create project/plugins/Plugins.scala:

import sbt._
class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
  val proguard = "org.scala-tools.sbt" % "sbt-proguard-plugin" % "0.0.5"
}

and modify your project definition in project/build/Project. For example:

import sbt._
class Project(info: ProjectInfo) extends DefaultProject(info) with ProguardProject {
  override def proguardOptions = List(
    "-keep class MyClass { myMethod; }"
  )
}

This will add a proguard action which will run Proguard and generate output in target/project_vers.min.jar.

##Examples

If your project is a Scala project, you will need to add the Scala library to the set of input jar files. Do so as follows:

override def proguardInJars = super.proguardInJars +++ scalaLibraryPath

If you wish to include all Scala classes in your output (regardless of whether they are used), use the following option:

override def proguardOptions = List(
  ...,
  proguardKeepAllScala
)

If you wish to keep the main() entry point of a class, use:

override def proguardOptions = List(
  ...,
  proguardKeepMain("somepackage.SomeClass")
)

If you wish to keep everything that is Serializable, use:

override def proguardOptions = List(
  ...,
  proguardKeepLimitedSerializability
)

By default Proguard will be instructed to include everything except classes from the Java runtime. To treat additional libraries as external (i.e. to add them to the list of -libraryjars passed to Proguard), do the following:

val jarToExclude = "lib_extra" / "mylib.jar"
override def proguardLibraryJars = super.proguardLibraryJars +++ jarToExclude

By default all jar files passed to Proguard (except for the one that contains your project's classes) are filtered using somejar.jar(!META-INF/MANIFEST.MF). This is necessary to prevent conflicts when Proguard generates a single final jar. If you wish to filter other resources from a jar file, do the following:

override makeInJarFilter (file :String) = file match {
  case "some-special.jar" => super.makeInJarFilter(file) + ",!images/**"
  case _ => super.makeInJarFilter(file)
}

The argument to makeJarFilter will be the filename of the jar file in question (minus any path). Note that your project's jar file is always included without any filtering.

Other customizations are possible, take a look at the source to ProguardProject.

##Hacking on the plugin

If you need make modifications to the plugin itself, you can compile and install it locally (you need at least sbt 0.7.x to build it):

$ git clone git://github.com/nuttycom/sbt-proguard-plugin.git
$ cd sbt-proguard-plugin
$ sbt update publish-local

##License

This plugin depends upon ProGuard (http://proguard.sourceforge.net/), which is licensed under the GNU General Public License version 2.0. As such, this plugin is distributed under the same license; you are free to use and modify this work so long as any derivative work complies with the distribution terms. See LICENSE for additional information.

##Credits

This code is based on work by Jan Berkel for the SBT android plugin.

About

A plugin for SBT to facilitate the use of ProGuard to create single jars for SBT-managed projects.

Resources

License

GPL-2.0, Unknown licenses found

Licenses found

GPL-2.0
LICENSE
Unknown
LICENSE.ext

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages