Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the following build error: "the type {---} cannot be resolved. it is indirectly referenced from required .class files"

Tags:

java

eclipse

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...

like image 581
Polaris878 Avatar asked Aug 12 '10 03:08

Polaris878


2 Answers

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.

like image 107
Bozho Avatar answered Nov 03 '22 17:11

Bozho


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.

like image 42
samitgaur Avatar answered Nov 03 '22 15:11

samitgaur