On 12/04/2015 06:07 PM, Ali Ebrahimi wrote:
Hi,
On Fri, Dec 4, 2015 at 8:23 PM, Stephen Colebourne <scolebou...@joda.org>
wrote:
I've been pondering whether -addReads is sufficient for this use case.
While type 1 of my classification below (annotations) would work using
compile-time -addReads, I don't think types 2 and 3 would. (Type 2 is
reflection based, type 3 is usage based)
Here is the setup:
module user {
requires org.joda.beans
requires com.google.guava
}
module org.joda.beans {
// optionally requires com.google.guava
}
Proposed solution:
compile module with -addReads=com.google.guavea
The proposed solution would allow the Joda-Beans module to be
successfully compiled. But it seems that it would not be able to see
the Guava code at runtime (as the module does not have the
dependency). Note that there is source code in Joda-Beans that
actively calls Guava clases in addition to checking they exist by
reflection.
I don't think this is optional dependency if you have static references to
Guava's types in source code.
Everything can be optional (at runtime). JVM is very lazy at resolving
types. If code that refers to a particular type is never executed, then
that type is never looked-up. So everything depends on how you structure
your code. If you are sure that parts of code that need guava will only
be executed when the user of your code explicitly requests a particular
minor feature, you can make guava an optional dependency which is needed
only if user needs this particular feature.
But you have to be careful then that you don't use guava in other parts
of your code that is executed for providing the "main" functionality of
your module. Neither javac nor jlink will warn you if you make a
mistake. You're on your own, because you asked for it!
Regards, Peter