Groovy - 如何建立一个罐子

时间:2013-09-24 16:29:55

标签: groovy jar jar-signing

我编写了一个Groovy脚本,它依赖于SQL Server驱动程序(sqljdbc4.jar)。我可以使用GroovyWrapper(下面的链接)将其编译成JAR,但是如何才能将依赖项添加到Jar中?我正在寻找一种“最佳实践”的东西。

https://github.com/sdanzan/groovy-wrapper

以下两个回复都有帮助,但我如何为签名的Jar文件执行此操作?例如:

线程“main”中的异常java.lang.SecurityException:无效的签名文件d igest for Manifest主要属性

2 个答案:

答案 0 :(得分:6)

在groovy包装器脚本中,您会在底部附近看到这条线:

// add more jars here

这是您可以添加依赖项的地方。如果jar文件位于您正在构建的同一目录中,请添加如下所示的行:

zipgroupfileset( dir: '.', includes: 'sqljdbc4.jar' )

然后重新运行脚本,你的jar将包含来自sqljdbc4.jar的类。

编辑:

如果您所依赖的jar文件已签名且您需要维护签名,则必须保留外部jar。如果不使用自定义类加载器,则不能在其他jar文件中包含jar文件。但是,您可以在清单中指定依赖项,以避免必须设置类路径,即您的jar仍可以java -jar myjar.jar执行。将包装脚本中的清单部分更新为:

manifest {
    attribute( name: 'Main-Class', value: mainClass )
    attribute( name: 'Class-Path', value: 'sqljdbc4.jar' )
}

答案 1 :(得分:1)

在您的链接中,如果您查看GroovyWrapper脚本的来源,就会出现以下行:

zipgroupfileset( dir: GROOVY_HOME, includes: 'embeddable/groovy-all-*.jar' )
zipgroupfileset( dir: GROOVY_HOME, includes: 'lib/commons*.jar' )
// add more jars here

我明确地将其添加到那里。