我有一个带有单个源文件的项目,此处完整列出:
package com.acme.el;
public class ExpressionUtils {
public static Object evaluate() {
new org.apache.commons.el.ExpressionEvaluatorImpl();
return null;
}
}
功能与问题无关。当我使用 Gradle 将项目构建为 OSGi 包时,清单包含以下指令:
Export-Package: com.acme.el;uses:="org.apache.commons.el";version="1.0"
令我困惑的是那个uses
指令。正如我所理解的指令,它旨在定义对其他包的依赖关系,这些包需要传播到导入此导出包的其他包 -org.apache.commons.el
例如,如果我的类定义或方法签名引用包中的类。但是在这个类中,对的依赖org.apache.commons.el
完全包含在方法体中。它没有在 API 中公开,并且没有其他包导入com.acme.el
可以获取ExpressionEvaluatorImpl
在该方法中创建的实例。所以依赖项不应该被传播,对吧?
我是否误解了该uses
指令的含义,还是没有必要在这里使用它?
我制作了一个用于复制的最小示例 GitHub 存储库,您可以将其克隆并作为 Eclipse 中的 Gradle 项目导入。