2015-02-11 2 views
0

Я включаю банку в проект Grails и получаю класс, который не найден.Grails не может найти класс в jar

buildConfig.groovy

dependencies { 
    compile "labServices:labServices:1.0" 
} 
repositories { 
    flatDir name:'labServices', dirs:'../LabServices/build/libs/' 
} 

Когда я проверить labServices банки он содержит классы

Когда я осмотреть .war она содержит labServices.jar

Когда я осмотрю tomcat развертывание войны WEB_INF/lib содержит банку

Код, который не работает

//this is a class in the labServices.jar 
def clarityCredentials = new Clarity("prod", "xxxx", "xxxx") 

Ошибка

org.petermac.util.Clarity. StackTrace следующим образом: java.lang.ClassNotFoundException: org.petermac.util.Clarity

Я бежал чистит, очистили кэш плющ, удалены все вручную и по-прежнему не работает. Кроме того, он выполняется локально и через модульные тесты (так это война)

Примечание: Отчет о зависимости не показывает зависимостей для labServices, хотя есть некоторые. Может ли это быть проблемой?

Я относительно новичок в Grails (от Microsoft), поэтому любые трюки, идеи или методы отладки будут отличными.

Я довольно уверен, что это установка, когда путь к классам развертывается

UPDATE Фактический код ненужности удален

import org.petermac.util.Clarity 
public class LoadClarityController extends BaseController { 
    def load() 
    { 
     String samples = params.get("sampleIds") 
     def clarityCredentials = new Clarity("prod", "apiuser", "[email protected]") 
    } 
} 

//in LabServices (jar is being included in war) 
package org.petermac.util 
public class Clarity 
{ 
    public Clarity(server, username, password) 
    { 
    } 
} 

Путь даже появляется в META-INF (в войне). Также у меня есть еще одна внешняя банка, которая работает нормально? Я в недоумении.

ответ

0

И, наконец, проблема!

Servlet.class был основной причиной, поскольку это невозможно включить в проект grails (tomcat предоставляет это).

Сервлет.Класс живет в javax библиотеку, которая получает включена JavaEE библиотеки, которая была включена в проблемном банке так нагрузки LabServices .jar фактически терпит неудачу.

Не было простого способа найти это.

удаление или исключение javaee из модуля LabServices позволило решить эту проблему.

0

Поскольку это в WAR, это не проблема с зависимостью, это было бы только одно, если бы оно было проигнорировано в вашей среде IDE и/или run-app и/или не было включено в WAR. Все банки в WEB-INF/lib включены в путь класса, поэтому он, вероятно, структурный. Соответствует ли пакет папке? Если это так, то обычно будет работать в тестах и ​​run-app, но не при развертывании в контейнере.

Убедитесь, что источник включает в себя

package org.petermac.util 

и что Clarity.class в org/petermac/util/ в банке.

+0

Да, Clarity.class находится в org/.... но источник LoadClarityController.class (из войны) не ссылается на util.Clarity (ни один из импорта не ... это? – GarethReid

+0

Если контроллер находится в другом пакете из класса, который он использует, вам нужен импорт, как в любом классе Java или Groovy. Но он жалуется, что не может найти 'org.petermac.util.Clarity' , поэтому вы должны были импортировать это, правильно? Что такое класс контроллера? –

+0

Я добавил голые коды кода в нижней части сообщения под обновлением. Сообщите мне, если это поможет. – GarethReid

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