On 12/04/2015 06:07 PM, Ali Ebrahimi wrote:
Hi, On Fri, Dec 4, 2015 at 8:23 PM, Stephen Colebourne <[email protected]> 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
