标签: java-9

JDK 9的JCE zip文件

我想尝试JDK 9,我需要修补JCE.我在哪里可以得到JCE zip file for JDK 9?或者我可以使用JDK 8吗?我为JDK 9搜索了JCE zip,但无法找到它.提前致谢.

java jce java-8 java-9

15
推荐指数
1
解决办法
6577
查看次数

资源文件放在构建Java 9模块的Gradle项目中的哪个位置?

从IDEA 2018.2.1开始,IDE从模块化的依赖项开始错误突出显示"不在模块图"中的包.我module-info.java在项目中添加了一个文件并添加了必需的requires语句,但我现在无法访问src/main/resources目录中的资源文件.

(有关完整示例,请参阅此GitHub项目.)

当我使用./gradlew run./gradlew installDist+生成的包装器脚本时,我能够读取资源文件,但是当我从IDE运行我的应用程序时,我不是.

我向 JetBrains 提出了一个问题,我学到的是IDEA正在使用模块路径,而Gradle默认使用类路径.通过向我添加以下块build.gradle,我能够让Gradle ...无法读取任何资源文件.

run {
    inputs.property("moduleName", moduleName)
    doFirst {
        jvmArgs = [
                '--module-path', classpath.asPath,
                '--module', "$moduleName/$mainClassName"
        ]
        classpath = files()
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试export将我感兴趣的资源目录作为"包",并在编译时遇到构建失败:

错误:包是空的或不存在:mydir

使用opens而不是exports获得相同的错误,但降级为警告.

我甚至尝试移动mydir资源目录src/main/java,但是这产生了相同的错误/警告,并且还导致资源没有被复制到build目录中.

应该在Java 9中使用哪些资源,以及如何访问它们?


注意:在继续研究问题之后,我已经相当大地编辑了这个问题.在最初的问题中,我还试图弄清楚如何在资源目录中列出文件,但在调查过程中我确定这是一个红色的鲱鱼 - 首先,因为阅读资源目录只有在资源是从file:///URL 读取(也许甚至不是),第二,因为普通文件也没有工作,所以很明显问题是资源文件一般而不是专门用于目录.


解:

按照Slaw的回答,我将以下内容添加到build.gradle:

// at compile …
Run Code Online (Sandbox Code Playgroud)

java embedded-resource gradle java-9 java-module

15
推荐指数
1
解决办法
1852
查看次数

删除Java 9中的sun.misc.Unsafe将破坏Spring,Hibernate

在这里读到,如果Oracle sun.misc.Unsafe在Java 9中删除,Spring和许多其他流行的库将会中断.但是,在Spring或Hibernate中没有对此类的静态引用.那么,这个说法是真的吗?

顺便说一句,Unsafe在Java 8中有64个引用,但如果Oracle删除了该类,它们将更新所有类,并且不会影响库(除非它们Unsafe直接使用).

spring java-9

14
推荐指数
3
解决办法
3199
查看次数

无法从java.base模块导出包

使用IDEA-EAP进行JDK9开发实验.

我收到以下错误 -

Error:(3, 20) java: package jdk.internal.misc is not visible  
(package jdk.internal.misc is declared in module java.base, which does
not export it to module com.jigsaw.npe)
Run Code Online (Sandbox Code Playgroud)

类定义如下 -

package experiment;
import jdk.internal.misc.Unsafe;

public class CompareAndSwap {

    static Unsafe UNSAFE = Unsafe.getUnsafe();
    ...
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试module-info.java在使用IDE创建的模块中包含一个文件,其中包含以下语句 -

module com.jigsaw.npe {
    requires java.base;
}
Run Code Online (Sandbox Code Playgroud)

目录结构现在看起来如图所示 -

目录结构

IDE虽然反映了module-info.java未使用的,但可能这就是我无法定义module com.jigsaw.npe上面尝试过的原因.

寻求一些帮助,了解如何正确放置module-info.java和/或除了我错过的以外的任何东西.

java java-platform-module-system java-9 java-module module-info

14
推荐指数
2
解决办法
2万
查看次数

Maven可以生成模块声明

模块声明定义,除其他事项外,模块的依赖性.如果我使用Maven作为构建工具,这是多余的,因为pom.xml已经包含这些(和更多)信息.基于此,Maven不能module-info.java为我生成吗?

java maven java-9

14
推荐指数
1
解决办法
1282
查看次数

Intellij 在编译期间看不到一些非公共 JDK 9 类

我有一个以前使用 JDK 8.0 的项目,现在迁移到 JDK 9。该项目尚未模块化。

关闭对私有 JDK API 的访问的所有问题都已修复,我可以使用 maven、1.8 语言级别和 JDK 9 从命令行构建项目。

Intellij Idea 根本没有突出任何问题,JDK 9 设置为项目 SDK,但是如果我尝试在 Idea 内部构建项目 - 我会在 idea 控制台中遇到编译问题:

Information:javac 9 was used to compile java sources
Error:(5, 16) java: package sun.misc does not exist
Error:(22, 19) java: cannot find symbol
  symbol:   class Unsafe
  location: class <...>.UnsafeAccessor
Run Code Online (Sandbox Code Playgroud)

因此,该项目现在使用 JDK 9 在 CMD 中构建良好,该错误没有太大意义,因为 sun.misc.Unsafe 在 JDK 9 中存在且公开,Idea 本身没有突出显示任何内容,因此它理解一切都存在.

什么可能导致 Idea 内的项目构建问题?

关于IDEA构建的信息:

IntelliJ IDEA 2017.2.5

Build #IU-172.4343.14,建于 2017 年 9 月 …

java intellij-idea maven java-9 intellij-idea2017

14
推荐指数
2
解决办法
4785
查看次数

是否默认启用G1垃圾收集器的String Deduplication功能?

JEP 192:在Java 8 Update 20中实现的 G1中的字符串重复数据删除添加了新的字符串重复数据删除功能:

通过增强G1垃圾收集器来减少Java堆实时数据集,以便自动且连续地对重复的String实例进行重复数据删除.

JEP页面提到命令行选项UseStringDeduplication (bool)允许启用或禁用重复数据删除功能.但是JEP页面并没有指出默认值.

➠与Java 8和Java 9捆绑在一起的G1垃圾收集器中,重复数据删除功能是否默认为ON或OFF?

➠是否有"getter"方法在运行时验证当前设置?

我不知道在JEP页面之外查找文档的位置.

至少在热点 -equipped的Java 9的实施中,G1垃圾收集器默认启用.这个事实现在促成了这个问题.有关String interning和重复数据删除的更多信息,请参阅Aleksey Shipilev在29:00的2014-10演示文稿.

java jvm g1gc java-9

14
推荐指数
2
解决办法
3120
查看次数

java.lang.NoClassDefFoundError:wsimport上的javax/activation/DataSource Intellij java 9

我正在尝试使用JDK-9为Intellij-Idea 2017.2.5(Webservices - >从wsdl生成代码...)生成wsdl的类存根

我得到这个异常,我想知道如何告诉intellij传递"--add-modules java.activation"来完成操作.

(我想我应该从命令行运行wsimport ...)

Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource
    at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.<clinit>(RuntimeBuiltinLeafInfoImpl.java:461)
    at com.sun.xml.bind.v2.model.impl.RuntimeTypeInfoSetImpl.<init>(RuntimeTypeInfoSetImpl.java:65)
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:133)
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:85)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.<init>(ModelBuilder.java:156)
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.<init>(RuntimeModelBuilder.java:93)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:455)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:303)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:142)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1174)
    at com.sun.tools.xjc.reader.xmlschema.bindinfo.BindInfo.getJAXBContext(BindInfo.java:335)
    at com.sun.tools.xjc.reader.internalizer.SCDBasedBindingSet.apply(SCDBasedBindingSet.java:235)
    at com.sun.tools.xjc.ModelLoader.createXSOM(ModelLoader.java:541)
    at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:269)
    at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:95)
    at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:142)
    at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2244)
    at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:191)
    at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:137)
    at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:391)
    at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:204)
    at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:179)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at com.sun.tools.ws.Invoker.invoke(Invoker.java:135)
    at com.sun.tools.ws.WsImport.main(WsImport.java:57)
Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at …
Run Code Online (Sandbox Code Playgroud)

