Java:在jar文件中只显示一个包

glm*_*ndr 7 java jar

我想要一个jar文件,其中只能访问API包.所有其他包(包含实现)都不会被另一个jar(也不是任何其他类)访问.

可能吗 ?

如果有,怎么样?

Mar*_*ers 4

目前 Java 8(2012 年?)的计划是JSR 294。该 JSR 将更好的模块化语言结构引入到 Java 中。

如今,一个实现可以分为多个包。这种实现的子部分彼此之间的耦合需要比与周围软件环境的耦合更紧密。如今,设计者被迫将实现的其他子部分所需的程序元素声明为公共的,从而使它们可以在全球范围内访问,这显然不是最理想的。

或者,可以将整个实现放置在单个包中。这解决了上述问题,但很笨拙,并且将所有子部分的所有内部结构相互暴露。

设想的语言变化将解决这些问题。特别是,我们期望在语言级别引入模块(超级包)的新概念,其中现有的公共访问控制仅适用于语言级别模块内,并且从模块外部对 API 的访问将仅限于模块显式导出的 API。

现在我相信专家组还在讨论这个概念的细节。但我相信你可以做的一件事是(来源:Java 7.0 中的超级包):

superpackage com.myorg.myApp.model
{
    member package com.myorg.myApp.model.swing;

    member package com.myorg.myApp.model.html;

    export com.myorg.myApp.model.swing.SEmployee;
    export com.myorg.myApp.model.swing.SDepartment;

    export package com.myorg.myApp.model.html;
}
Run Code Online (Sandbox Code Playgroud)

换句话说,对于给定的“超级包”,您可以定义导出和不导出的内容,独立于public.