2012-04-26 4 views
4

Я пишу файл утилиты утилиты для совместного использования в нескольких проектах. В основном он обрабатывает соединение с базой данных и выполняет вычисления, а затем возвращает значения. Другие проекты будут импортировать мой файл jar и вызвать мою функцию.пишут утилиту jar file

Прямо сейчас я имею проблемы, когда я пытался вызвать одну из функций в банке file.In затмить нет ошибки компиляции, но, как я проверить его на сервере приложений я получил эту ошибку

22:16:35,177 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage RequestComplete 
22:16:35,178 WARN DefaultExceptionHandler:94 - Unhandled exception caught by the Stripes default exception handler. 
net.sourceforge.stripes.exception.StripesServletException: ActionBean execution threw an exception. 
    at net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:183) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NoClassDefFoundError: com/my/rnd/test/utils/SimplePing 
    at com.app.action.JbpmProcessInstanceActionBean.testTrigger(JbpmProcessInstanceActionBean.java:83) 
    at com.app.action.JbpmProcessInstanceActionBean.loadProcInstanceList(JbpmProcessInstanceActionBean.java:72) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 

Я экспортировать файл банка, используя затмение и вот функция образца SimplePing

public class SimplePing { 

    /** 
     * @param args 
     */ 
    public void testSimplePing() { 
     // TODO Auto-generated method stub 
     System.out.println("This is a simple ping ."); 
    } 

} 

кажется, что сервер приложения не может найти свой класс даже он существует в банке file.Any помощи приветствуется

+0

У вас есть банка под WEB-INF/lib, когда вы развертываете ее на сервере приложений? –

+1

'Caused by: java.lang.NoClassDefFoundError: com/my/rnd/test/utils/SimplePing' Скорее всего, отсутствует зависимость. – Bobby

+0

Как вы «импортируете» банку и какой сервер приложений используете? –

ответ

1

Если вы внимательно посмотрите на стек ошибок вы можете увидеть следующее:

Caused by: java.lang.NoClassDefFoundError: com/my/rnd/test/utils/SimplePing

Который является распространенной ошибкой при наличии одного из следующих условий:

  1. У вас есть jar(s) отсутствует в вашем lib
  2. у вас есть некоторые jar(s) отсутствует в classpath
  3. У вас есть некоторая зависимость отсутствует в MANIFEST файла:

    ...
    Main-Class: fully.qualified.MainClass
    Class-Path: lib/dependency1-X.Y.jar lib/dependency2-W.Z.jar
    ...

  4. У вас есть JDK проблем

В конце концов всех подключения к одной и той же проблеме: недостающей баночка (JDK или третьей сторона связанная с jar)
Вы также можете использовать плагин maven для eclipse, который будет управлять вашими зависимостями вашего текущего проекта и вашим jar возможностями, которые необходимы вашему проекту, конечно, если вы хотите и Maven.

+0

Могу ли я узнать, как я могу добавить зависимости в файле MANIFEST? Да, программа требует чтения из другого файла jar. Я включил файл jar в последний файл jar, но он все равно не смог его найти – metku

+0

Посмотрите на обновленный ответ – GingerHead

+0

Нужно ли указывать основной класс? это то, что теперь выглядит мой Manifest.mf. Manifest-Version: 1.0 Class-Path: lib/mysql-connector-java-5.1.19-bin.jar lib/log4j-1.2.16.jar, но он все еще возвращает ошибку – metku

0

Это хороший вопрос

Есть 2 способа, я могу думать о

  1. Попробуйте использовать Maven (m2e plugin) - это будет управлять зависимостями для вас Если вы сделаете это, не забудьте добавить зависимостями Maven к проекту Ассамблеи развертывания (правой кнопкой мыши - свойства)

  2. Применение Сборка Развертывание и добавьте другой проект

0

Открыть банку с использованием программы, как 7-Zip или WinZip и убедиться, что вы видите эту структуру каталогов и файлов в нем: COM/мой/RND/тест/Utils/SimplePing.класс