当前位置: 首页 > 知识库问答 >
问题:

在Eclipse中,modulepath和classpath之间有什么区别?

周锐
2023-03-14

在Eclipse中,modulepath和classpath之间有什么区别,我应该使用哪一个在lib文件夹中添加一个jar?为什么JRE系统库会出现在ModulePath中?

共有1个答案

贺聪
2023-03-14

模块系统对代码的影响主要有以下几点:

  • 一个包只能从一个模块访问(嵌套的包被视为单独的,因此即使包java.util在模块java.base中,包java.util.logging也可以在模块java.logging)
  • 只能访问其他模块导出包中代码的公共字段和方法。即使使用反射也是如此(即java.lang.Reflect.AccessibleObject.setAccessible(boolean)仅适用于同一模块中的代码)

类路径上的所有代码都生活在“未命名”模块中。modulepath上的所有代码都存在于它们自己的“命名”模块中。

你必须区分两种情况:

>

  • 如果不向项目中添加module-info.java,则项目将是未命名模块的一部分,并且可以看到未命名模块中的所有其他代码,以及java.base中的代码和java.se根模块中的模块中的代码。基本上这意味着W.R.T.代码,所有的工作仍然像在Java8中一样,所以您只需要将您的依赖项放在类路径上。

    如果您的项目中有一个module-info.java,那么您的项目将在它自己的命名模块中,并且只能看到java.base中的代码和其他使用module-info.java中的“requires”-子句引用的命名模块。由于命名模块只能通过模块路径找到,所以您应该将依赖关系放在模块路径上。这甚至适用于Java9之前创建的JAR,它将获得一个从.jar文件名派生的模块名(在这种情况下,它们被称为“自动”模块)。

    JRE始终位于module-path上,因此即使从类路径上的代码也无法访问其内部代码。

    有一种特殊情况:如果您的项目中有一个module-info.java,并且在项目中有测试代码,那么您通常不希望在module-info.java中提到像junit这样的测试依赖项。对此有两种解决方案:

    >

  • 创建专用测试模块。这一直是基于OSGi的项目的惯例。缺点是在测试中只能使用公共api

  •  类似资料:
    • 问题内容: 在Eclipse中,modulepath和classpath有什么区别,我应该使用哪一个在lib文件夹中添加jar?为什么JRE系统库出现在modulepath中? 问题答案: 模块系统主要对代码有以下影响: 只能从一个模块访问一个软件包(嵌套的软件包被视为单独的软件包,因此即使该软件包在模块中,该软件包也可以在模块中) 您只能访问其他模块导出包中的公共字段和代码方法。即使是反射也是如

    • 问题内容: 我正在处理一些Spring XML配置文件,有时使用和有时。两者之间有区别吗?还是领先的可选/隐含/冗余? 问题答案: 我认为这两者之间没有任何区别。您将看到的最大区别是相对路径和类路径位置上的* 这是Spring Resources的节选,请参见4.7.2.2节 Classpath *: “ classpath :”前缀也可以与其余位置路径中的PathMatcher模式结合使用,例如

    • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

    • 问题内容: 我是AngularJS的新手。谁能解释一下这些AngularJS运算符之间的区别:用适当的示例隔离范围时。 问题答案: 允许将在指令属性上定义的值传递到指令的隔离范围。该值可以是简单的字符串值(),也可以是带有嵌入式表达式()的AngularJS插值字符串。将其视为从父作用域到子指令的“单向”通信。 允许指令的隔离范围将值传递到父范围中,以便在属性中定义的表达式中进行求值。请注意,指令

    • 我看了Facebook的留档(React.Component),它提到了如何在客户端/服务器上调用,而仅在客户端上调用。对服务器做什么?

    • 我对Keras中的和感到困惑。他们之间有什么区别?我认为第一个是一个层,第二个是一个后端函数,但这意味着什么?在Conv2D中,我们发送过滤器的数量、过滤器的大小和跨步(但是在Conv2D中,我们使用内核是什么(64,3,3),我们把过滤器的数量和大小放在一起?我应该在哪里输入内核数?你能帮我解决这个问题吗?非常感谢。 pytorch中的代码 Keras中已更改的代码 但当我执行代码时,它会产生以