You can get all packages in app and than filter required package to get Annotations
:
String userPackName = User.class.getPackage().getName(); // src.service.model
int lastIndex = userPackName.lastIndexOf(".");
String parentPackName = userPackName.substring(0, lastIndex); // src.service
Annotation[] annotations = Arrays.stream(Package.getPackages())
.filter(pack -> pack.getName().equals(parentPackName))
.findFirst()
.map(Package::getAnnotations)
.orElseGet(() -> new Annotation[0]);
, but Package.getPackages()
will only return the packages defined in the current class loader
(any classes from root package (src/service) were loaded by current class loader
).
java.lang.Package
snippet:
@CallerSensitive
public static Package[] getPackages() {
ClassLoader cl = ClassLoader.getClassLoader(Reflection.getCallerClass());
return cl != null ? cl.getPackages() : (Package[])BootLoader.packages().toArray((x$0) -> {
return new Package[x$0];
});
}
/** @deprecated */
@CallerSensitive
@Deprecated(
since = "9"
)
public static Package getPackage(String name) {
ClassLoader l = ClassLoader.getClassLoader(Reflection.getCallerClass());
return l != null ? l.getPackage(name) : BootLoader.getDefinedPackage(name);
}