Tag: jigsaw

为什么Java 9不会简单地将类路径上的所有JAR转换为自动模块?

为了理解我们的类别: 平台显式模块 应用显式模块 打开模块 自动模块 未命名的模块 类路径中的所有类和jar都将是未命名模块的一部分。 但为什么我们需要呢? 自动模块的优势在哪里? 我可以“要求”那些该死的传统jar子,使它们成为一个自动模块。 我没有把它包括在内吗?

Java 8模块与OSGi有何不同?

Project Jigsaw的Java 8为SDK带来了一个模块系统。 我认为它是一件好事,因为它是包的一部分(内置)。 OSGi还提供了一个模块系统,但需要一个容器。 但除此之外,它们之间的主要区别是什么。 如果我使用OSGi,我是否可以使用标准的JDK 8版本运行它? 当默认SDK包含此类function时,OSGi是否相关? 我的理解是OSGi和Jigsaw都可以用来编写普通的模块化Java应用程序而不仅仅是基于ser的应用程序(servlet等),对吗? 给出了OSGi,Java Modularity和Jigsaw这个问题的答案,Jigs的Jigsaw模块系统可能是必需的。 通过JRE,我假​​设OP意味着Java标准库,如IO,CORBA,RMI,它们是用Java编写的,还是作为目标的类库实现? 从阅读Jigsaw项目页面,我认为它是前者。 如果是后者,它如何帮助编写Java代码的其他Java开发人员? 类库是用C / C ++编写的。 有人可以澄清一下吗? 这不是OSGi vs Jigsaw。 我想真正理解使用哪一个。 如果我要编写一个新的应用程序(无论是桌面还是服务器),我希望基于标准实现可能不会过时的技术并放弃使用。 我不是说OSGi已经过时了,我喜欢OSGi。 我正在看大局,OSGi本身未来的发展方向。

当每个人都对OSGi进行标准化时,为什么Sun会发明另一个模块系统?

Sun正在以Jigsaw的forms将JDK模块化,并且暗示它应该是其他Java开发人员的首选模块格式。 使用它的唯一值得注意的玩家是NetBeans(和衍生应用程序)。 另一方面,业界已经围绕OSGi进行了标准化,所有主要的应用程序供应商都将其运行时基于模块平台,甚至是Sun自己的Glassfish。 甚至还有一个NetBeans端口使用OSGi作为模块系统而不是NetBeans自己的模块。 甚至Maven也在努力成为OSGi运行时。 它只是NIH,许可或其他原因吗?

使用Java 9将自定义JMOD添加到模块路径

我用这样的jmod工具创建了一个简单的JMOD文件 $JAVA_HOME/bin/jmod create –class-path classes test/samples.jmod 接下来,我尝试通过运行以下命令在该模块中执行一个类: java -mp test -m de.mypackage/de.mypackage.Test 这导致以下exception: Error occurred during initialization of VM java.lang.module.ResolutionException: JMOD files not supported: test/samples.jmod at java.lang.module.Resolver.findWithBeforeFinder(java.base@9-ea/Resolver.java:729) at java.lang.module.Resolver.resolveRequires(java.base@9-ea/Resolver.java:86) at java.lang.module.Configuration.resolveRequiresAndUses(java.base@9-ea/Configuration.java:370) at java.lang.module.ModuleDescriptor$1.resolveRequiresAndUses(java.base@9-ea/ModuleDescriptor.java:1986) at jdk.internal.module.ModuleBootstrap.boot(java.base@9-ea/ModuleBootstrap.java:263) at java.lang.System.initPhase2(java.base@9-ea/System.java:1928) 如果我只是将我的classes目录(我用来创建JMOD文件)设置为modulepath,那么一切都按预期工作。 通常不可能在JMOD上有JMOD文件吗? 如果是这种情况,有什么理由吗?

Java Jigsaw JUnit测试 – JUnit不在模块中

我在Eclipse Oxygen.3a使用Java 9.0.4 JUnit 5位于模块路径上,并且在module-info.java中是必需的。 当我尝试运行我的代码时,我总是收到以下消息: 初始化引导层时发生错误java.lang.module.FindException:无法为C:\ Users \ Tim HP.p2 \ pool \ plugins \ org.junit.jupiter.migrationsupport_5.0.0.v20170910-2246.jar派生模块描述符引起:java.lang.module.InvalidModuleDescriptorException:Provider类org.junit.jupiter.engine.JupiterTestEngine不在模块中 我无法弄清楚如何解决这个问题。

如何在Jdk9 / java-9中解决module-info.java编译错误

我试图使用jdk-9在代码下运行,但在使用命令编译时遇到问题 命令 javac -d mods .\module-info.java com\nirav\modi\Test.java 错误 .\module-info.java:1: error: class, interface, or enum expected module module1 { } ^ 1 error module-info.java module module1 { } Test.java package com.nirav.modi; class Test { public static void main(String args[]){ System.out.println(“Hello Modular…”); } } 包结构如下 module1\module-info.java module1\com\nirav\modi\Test.java JDK版本 java version “9-ea” Java(TM) SE Runtime Environment (build 9-ea+153) […]

为什么不允许导出整个模块?

在Java 9的模块声明中有2个构造: exports com.foo; 和 opens com.foo; 其中, exports授予编译时访问权限,而opens允许运行时访问,作为reflection和资源。 opens对exports有一个宽容,你可以将整个模块定义为打开,结果与显式打开每个包相同: open module com.mod { 但是没有类似的结构 exported module com.mod { 我的问题 :为什么会这样; 做出了哪些决定允许一次打开整个模块而不是出口?

单个Maven模块中的多个Java 9模块?

我有一个有趣的担忧。 我习惯了多模块Maven项目。 现在我正在调查如何做同样的事情,但也使用Jigsaw。 是的,每个Maven模块只能有一个Jigsaw模块吗? 在IDE中,我无法在同一个Maven模块中创建第二个。 那么,到目前为止,有没有任何约定或解决方法如何组合模块的两面?

平台模块之间是否允许循环?

这是java.rmi模块的模块声明: module java.rmi { requires java.base; requires java.logging; exports java.rmi.activation; exports com.sun.rmi.rmid to java.base; // <– cycle … } 所以, java.rmi和java.base之间存在循环依赖,对吗? 平台模块之间是否允许循环?

Javadoc如何处理Java 9中模块的可见性?

Javadoc工具基于可访问性修饰符生成文档。 默认情况下,它记录所有public和protected类,字段和方法。 可以使用以下选项更改此设置: -上市 仅显示公共类和成员。 -protected 仅显示受保护的公共类和成员。 这是默认值。 -包 仅显示包,受保护和公共类和成员。 -私人的 显示所有类和成员。 Java 9引入了模块的概念,项目Jigsaw将其应用于现有的JDK。 Mark Reinhold的演讲(关于模块的一系列讨论中的第三篇)展示了public修饰符现在如何具有不同的可访问性级别,具体取决于模块的可见性(通过exports ): 公开给大家 公开但仅限于特定模块 仅在模块内公开 由于现在并非所有公共成员都可以访问,因此继续使用相同的Javadoc生成方案就没有多大意义了。 只有那些暴露在“足够”水平的成员才应该被记录下来。 Javadoc模块是否可识别? 除了上面的命令选项还有处理额外曝光层的命令选项吗? 对于仅暴露给特定模块的公共成员,Javadoc是否列出了这些,如 public static void getDefaultThing() ?