【问题标题】:Groovy - How to Build a JarGroovy - 如何构建一个 Jar
【发布时间】:2013-09-24 16:29:55
【问题描述】:

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

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

下面的两个回复都很有帮助,但是我怎样才能为签名的 Jar 文件做到这一点?例如:

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

【问题讨论】:

    标签: groovy jar jar-signing


    【解决方案1】:

    在 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' )
    }
    

    【讨论】:

    • 嗯,我又回到了 Class Not Found 异常。 SQL jar 必须在哪里才能正常工作,我将它放在同一个目录中,并更新了如上所示的清单。
    • SQL jar 的路径应该相对于您的应用程序 jar。如果您在类路径中指定多个位置,则它们应该用空格分隔,而不是像在命令行中那样使用;:
    【解决方案2】:

    从您的链接中,如果您查看 GroovyWrapper 脚本的源代码,就会发现这一行:

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

    我会明确地添加它。

    【讨论】:

      猜你喜欢
      • 2020-07-19
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多