I can compile my program just fine if I specify sublibraries of com.itextpdf.*, but for some reason, my compile fails if I simply do import com.itextpdf.*. But, like I said, if I specify the sublibraries I’m using, such as
import com.itextpdf.text.Font.*;
import com.itextpdf.text.pdf.*;
Everything compiles just fine. In the case where it fails, the error I’m getting is “package com.itextpdf does not exist”, but I know it does. I include it properly in the build path, and Eclipse doesn’t give any compile errors in any case. The error only comes up when I try to build with Ant.
At this point, I don’t mind specifying the sub libraries I’m going to use to make sure I get a build. But I am curious, why wouldn’t Ant allow this?
You, and Eclipse, think of java namespaces as a hierarchy. However, in the Java specification, they are not. There is no relationship between “com.itextpdf.text” and “com.itextpdf.text.Font”. They are different strings, end of story.
As a matter of style, you may want to set up Eclipse to automatically organize your imports and explicitly specify every class you use in the import section of your class. This avoids ambiguity when “com.itextpdf.text.Font.String” and “com.itextpdf.text.pdf.String” both exist, but you only want to reference one of them. This style would be incredibly tedious and inconvenient if you were programming in emacs or vi, but with Eclipse it is automatic and invisible, unless you scroll to the top of your file.