带有 Dropwizard 的外部罐子

External jars with Dropwizard

我正在尝试编写一个 Dropwizard 应用程序,它的文档告诉我我需要将所有内容都作为一个 uber jar 发送。

但是,在我的应用程序中,我需要支持多个数据库,这需要我的类路径中有多个数据库 JDBC 驱动程序 jar,所有这些都不会与我的应用程序一起提供。用户需要将相应的 JDBC jar 如 mysql-connector-java-5.1.39.jar 放置在自己的特定文件夹中。

在阅读了 Dropwizard 的 documentation 后,我不确定是否支持这种用法。有没有人有过以这种方式工作的经验?

自 java6 起,您可以使用通配符类路径。

使用应用程序插件,生成的 bin 文件夹将有一个包含类路径的启动脚本。我们想要做的是,不是在 bin 文件夹中列出所有可能的 jar,而是简单地包含所有这些。

注意:如果您希望类路径位于不同的位置,您也可以对不同的文件夹执行相同的操作。

这可以通过以下最简单的方式实现(以解决方法,因为我的版本中此插件存在问题)。在 build.gradle 你做:

startScripts {
  doLast {
    def windowsScriptFile = file getWindowsScript()
    def unixScriptFile    = file getUnixScript()
    windowsScriptFile.text = windowsScriptFile.text.replaceAll('CLASSPATH=.*', 'CLASSPATH=\$APP_HOME/lib/*')
    unixScriptFile.text  = unixScriptFile.text.replaceAll('CLASSPATH=.*', 'CLASSPATH=\$APP_HOME/lib/*')
  }
}

这将在启动脚本中通配您的 lib 文件夹。启动时,您的类路径将只是

lib/*

当您将 jar 放入该文件夹时,它们会自动被拾取(在启动时,而不是在运行时)。

希望对您有所帮助,

亚瑟