2013-07-02 2 views
0

Я пытался добавить некоторые Java-библиотеки (AWS SDK для Java, Apache Commons Math и т. Д.) В мой проект Grails, так как некоторые из моего исходного кода Java (помещены в src/java) зависимостей. Следуя этому ответу, я смог разрешить ошибки компиляции, добавив файлы jar в папку/lib и добавить его в путь сборки, как здесь набрали: Add Java Libraries to a Netbeans Grails ProjectGrails Project отсутствует библиотека Java во время выполнения

Однако, когда я вызываю свой исходный код Java из моего контроллер во время выполнения, он не может найти библиотеки Java, которые я добавил, показывая NoClassDefFoundError. Должен ли я добавлять что-то в файл BuildConfig.groovy? Я не уверен, что соглашение об именах для файлов jar будет добавлено в зависимости.

ответ

2

Вопрос, который вы говорите, это 5 лет. Вы должны использовать более новые ресурсы :)

Предпочитаемый подход заключается в использовании зависимостей в BuildConfig.groovy и позволяет Grails (через Ivy или Maven) загружать банки для вас один раз и повторно использовать их для разных проектов.

Не всегда очевидно, что такое синтаксис, и я нахожу, что http://mvnrepository.com/ - отличный ресурс. Например, если вы ищете «commons math» и нажмите до http://mvnrepository.com/artifact/org.apache.commons/commons-math, вы увидите несколько версий. Нажмите на версию 2.2, и вы увидите XML-зависимость Maven, но вы можете щелкнуть вкладку Gradle, и она будет похожа на то, что вам нужно для Grails. Так что я бы добавить

dependencies { 
    compile 'org.apache.commons:commons-math:2.2' 
} 

и при необходимости изменения compile к runtime, build и т.д. в зависимости от того, что вам нужна банка в процессе сборки.

В редком случае, когда у вас есть банка, недоступная в репозитории Maven (например, разделяемая библиотека в вашей компании), вы можете поместить файл jar в каталог lib. Как вы видели, Grails не обнаруживает его автоматически (это касается версии 2.0). Но вы можете запустить grails compile --refresh-dependencies, чтобы добавить свой кувшин в путь к классам.

+0

Спасибо за ссылку на репозиторий maven. Я попробовал оба метода, но все еще имею этот NoClassDefFoundError, несмотря на настройку зависимостей в BuildConfig.groovy. Исходный код java работает просто отлично сам по себе, но не при вызове контроллера Grails. – kennyzlei

+0

'NoClassDefFoundError' означает, что класс, который вы запрашиваете, есть, но тот или иной класс, от которого он зависит, не является. Итак, вы увидите, что код компилируется отлично, но не работает во время выполнения. Его легко путать с классом ClassNotFoundException. Используйте http://mvnrepository.com/, чтобы узнать, какие другие зависимости вы можете потерять (хотя они должны быть транзитивно загружены Ivy/Maven при использовании BuildConfig). –

0

. Моя проблема заключается в том, что у AWS Java SDK были зависимости (Apache HTTP Client), которые еще не были установлены и что я не знал об этом.

Это то, что я должен был настроить это для моего файла BuildConfig.groovy

dependencies { 
    runtime 'org.apache.httpcomponents:httpclient:4.2.5' 
    runtime 'com.amazonaws:aws-java-sdk:1.4.7' 
} 

Все зависимости для AWS Java SDK 1.4.7 можно найти здесь: http://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk/1.4.7. Все зависимости вне HTTP-клиента уже были установлены для меня, но, возможно, не для вашей установки Grails.

Смежные вопросы