On 15/10/2015 12:52, Philippe Marschall wrote:
:

Most of my needs for optional dependencies come from annotations. Three examples come to mind: 1. Lifecycle annotations like (javax.annotation): If code runs within some container often methods with such annotations are detected and automatically invoked at the right time. But if the same code runs outside a container the annotations are not needed and the methods can simply be invoked explicitly. 2. Additional type check annotations (eg. JSR-305): These annotations are not needed at runtime but still need to be in the class files for tools to perform static analysis. Generally all annotations with a retention policy of class are candidates for optional dependencies. 3. Mapping annotations: Sometimes classes have annotations for specific mapping technologies. But if they are used without these mapping technologies then the annotations are not needed at runtime.
Indeed, annotations are a case they might not be needed at run-time or are ignored because the annotation type is not present. In the current design/prototype there is no support for optional dependences. That is, if you have a dependency on a module that is exporting the packages with these annotations then that module needs to be observable at run-time.

It is of course possible to conjure up a command line to compile without a declared dependency but I'm not suggesting anyone does that.

Is it worth the complexity? I think not but this is really something for the JSR.


:

Where in the JAR does this information end up?
It adds an attribute to the module-info.class (so not strictly tied to the JAR format, it will work with other formats, even modules exploded on the file system if really needed).

If you use jar -p or --print-module-descriptor to print the module descriptor when you will see it. If the JAR file is extract then you'll see it with javap -v too.

-Alan.

Reply via email to