wsdl web-services intellij-idea wsimport java-9

14
推荐指数
3
解决办法
2万
查看次数

Nashorn在JDK 9和JDK 10上的表现

如果您在JDK 8上使用Nashorn解释moment.js库,它将在几秒钟内运行:

time .../JDK8/bin/jjs moment-with-locales-2.22.2.js
real    0m2.644s
user    0m10.059s
sys     0m0.287s

但是在JDK 9或10上做同样的事情,这很可怕:

time .../JDK10/bin/jjs moment-with-locales-2.22.2.js
real    0m27.308s
user    0m59.690s
sys     0m1.353s

这实际上要慢十倍.只有我吗?

我知道Nashorn会被弃用,但是如果它得到支持它会不能正常工作?

有什么建议?解决方法?

java nashorn java-9 java-10

14
推荐指数
1
解决办法
431
查看次数

Java 9 Cleaner应该优先完成吗?

在Java中,覆盖该finalize方法会得到一个糟糕的说唱,虽然我不明白为什么.类似于FileInputStream使用它来确保close在Java 8和Java 10中调用.然而,Java 9引入java.lang.ref.Cleaner了使用PhantomReference机制而不是GC终结.起初,我认为这只是向第三方类添加finalization的一种方式.但是,其javadoc中给出的示例显示了一个可以使用终结器轻松重写的用例.

我应该finalize用Cleaner 重写我的所有方法吗?(当然,我没有很多.只是一些使用OS资源的类,特别是对于CUDA互操作.)

据我所知,Cleaner(通过PhantomReference)避免了一些危险finalizer.特别是,您无法访问已清理的对象,因此您无法复活它或其任何字段.

然而,这是我能看到的唯一优势.清洁工也是非平凡的.事实上,它和终结都使用了ReferenceQueue!(难道你不喜欢阅读JDK是多么容易吗?)它比完成更快吗?它是否避免等待两个GC?如果许多对象排队等待清理,它会避免堆耗尽吗?(所有这些的答案在我看来都不是.)

最后,实际上没有任何保证阻止您在清理操作中引用目标对象.小心阅读长API注意!如果你最终引用了这个对象,那么整个机制将会默默地中断,而不像终结总是试图跛行.最后,虽然终结线程由JVM管理,但创建和保存Cleaner线程是您自己的责任.

java finalize finalization finalizer java-9

14
推荐指数
2
解决办法
825
查看次数