Tag: java 9

Eclipse Mars支持Java9 – 构建路径设置

我尝试安装并使用Eclipse Mars的Java 9支持 。 但是在尝试编译简单的Hello World程序时,我在Eclipse中遇到两个错误: 无法解析java.lang.Object类型。 它是从所需的.class文件间接引用的Main.java / Java9Test / src第1行Java问题 该项目未构建,因为其构建路径不完整。 找不到java.lang.Object的类文件。 修复构建路径然后尝试构建此项目Java9Test未知Java问题 (虽然在查看构建路径时看不到任何错误) 有人面临类似的问题吗? 怎么解决这个问题? 这是我到目前为止所做的…… 安装OpenJDK 9很顺利(javac和java工作正常)。 Eclipse更新很顺利(我使用Marketplace并使用提供的链接完成了它)。 当使用Java 9启动eclipse时,我得到两个错误(一个关于Java版本,一个关于垃圾收集器选项)但是设法通过从eclipse.ini中删除这些选项来“修复”它们。 在Eclipse中配置OpenJDK 9,将源级别更改为9并重建项目/重新启动的Eclipse几次。

在Java9中使用带有Maven的Incubator Http类

我在用什么 Java 9 + Maven + HttpClient(来自java 9) jdk.incubator.http.HttpClient 问题 使用maven构建项目时出现以下错误 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project Core: Compilation failure: Compilation failure: [ERROR] Foo.java:[4,21] package jdk.incubator.http is not visible Foo第4行是 import jdk.incubator.http.HttpClient; 的pom.xml 4.0.0 me.bar foo 0.0.0-SNAPSHOT Core ${project.artifactId} ${project.basedir}/src org.apache.maven.plugins maven-clean-plugin 3.0.0 org.apache.maven.plugins maven-compiler-plugin 3.7.0 9 9 org.apache.maven.plugins maven-shade-plugin 3.1.0 package […]

在Java 9+中使用JRE运行时,我可以提供运行时编译器访问吗?

我正在将应用程序迁移到Java 10.我们的应用程序通常使用JRE运行,但我们允许用户通过捆绑tools.jar并使用reflection按需加载JavacTool实例来编译自己的自定义代码。 我们的方法如下: public static JavaCompiler getJavaCompiler() { String toolJarName = “tools.jar”; File file = getResourceForClass(“tools.jar”); try { file = file.getCanonicalFile(); } catch (IOException ignore) { } if (!file.exists()) throw new RuntimeException(“Can’t find java tools file: ‘”+file+”‘”); try { URL[] urls = new URL[]{ file.toURI().toURL() }; URLClassLoader cl = URLClassLoader.newInstance(urls); return Class.forName(“com.sun.tools.javac.api.JavacTool”, false, cl).asSubclass(JavaCompiler.class).newInstance(); } […]

Java 9模块,静态意味着浅层reflection?

为了能够在移植到Java 9时更好地判断reflection的风险,我想知道只要引用可访问类型, 浅reflection代替静态编译是否安全: 我的意思是,我可以随时更换 PublicType p = (PublicType)(Factory.instance()); p.publicMethod(); (其中Factory.instance()具有返回类型Object ,并将从未打开的模块返回API类型的子类型( Package.PublicType )。 同 Object p = Factory.instance(); Class c = Class.forName(“package.PublicType”); Method m = c.getMethod(“publicMethod”, (Class[])null); // assert p instanceof package.PublicType m.invoke(p, (Object[])null); // throws? 这个问题的早期版本关于我同时解决的特定代码问题 。 但是,一般的问题也很有趣,可以讨论:是否存在返回的对象具有正确的子类型但在调用或MethodHandle解析时未通过访问检查的情况。

在Java中动态加载模块(类)的最佳方法

我目前正在编写一个需要在不同类型的设备上运行的应用程序。 我的方法是创建一个“模块化”应用程序,它可以根据操作所需的设备动态加载不同的类。 为了使应用程序易于扩展,我的目标是为其他模块(.jar或.class文件)分配一个特定的路径,保留核心程序。 当不同的客户需要不同的模块时(这不需要为每个模块编译不同的应用程序),这将是至关重要的。 这些模块将实现一个通用接口,而“核心”应用程序可以使用接口上定义的这些方法,让单个实现完成工作。 根据需要加载它们的最佳方法是什么? 我正在考虑使用URLClassLoader,但我不知道这种方法是否是根据新的模式和Java趋势是最新的,因为我想避免设计糟糕的应用程序和弃用的技术。 使用JDK 9制作模块化且易于扩展的应用程序的另一种最佳方法是什么 (可以通过将模块文件添加到文件夹来扩展)?

如何从Java 9模块导出所有包?

现在,对于我拥有的每个模块,我都需要明确指定要导出的包。 例如: module core { exports cc.blynk.server.core; exports cc.blynk.server.core.protocol.handlers.decoders; exports cc.blynk.server.core.protocol.handlers.encoders; } 但是,它不是很方便。 我想做那样的事情: module core { exports cc.blynk.server.core.*; } 有没有办法做到这一点? 这种限制来自哪里?

ant支持java 9 addmods选项

我正在尝试使用Java 9编译我的java项目。我正在使用java.xml.bind包,所以我需要使用-addmods选项进行编译。 Ant 1.9.7似乎不支持这个新function。 ant支持Java 9编译器的-addmods选项吗?

无法执行maven-compiler-plugin:3.6.1:使用java 9时的testCompile

我知道有很多类似错误的问题。 我希望在重点之前考虑到它只发生在Java 9中。 我确实安装了java 9 C:\_pocs\ws_j9\java9-http-client>java -version java version “9.0.1” Java(TM) SE Runtime Environment (build 9.0.1+11) Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode) C:\_pocs\ws_j9\java9-http-client>echo %JAVA_HOME% C:\Program Files\Java\jdk-9.0.1 为了简化示例,如果我下载一个非常简单的示例https://examples.javacodegeeks.com/core-java/java-9-httpclient-example/ ,我尝试/ mvn clean install package -e [ERROR] Failed to parse module-info: [ERROR] With qdox: null [INFO] ———————————————————————— [INFO] BUILD FAILURE [INFO] ———————————————————————— [INFO] Total time: […]

JDK9模块如何帮助“封装范围的子包”?

我想知道JDK9模块。 假设您有以下3个包: com.company.product com.company.product.impl_a com.company.product.impl_b 包product.impl_a和product.impl_b中的类只能由包product的类访问。 用户应该只使用product包中的类。 您可以想象,传递某些标志或属性将决定是否在内部使用impl_a或impl_b 。 在JDK8-中,您必须在impl_a和impl_b public创建这些类。 这有点糟糕 ,因为可以欺骗用户他们可以使用这些类。 它完全有效且允许。 JDK9如何在这里提供帮助? 我们是否会为product.impl_a声明一个模块,为product.impl_a声明另一个模块,并声明导出的类只能由第三个模块product访问,这将取决于两个模块product.impl_a和product.impl_b ? 另外,声明一个依赖于product.impl_a或product.impl_b的新模块实际上是不可能的。 其他模块只能依赖于模块product吗?

IntelliJ 2018.1首选项中的“使用’ – release’选项”是什么?

在IntelliJ 2018.1(构建,执行,部署>编译器> Java编译器)的首选项中,有一个标记为的复选框: 使用’–release’选项进行交叉编译(Java 9及更高版本) 我在网上搜索时找到了相关信息。 “?” 单击帮助图标时出现404错误。 这个选项的目的/function是什么?