Skip to content

Instantly share code, notes, and snippets.

@fumokmm
Created May 17, 2010 20:04
Show Gist options
  • Save fumokmm/404167 to your computer and use it in GitHub Desktop.
Save fumokmm/404167 to your computer and use it in GitHub Desktop.
/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Wrap a script and groovy jars to an executable jar
*/
def cli = new CliBuilder()
cli.h( longOpt: 'help', required: false, 'show usage information' )
cli.d( longOpt: 'destfile', argName: 'destfile', required: false, args: 1, 'jar destintation filename, defaults to {mainclass}.jar' )
cli.m( longOpt: 'mainclass', argName: 'mainclass', required: true, args: 1, 'fully qualified main class, eg. HelloWorld' )
cli.c( longOpt: 'groovyc', required: false, 'Run groovyc' )
//--------------------------------------------------------------------------
def opt = cli.parse(args)
if (!opt) { return }
if (opt.h) {
cli.usage();
return
}
def mainClass = opt.m
def scriptBase = mainClass.replace( '.', '/' )
def scriptFile = new File( scriptBase + '.groovy' )
if (!scriptFile.canRead()) {
println "Cannot read script file: '${scriptFile}'"
return
}
def destFile = scriptBase + '.jar'
if (opt.d) {
destFile = opt.d
}
//--------------------------------------------------------------------------
def ant = new AntBuilder()
if (opt.c) {
ant.echo( "Compiling ${scriptFile}" )
org.codehaus.groovy.tools.FileSystemCompiler.main( [ scriptFile ] as String[] )
}
def GROOVY_HOME = new File( System.getenv('GROOVY_HOME') )
if (!GROOVY_HOME.canRead()) {
ant.echo( "Missing environment variable GROOVY_HOME: '${GROOVY_HOME}'" )
return
}
ant.jar( destfile: destFile, compress: true, index: true ) {
fileset( dir: '.', includes: scriptBase + '*.class' )
zipgroupfileset( dir: GROOVY_HOME, includes: 'embeddable/groovy-all-*.jar' )
zipgroupfileset( dir: GROOVY_HOME, includes: 'lib/commons*.jar' )
// add more jars here
manifest {
attribute( name: 'Main-Class', value: mainClass )
}
}
ant.echo( "Run script using: \'java -jar ${destFile} ...\'" )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment