views:

596

answers:

4

This question is about eclipse development, I am trying to create a web application in Eclipse, the problem is that I don't get the the dependencies jars to the deployed archive.

I've created a new dynamic web project and linked it to another java project. The java project references a few 3rd party jars (e.g. Spring jars) but for some reasons when publishing the web project I get only the java project jar in the lib dir of the war, without the java project dependencies (e.g.Spring).

In other words, I have project A (web project) that depends on project B (Java Project), project B depends on Spring jars. When I publish the web project as a war to jboss, only project B is packaged into the jar (no spring jars)

I know I can do it with ant, I even have such build.xml to build the whole app, but I thought eclipse can also perform the packaging task for me.

I added the Java project to the Java EE module dependencies in the web project.

Should I use the export option in the java project build path properties? should I add the dependencies of the java project to the web project as well?

What am I doing wrong?

Edit: I am using Eclipse 3.5.1

A: 

You should be packaging your web app into a WAR file prior to deploying it. There must be a way to tell Eclipse which JAR files you'd like it to put in the WEB-INF/lib directory. If not, write an Ant build.xml that does it for you.

You should not have to modify any classpath variables in either your environment or the app server. The right way to do it is to create a proper WAR file.

UPDATE: I re-read your question:

but for some reasons when publishing the web project I get only the java project jar in the lib dir of JBoss, without its dependencies jar (e.g.Spring).

What does this mean? You should not be putting anything in the JBOSS /lib dir. The whole point of a WAR file is that it's a self-containing artifact that carries along all its dependencies. If you're trying to write stuff to the JBOSS /lib directory, you're doing it wrong.

The WAR file needs to go into the domain that you set up. No need to alter the app server.

duffymo
I have an ant script that does it well, the problem is development time, I want to package and publish it from eclipse (and then of course debug the application)
LiorH
Eclipse should be able to do it without Ant. If it can't, get a real IDE and download IntelliJ. It manages all this stuff beautifully.
duffymo
you are right in your update, I meant the lib dir of the war file (under WEB-INF) and not the JBoss lib dir of course. I fixed the question description, thanks.
LiorH
@LiorH - very good, thanks for the explanation. I have to confess I'm mystified. You say that your Ant script "does it well", yet you still have a problem. If I don't understand exactly what's going on, either you'll have to hope for a smarter person to tease out the answer or add more detail to your question. I honestly don't know what's going on.
duffymo
revised to your suggestion :-)
LiorH
A: 

If I understand you correctly the problem is that if you use project A which in turn depends on project B you do not get the artifacts from project B but only A.

The issue is that your project must list ALL the things it needs in Properties -> Java EE module dependencies, which is a separate mechanism from the usual project exports. You will probably need to do some experimentation.

Thorbjørn Ravn Andersen
+1  A: 

I added the Java project to the Java EE module dependencies in the web project.

If the purpose is to take the dependencies (read: JAR files/projects/etc) of the other project into the runtime classpath of the current project, then only that way doesn't work. You need to configure the other project to export its dependencies. It's done by Order and Export tab in build path properties. Hope this helps.

BalusC
A: 

Also take note of this bug reported on Eclipse WTP, which sometimes prevent your dependencies from being deployed to WEB-INF/lib, even if you configured everything correctly. Sigh.

Bug 312897 - Deployment feature doesn't deploy classpath dependencies.

As I understand it, to use a JAR at compile time in Eclipse and make sure it is also available at run-time in the appserver, you:

  • Add the JAR to your build path
  • Mark the JAR as an exported EE module dependency

If you need JAR's which are needed by another project that you are using, I would personally list them as explicit dependencies in the build path and also add those to the exported module dependencies.

But don't take my answer at face value as I stumbled upon this post while searching for the reason I'm getting NoClassDefFound errors in my Eclipse project... ;)

Stijn de Witt