23

I have an eclipse project structure that looks something like this:

eclipse
    project a
    project b

All of these projects are Maven projects. Project B is an Eclipse WTP project and contains Project A as a dependency. I'm using the m2eclipse plugin.

When I deploy Project B to Tomcat (all from within Eclipse) it always throws errors saying that it can't find classes from Project A. The only way I can resolve this is to close Project A in Eclipse and do a mvn install command, so at this point Project A is treated like any other dependency.

I would like to not have to keep reopening and then closing Project A every time I make changes to it (which is pretty frequently at this stage).

I have tried adding Project A to Project B's Build Path, however that doesn't seem to do the trick. Again, it only works if I close the project in eclipse so it's treated like a normal maven dependency.

FYI I'm using the Helios version of Eclipse. Project B is a Spring project, so naturally Tomcat falls over when it imports all the beans etc.

Does anyone have any suggestions? Thanks a lot.

mtk
  • 13,221
  • 16
  • 72
  • 112
Ben J
  • 5,811
  • 2
  • 28
  • 32

6 Answers6

76

What you need to do is this:

  1. In Eclipse go to Window > Show View > Servers > and open tab called Servers
  2. In Servers, double click the server you want
  3. This action should open a window entitled Overview, with your selected Server in the TAB
  4. In this window select: Open launch configuration, and click the link.
  5. In the Edit Configuration window, select the tab called Classpath
  6. In the ClassPath textbox, select the line: User Entries
  7. Now push the button on the right entitled: Add Projects
  8. In the resulting Project Selection window select the external project you want the server to find via click.
  9. Close these windows by clicking Apply then OK as appropriate as you work up the stack
  10. Restart your server in the Overview window

You should be ready to go. It's actually only a 2 minute exercise. Good luck

Sathyajith Bhat
  • 21,321
  • 22
  • 95
  • 134
Jalkin
  • 1,132
  • 9
  • 6
35

If you go to the project properties, pick the item "Deployment Assembly", click "Add..." and choose "Project", you can add the dependent project and the issue should be solved.

Thomas
  • 351
  • 3
  • 2
  • 2
    Jalkin's solution with the run configuration worked too, but this seems a lot cleaner, thank you. – amoebe Nov 01 '12 at 14:13
  • 2
    Future reader, don't go nuts if this fix doesn't work for you. It doesn't work for me, either. :-( – Sharky May 13 '14 at 23:22
  • 3+ years later and this is still an issue in Eclipse Luna. Odd indeed as I've added modules to my project in the past with no issues, but for some this last module add didn't work. I had to use Add => Folder, but it worked the same. Thanks! – Jeff Sep 20 '15 at 16:17
  • I would say this is the solution I have been looking for. Web modules and EJB modules can be deployed independently (without the EAR). – Khanh Hua Jun 16 '17 at 18:16
5

Right click on the web project which is added to container server and select Maven and then select Disable Workspace Resolution. Then your dependency project will start appearing as a jar like any other dependencies.

Right Click on the WebProject --> Maven --> Disable Workspace Resolution.

Yuvaraj Loganathan
  • 781
  • 11
  • 15
  • 3
    This also works (just tested it). It has the downside of requiring you to run `mvn install` on "project a" each time something changes there, though, since "project b" now depends on the artifact in your repo. – Sharky May 14 '14 at 00:11
5

The reason that tomcat cannot find your classes is that the project dependency in eclipse is not seen by tomcat. To resolve the issue you can add the bin folder of project a to the tomcat classpath of the app running from project b.

rsp
  • 23,135
  • 6
  • 55
  • 69
2

Have you installed the m2eclipse extension that know about WTP? Without it m2e will not work correctly for WTP projects. See this:

https://docs.sonatype.org/display/M2ECLIPSE/WTP+mini+howto

Konstantin Komissarchik
  • 28,879
  • 6
  • 61
  • 61
0

Simple way :

Run -> Run Configurations... -> Classpath

Mehdi LAMRANI
  • 11,289
  • 14
  • 88
  • 130