标签: java-9

JDK9:发生了非法的反射访问操作.org.python.core.PySystemState

我正在尝试使用Java9(JDK9)运行DMelt程序(http://jwork.org/dmelt/)程序,它给了我错误,例如:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.python.core.PySystemState (file:/dmelt/jehep/lib/jython/jython.jar) to method java.io.Console.encoding()
WARNING: Please consider reporting this to the maintainers of org.python.core.PySystemState
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Run Code Online (Sandbox Code Playgroud)

我该如何解决?我试图将-illegal-access = permit添加到脚本"dmelt.sh"的最后一行(我在Linux中使用bash),但这并没有解决这个问题.我很沮丧.我经常使用这个程序很长一段时间.也许我永远不应该转向JDK9

java java-9 java-module

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

如何退出JShell并返回命令行?

使用JShell时,如何将其退回CMD线?

我已经尝试过ctrl+ x而且只是写作退出,但没有快乐.

java java-9 jshell

44
推荐指数
2
解决办法
9920
查看次数

如何在Java 9/10中安全地访问类路径中所有资源文件的URL?

从我们的发行说明了解到的Java 9

应用程序类加载器不再是java.net.URLClassLoader的实例(在以前的版本中从未指定过的实现细节).假定ClassLoader :: getSytemClassLoader返回URLClassLoader对象的代码需要更新.

这会破坏旧代码,它会扫描类路径,如下所示:

Java <= 8

URL[] ressources = ((URLClassLoader) classLoader).getURLs();
Run Code Online (Sandbox Code Playgroud)

哪个遇到了

java.lang.ClassCastException: 
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to 
java.base/java.net.URLClassLoader
Run Code Online (Sandbox Code Playgroud)

因此,对于Java 9+,以下解决方法被提议作为Apache Ignite项目PR,它在JVM运行时选项中进行调整时可以正常工作:--add-opens java.base/jdk.internal.loader=ALL-UNNAMED.但是,如下面的评论所述,这个PR从未合并到他们的主分支.

/*
 * Java 9 + Bridge to obtain URLs from classpath...
 */
private static URL[] getURLs(ClassLoader classLoader) {
    URL[] urls = new URL[0];

    try {
        //see https://github.com/apache/ignite/pull/2970
        Class builtinClazzLoader = Class.forName("jdk.internal.loader.BuiltinClassLoader");

        if (builtinClazzLoader != null) {
            Field ucpField = builtinClazzLoader.getDeclaredField("ucp");
            ucpField.setAccessible(true);

            Object ucpObject = …
Run Code Online (Sandbox Code Playgroud)

java classloader java-9

44
推荐指数
2
解决办法
1614
查看次数

为什么Arrays.asList(...).toArray().getClass()在JDK 8和9中给出不同的结果?

为什么以下条件返回trueJDK 8,而它返回falseJDK 9?

String[].class == Arrays.asList("a", "b").toArray().getClass()
Run Code Online (Sandbox Code Playgroud)

java java-8 java-9

44
推荐指数
2
解决办法
1434
查看次数

Java 9接口与类

从Java 9会允许我们定义privateprivate static方法太接口,这将是在剩下的差异interfaceclass?而且,Java是否正在慢慢走向多重继承?

java java-9

41
推荐指数
3
解决办法
6478
查看次数

org.springframework.cglib.core.ReflectUtils $ 1的非法反射访问

我的JDK 9 + 181 Spring Boot 2.0.0.BUILD-SNAPSHOT CLI应用程序在启动时显示此警告:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/home/jan/src/fm-cli/target/fm-cli-0.1.0-SNAPSHOT.jar!/BOOT-INF/lib/spring-core-5.0.0.RELEASE.jar!/) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
Run Code Online (Sandbox Code Playgroud)

这是一个控制台应用程序,所以我需要禁用此警告 - 我该怎么做?

注意:此问题询问如何禁用Spring触发此警告的具体问题; 它不是JDK9的副本:发生了非法的反射访问操作.org.python.core.PySystemState,用于处理不同库中的类似症状.

java spring spring-boot java-9 java-module

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

Project Jigsaw vs Maven

来自Jigsaw项目:

使开发人员能够更轻松地为Java SE和EE平台构建和维护库和大型应用程序.

我正在尝试学习Jigsaw是什么项目,到目前为止,Project Jigsaw的目标似乎与我们使用Maven(或Gradle)依赖关系管理所做的有些重叠:

  • 构建像Maven这样的工具是一种威胁吗?
  • 或者我的理解是错误的,项目Jigsaw将以某种方式补充这些构建工具?

maven java-platform-module-system java-9

39
推荐指数
2
解决办法
7743
查看次数

newInstance vs jdk-9/jdk-8和jmh中的new

我在这里看到很多线程比较并尝试回答哪个更快:newInstance或者new operator.

看看源代码,它看起来newInstance应该慢得多,我的意思是它做了很多安全检查并使用反射.而且我决定先测量一下jdk-8.这是使用的代码jmh.

@BenchmarkMode(value = { Mode.AverageTime, Mode.SingleShotTime })
@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)   
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)    
@State(Scope.Benchmark) 
public class TestNewObject {
    public static void main(String[] args) throws RunnerException {

        Options opt = new OptionsBuilder().include(TestNewObject.class.getSimpleName()).build();
        new Runner(opt).run();
    }

    @Fork(1)
    @Benchmark
    public Something newOperator() {
       return new Something();
    }

    @SuppressWarnings("deprecation")
    @Fork(1)
    @Benchmark
    public Something newInstance() throws InstantiationException, IllegalAccessException {
         return Something.class.newInstance(); …
Run Code Online (Sandbox Code Playgroud)

java performance java-8 jmh java-9

39
推荐指数
1
解决办法
3838
查看次数

在Java 9中加载类和资源

我正在阅读InfoQ上引用Reinhold的这篇文章:

开发人员仍然可以使用Java 9中的Java类路径为Java运行时搜索类和资源文件.只是使用Java 9的模块,开发人员不再需要类路径.

所以现在我的问题是:执行上面列出的任务的Java 9方法是什么?如何动态加载例如图像(缺少相对路径的摆弄)?

更有趣的是,如何检查一个类是否可用并动态做出决定(例如,检查Jackson是否可用,如果是,请将其用于JSON序列化,如果不使用别的东西)?

文章还提到Spring Boot已经支持Java 9,Spring Boot肯定会做很多动态加载.那么也许有人知道Spring可以看到的代码片段?

java java-platform-module-system spring-boot java-9

39
推荐指数
2
解决办法
8575
查看次数

Java 9及更高版本中的Java Web Start支持

我对Java Web Start的状态感到困惑.在Oracle的支持路线图中,我们可以读到:

支持部署技术

Web部署技术由Java插件和Web Start技术组成,具有更短的支持生命周期.对于通过Java SE 8的主要版本,Oracle为这些技术提供了五(5)年的Premier支持.扩展支持不适用于部署堆栈,并且不可用于Java SE 9以外的支持.有关详细信息,请参阅Oracle Lifetime支持策略.

可以在2017年6月之后的任何时候删除Java SE 6和Java SE 7的部署技术. 虽然部署堆栈可能包含在Java SE 9或更高版本中,但Java SE 8是部署堆栈的推荐且仅受支持的版本.

现在,我们已经知道applet和Java插件将在未来的Java版本中被删除,但我从来没有读过有关Java Web Start是删除的候选者.

在Oracle的Java平台标准版部署指南#Java入口(Java 9文档页面)中,Java Web Start被宣传为已弃用的applet技术的替代方案:

虽然JDK 9中提供并支持,但Applet API和Java插件在未来版本中标记为已弃用,准备删除.applet和嵌入式JavaFX应用程序的替代方案包括Java Web Start和自包含应用程序.

我什么都不担心,或者我错过了关于Java Web Start弃用的公告?

java java-web-start java-9

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