当前位置: 首页 > 面试题库 >

Java:仅在jar文件中公开一个软件包

卜存
2023-03-14
问题内容

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

可能吗 ?

如果是,怎么办?


问题答案:

当前计划用于Java 8(2012?)的是JSR
294
。该JSR将更好的模块化语言构造引入Java。

如今,实现可以划分为多个程序包。这种实现的各个子部分之间必须比与周围的软件环境更紧密地耦合在一起。如今,设计人员被迫将实现的其他子部分所需的程序元素声明为公共,从而使它们在全球范围内均可访问,这显然是次优的。

或者,可以将整个实现放在单个程序包中。这解决了上面的问题,但是麻烦,并且使所有子部件的所有内部部件彼此暴露。

预期的语言更改将解决这些问题。特别是,我们希望在语言级别引入一个新的模块( 超级包
)概念,其中现有的公共访问控制将仅在语言级别的模块内应用,并且 从模块外部访问API的方式将仅限于该模块显式导出的API。

现在,我相信专家组仍在讨论此概念的细节。但是我相信您可能可以做的一件事就是这样(来源:Java 7.0中的Super
Packages
):

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;
}

换句话说,对于给定的“超级包”,您可以独立于可见性关键字(如)定义导出的内容和不导出的内容public



 类似资料:
  • 问题内容: 当我尝试从虚拟环境中卸载时,我看到它也尝试卸载更多软件包: 我想卸载 只 和没有别的降级。 我知道这些软件包都 依赖 于熊猫甚至 特定版本 的panda,但这完全可能吗? 部分动机 我的理解是,使用来从GitHub安装软件包并不容易。至少它不像使用单线纸那样容易。 由于我想在中使用该版本,因此我的计划是卸载该版本,并使用从正式仓库GitHub上的master安装。 我怎样才能做到这一点

  • 我有两个jar(比如A.jar和B.jar),其中包含一些文件。我想创建第三个jar(比如c.jar),它只包含B.jar中的文件,而不包含A.jar中的文件。是否有用于执行此操作的java API。 谢谢

  • 问题内容: 好的,这可能是java中的小问题。我们不能在一个文件中定义两个公共类。但是,在《 SCJP学习指南》一书的示例中,提到了以下示例: 当我将其复制粘贴到netbeans中时,立即引发了编译错误,该公共类A应该在单独的文件中提及。SCJP stdydy指南中的示例真的错误吗?同样在一些模拟测试中,我发现许多问题都具有这种模式,但是在所有选项中都没有提到编译器错误。在这里担心 问题答案: 是

  • 我知道同样的问题已经被问了很多次,但是通过已经发布的所有答案,我找不到解决方案。 首先,以下是我在项目中遇到问题后用来测试该问题的代码: 因此,根据标题,这些对getResourceAsStream()的调用都返回null,但只有在执行jar文件时,在IDE(Netbean 8.0.2)内启动时,它们都返回正确的流(单独测试不使用这段代码),我可以使用它。 所以我现在真的很困惑,我在使用netbe

  • 问题内容: 我是Java的新手,我正在尝试在Jar文件中获取一个文本文件。 在执行jar的那一刻,我必须将文本文件与jar fil放在同一文件夹中。如果文本文件不存在,我会得到一个,我想避免。 我想做的是在罐子里获取txt文件,这样我就不会遇到这个问题。我尝试了一些指南,但它们似乎没有用。我当前的读取功能如下: 问题答案: 不要尝试在Jar文件中将文件作为“文件”查找。改用资源。 获取对类或类加载

  • 试图编译多文件包。需要通过进行编译,同时通过一个文件同时编译所有其他文件(大约4个其他.Java文件)?我已经尝试使用了extend和等语句。 我使用了不同的编译方法和参数,但尝试只插入和 摘要:试图一次编译多个Java文件,通过Java编译单个文件。 主文件的当前代码: