tags:

views:

41

answers:

2

Hello... So, I have the following setup in Eclipse (Java):

  1. I have a project (lets call this "project 1") which provides an interface (which is package private)
  2. I have another project ("project 2") which contains a package from project 1... Classes in this package extend the package private interfaces in "project 1" and provide a nice public interface.
  3. Now, I have "project 3" which references "project 2". Project 3 then uses the public object provided in project 2.

Upon calling the constructor from project 2 in project 3, I get the following:

"the type {---} cannot be resolved. it is indirectly referenced from required .class files"

If I add a reference to project 1 from project 3, all is well. Is there a way to NOT have to reference project 3 in this way though? It really doesn't make sense to reference it.

I'm using Eclipse (Helios) with the most recent JDK etc...

+2  A: 

This is a "transitive dependency". You need on your classpath all classes that are required by any class you use. So you need to have the classes from project 1 in the classpath somehow - you can package them as a .jar, for example. Or you can go to Build Path > Order and Export of Project 2, and mark Project 1 as exported.

An important thing here is that the project dependencies are a mere development "goodie" - when you execute the program standalone (or deploy it to container), the Eclipse project dependencies are gone. So you must ensure your dependencies are met.

Bozho
+1  A: 

Not sure if this is what you're looking for. Try this -

  1. In Eclipse, right-click Project2, select Build Path -> Configure Build Path
  2. Go to Order and Export tab. it should have Project1 listed. Check the box in front of it.
  3. Rebuild your projects.

Basically, you're exporting the Project1 dependency from project2. So any project that adds project2 as a dependency will see Project1 too without explicitly having to add it to the classpath. Eclipse will transparently do that.

Samit G.