Grape parece funcionar bastante bien para agregar jar a classpath. Es también hace un montón de otras cosas, como la gestión de obtención y dependencia. p.Make groovy script toma un jar del sistema de archivos como grape
#!/home/robert/bin/groovy
import org.apache.commons.lang.StringUtils
@Grab(group='commons-lang', module='commons-lang', version='2.4')
def strings = ['Hello', 'Groovy', 'AVeryLongWord!', 'A simple sentence']
strings.each { String aString ->
println "$aString: ${StringUtils.abbreviate(aString,10)}"
}
Desafortunadamente, si hay un tarro en mi sistema de archivos que quiero dinámicamente añadir al sistema de archivos entonces tengo que recurrir a una solución mucho más feo .
#!/home/robert/bin/groovy
def loader = this.class.classLoader.rootLoader
loader.addURL(new File("/home/robert/somejars/arithmetic-1.1.jar").toURI().toURL())
// can't use traditional package import
arithmeticMainClass = Class.forName("org.scharp.arithmetic.Main")
println "42 - 23 = " + arithmeticMainClass.subtract(42, 23)
// can't use "new" operator
myArithmeticObject = arithmeticMainClass.newInstance()
¿Hay alguna manera de hacer que Grab saque un frasco del sistema de archivos? Si no, ¿puedo de alguna manera reproducir lo que está haciendo la uva en groovy/java?
Me gustaría que esta solución funcione para scripts que pueden ser ejecutados por muchos usuarios y muchos archivos jar incompatibles, por lo que no será posible agregar archivos jar a un directorio común como ~/.groovy/lib /.
Podría crear un repositorio local de maven para libarías de jar locales, pero que parece excesivo.
Gracias por la respuesta. Mencioné que no quería crear un repositorio maven local; me gustaría poder especificar cualquier jar en el sistema de archivos. –
Lo siento, no me di cuenta de eso. Desde el [código fuente] (https://svn.codehaus.org/groovy/trunk/groovy/modules/grape-ivy/), parece que Grape está completamente construido encima de Ivy. Probablemente tendrías que implementar tu propia transformación AST para que esto funcione. –
Gracias por el enlace de origen, pero no puedo entenderlo :(Es una lástima, parece que la uva puede funcionar (descargar y cargar una jarra de hiedra) pero no caminar (cargar un jar del sistema de archivos) –