0

To begin, I have found instructions which will work for a couple simple projects.

How to link project in eclipse

If I create two projects the same way as described below (Project 1), I can interact between the two projects without any difficulty.

However, using steps below and the instructions from How to link project in eclipse, the projects will not interact.

Project 1 - Duck

I created a new project (File -> New -> Java Project -> Named: Duck). Inside the project, I created a new package (duck_duck). Inside the package, I created a new class (Duck)

public class Duck {
  public static void quack() {
    System.out.println("QUACK!!!!!");
  }
}

Project 2 - Barn

I created a new Spring MVC Project (File -> New -> Spring Project -> Spring MVC Project -> Named: barn). Top-level package: com.gov.barn. Inside HomeController.home(), I placed the following code

System.out.println("Barn ... ");`
try {
  Duck.quack();
} catch (Exception e) {
}
System.out.println(" ... barn");`

Error Message

Dec 26, 2013 3:33:29 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [appServlet] in context with path [/barn] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: duck_duck/Duck] with root cause java.lang.ClassNotFoundException: duck_duck.Duck at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at com.gov.barn.HomeController.home(HomeController.java:36) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)

Any suggestions on where to look or how to proceed?

Community
  • 1
  • 1
chora
  • 25
  • 8
  • Check *Deployment assembly* in your project settings. Linked project needs to be deployed within the web application. Just linking it as a class path entry is not enough. http://stackoverflow.com/questions/11081411/eclipse-web-app-deployment-with-tomcat-providing-multiple-projects-dependencie – Pavel Horal Dec 26 '13 at 23:23
  • So, the only way I can do this is by packaging duck as a jar, and including it in barn? – chora Dec 30 '13 at 14:34
  • For the production deployment you need to include it as a JAR. For development in Eclipse you can link the projects together and specify it in the *Deployment assembly* settings, which I've mentioned in previous comment (check screenshots in the linked SO question). – Pavel Horal Dec 30 '13 at 14:50

0 Answers0