2016-08-15 5 views
0

Я пытаюсь написать приложение Dropwizard, и его документ сообщает мне, что мне нужно отправить все как uber jar.Внешние банки с Dropwizard

Однако в моем приложении мне необходимо поддерживать несколько баз данных, и для этого требуется несколько банок JDBC для базы данных в моем пути к классам, которые, как ожидается, не будут отправлены вместе с моим приложением. Ожидается, что пользователи помещают соответствующую банку JDBC, как mysql-connector-java-5.1.39.jar, в отдельную папку.

После чтения Dropwizard's documentation Я не уверен, поддерживается ли этот вид использования. У кого-нибудь есть опыт, чтобы он работал таким образом?

+0

Какую систему сборки вы используете? – pandaadb

+0

@pandaadb Я использую Gradle в качестве инструмента построения. – nybon

ответ

1

С java 6 вы можете подстановочные пути классов.

С помощью плагина приложения в сгенерированной папке bin будет запущен скрипт, содержащий путь к классам. То, что мы хотим сделать, заключается в том, чтобы вместо перечисления всех возможных банок в папке bin мы просто включили их все.

Примечание: вы также можете сделать то же самое с разными папками, если хотите, чтобы путь к классам находился в другом месте.

Это может быть достигнуто (обходным путем, так как есть проблемы с этим плагином в моей версии) самым простым способом. В 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/* 

Когда вы удаляете банки в эту папку, они автоматически будут подобраны (при запуске, а не во время выполнения).

Я надеюсь, что это помогает,

Артур