If a package B contains classes that are dependant on package A (directly, or indirectly: B -> C -> A) then package A must not have classes that are dependant on package B (directly or indirectly)
This makes the code easier to read/understand. It also makes it more testable, as you have definite levels and can test the bottom level of packages then the next level etc etc
This can mean that if cycles exist they may have to be broken by creating an interface in package A or in a package before package A that is then implemented by package B.
A class in a top level package may depend on sub packages. (ok: A.MyClass1 imports A.B.MyClass2) A class in a sub package may not depend on a class in the parent package (not ok: A.B.MyClass2 imports A.MyClass1)
This rule is arbitrary, but it helps readability if you choose either parent packages rely on sub packages only or sub packages rely on parent packages only
Package A.X.Y may depend on package A.D and/or A.D.E
Keep around 10 or less classes per package.
The number of classes in a package depends on the complexity/simplicity/regularity of the package.
A package that contains sub packages should contain a small number classes.
<com.company>.<application-suite>.<application>.<section>.<component>.<subcompnent>...
Where
Components and subcomponents make up most of the package structure. Organisation should be around components in the system. For example a simple event system component might define an Event interface for event listeners to implement and some class to hold a set of events. Classes that implement the event interface should probably be with the component/subcomponent interested in recieving the event - not in the event package
The facade is separated at the top level of the package hierachy to allow the compilation process to control the packages and classes the facade uses, especially to avoid dependancies on other packages in the same project