我正在尝试使用Eclipse Oxygen IDE测试JDK9(jdk-9-ea + 147版本).
我已经安装了jdk和jre.来自Eclipse Market Place我已经安装了Java9 Beta扩展:
问题是,当我尝试从Eclipse添加新安装的jre时,我收到以下错误:
有趣的是,以前的JDK版本的安装不会发生此错误:
是否有人遇到Eclipse Oxygen的simillar问题?任何反馈都表示赞赏.
我正在尝试使用jshell,但找不到粘贴多行表达式的选项.甚至可以在jshell中粘贴多行.与scala提供的类似paste mode.
在Java 9的模块声明中有2个结构:
exports com.foo;
Run Code Online (Sandbox Code Playgroud)
和
opens com.foo;
Run Code Online (Sandbox Code Playgroud)
凡exports赠款编译时访问,同时opens允许运行时访问,如反射和资源.
opens有一个宽容exports,你可以将整个模块定义为open,结果与显式打开每个包相同:
open module com.mod {
Run Code Online (Sandbox Code Playgroud)
但是没有相似的结构
exported module com.mod {
Run Code Online (Sandbox Code Playgroud)
我的问题:为什么会这样; 有什么决定允许一次打开整个模块而不是出口?
java java-platform-module-system java-9 java-module module-info
java doc中的ModifierforExports表明了这一点
MANDATED导出在模块声明的源中隐式声明.
SYNTHETIC未在模块声明的源中显式或隐式声明导出.
看几个module-info.classes,我可以看到通常有两种类型的用法:
module java.base {
...
exports java.util; // type 1
exports java.util.concurrent;
exports java.util.concurrent.atomic;
exports jdk.internal to jdk.jfr; // type 2
exports jdk.internal.jmod to
jdk.compiler,
jdk.jlink;
...
}
Run Code Online (Sandbox Code Playgroud)
在合格的出口做介绍这两种,但没有对枚举类型没有提及.这些是文档中提到的不同类型吗?
Q1.一般来说SYNTHETIC和MANDATED作为在使用调节剂Exports,ModuleDescriptor,Opens和Requires.这两者之间的区别是什么,在实践中优于另一个?
Q2.Synthetic Modifier如果没有在模块的源代码中声明,那么无论如何都是一个例子?
在JRE-9/lib目录中(至少在Windows上),有一个新文件,modules其大小约为107 MB.是否可以提取该文件或列出其中的Java模块?
我可以看到一个名为的新工具jmod可用jdk-9/bin/jmod.exe,但是用于读取.jmod位于的文件,jdk-9/jmods它无法读取文件modules.
Web应用程序的WEB-Inf/lib目录用于jar文件,servlet容器(例如Tomcat)自动进入应用程序的类路径.对于Java 9的模块化jar,这个机制是如何工作的(或者应该在将来工作)有什么想法吗?这些提供模块,用户必须指定应用程序应使用哪些包含/导出的模块/包.(旧)类路径还有一个模块路径.
模块化的jar是否在没有任何进一步的规范/配置的情况下工作,以便所有导出或包含的模块都在类路径上?
Java EE 8和Tomcat 9已发布.这两个项目都声称支持Java 9.因此,应该有一种方法以符合模块理念的方式使用Java 9模块.
我愿意将参数传递给jshell脚本.例如,我会喜欢这样的事情:
jshell myscript.jsh "some text"
Run Code Online (Sandbox Code Playgroud)
然后在脚本中的某个变量中提供字符串"some text".
但是,jshell只需要一个文件列表,因此答案是:
File 'some text' for 'jshell' is not found.
Run Code Online (Sandbox Code Playgroud)
有没有办法将参数正确传递给jshell脚本?
到目前为止,我唯一的解决方案是在调用脚本时使用环境变量:
ARG="some test" jshell myscript.jsh
Run Code Online (Sandbox Code Playgroud)
然后我可以在脚本中访问它:
System.getenv().get("ARG")
Run Code Online (Sandbox Code Playgroud) 我将Java 8中的maven项目迁移到Java 9项目而没有任何构建工具Eclipse OxyGen 1a.
所以我的module-info.java看起来像这样:
但java.xml.bind不可访问,虽然它在我的模块路径中:
那么这里有什么问题?
Java9引入了Multi-Release JAR.
假设我使用java8有多模块Gradle项目:
project-root
settings.gradle
build.gradle
/module1
/src
... (common maven structure)
/module2
/module3
Run Code Online (Sandbox Code Playgroud)
这是Gradle中常见的多模块项目.假设我需要MR-Jar module1.
我无法添加module1-java9定位Java9,因为基础是8 - 到目前为止,我的Gradle和IntelliJ IDEA都抱怨.Gradle是用java8编译的,但是我需要为模块启用java9运行时(不知道怎么做); 在IntelliJ IDEA中我可以为模块设置java9运行时,但每次重新加载gradle配置时它都会被覆盖.
而且,即使我以某种方式添加它,我需要指示module11)构建第二个和2)包括module1-java9.以下是这种情况的图纸:
project-root
settings.gradle
build.gradle
/module1
/module1-java9 (added java9 module)
/module2
...
Run Code Online (Sandbox Code Playgroud)
或者,这可以在module1具有不同来源的情况下完成:src和src-java9.但我怀疑这会被接受.这是一张图:
project-root
settings.gradle
build.gradle
/module1
/src
/src-java9 (added java9 source folder)
/module2
/module3
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只看到它module1-java9是一个单独的项目(不是模块),module1只是在那里调用gradle并获取输出.是的,这是gradle调用gradle :)))
有没有开发人员友好的方式来做到这一点?
我想在我的机器上安装JDK 9,访问JDK官方下载页面,很惊讶地看到,
Java SE 9已经到了支持终点.Java SE 9的用户应切换到Java SE 10.请访问我们的Java SE下载页面以获取当前版本的Java SE.您将在......秒内重定向到Java SE下载页面.请将书签更新到Java SE下载页面.
我做了一些谷歌搜索和Java发布历史等.但找不到任何具体的原因.
我有几个问题 -
java-9 ×10
java ×9
java-module ×5
eclipse ×2
jshell ×2
module-info ×2
gradle ×1
java-10 ×1
java-8 ×1
java-ee ×1
java-platform-module-system ×1
jdk-tools ×1
jmod ×1
tomcat ×1