Tag: java 9

如何让自动模块在Java 9中找到自己的资源?

我试图让我的应用程序与Java 9一起运行,但遗憾的是,当它尝试使用classLoader.getResource(name)加载资源时,其中一个普通的jar依赖项会获得null。 当然,这适用于Java 8。 我使用模块文件声明了对相关模块的依赖,通过其jar名称引用模块的名称(糟糕),并使用–module-path添加jar原样(没有为Java 9定制)选项。 这是我的近似模块文件声明: module my.mod { requires ivy; // the file is called ivy-2.4.0.jar } 我用这个命令运行: java –module-path my-mod.jar:ivy-2.4.0.jar -m my.mod 当我运行应用程序时,如果库不尝试加载该资源,它可以正常工作……但如果它运行,它会在尝试使用该资源的行处获得NullPointerException 。 我可以看到资源存在于jar文件中的正确路径中。 我已经尝试将我的应用程序作为jar运行(如上所示)并且只运行类文件: java –module-path modules-dir:ivy-2.4.0.jar -m my.module/my.Main 在后一种情况下,错误是不同的,但相关:Ivy甚至找不到它试图从自己的jar加载的属性文件! 有没有解决办法,这是一个已知的错误,还是我做错了什么?

我需要Spring 5 for Java 9吗?

Spring 5被提升为“支持JDK 9”,同时Spring 4.3.13的文档声明它支持Java 8(以及6和7) 。 这是否意味着我需要在可以之前升级到Spring 5 在JRE 9中运行我的应用程序? 使用JDK 9编译我的应用程序?

有没有办法在jshell中为顶级函数使用方法引用?

假设我在jshell中这样做: jshell> void printIsEven(int i) { …> System.out.println(i % 2 == 0); …> } | created method printIsEven(int) jshell> List l = Arrays.asList(7,5,4,8,5,9); l ==> [7, 5, 4, 8, 5, 9] jshell> l.forEach(/* ??? */); // is it possible to use a method reference here? 在普通程序中,我可以在非静态上下文中编写l.forEach(this::printIsEven) ,或者在名为MyClass的类的静态上下文中l.forEach(MyClass::printIsEven) 。 在jshell中使用this::printIsEven不起作用,因为jshell在静态上下文中执行语句,但是你不能使用静态方法引用,因为没有类名称为前缀::printIsEven ,并且尝试l.forEach(::printIsEven)只是一个语法错误。

如何使用Gradle制作多版本JAR文件?

Java9引入了Multi-Release JAR 。 假设我有使用java8的多模块Gradle项目: project-root settings.gradle build.gradle /module1 /src … (common maven structure) /module2 /module3 这是Gradle中常见的多模块项目。 假设我需要module1 MR-Jar。 我不能添加针对Java9的module1 module1-java9因为基础是8 – 到目前为止,我的Gradle和IntelliJ IDEA都抱怨。 Gradle是用java8编译的,但是我需要为模块启用java9运行时(不知道怎么做); 在IntelliJ IDEA中我可以为模块设置java9运行时,但每次重新加载gradle配置时它都会被覆盖。 而且,即使我以某种方式添加它,我需要指示module1到1)构建第二个和2)包含module1-java9 。 以下是这种情况的图纸: project-root settings.gradle build.gradle /module1 /module1-java9 (added java9 module) /module2 … 或者,这可以在src-java9下完成,具有不同的源: src和src-java9 。 但我怀疑这是否会被接受。 这是一张图: project-root settings.gradle build.gradle /module1 /src /src-java9 (added java9 source folder) /module2 […]

是否可以在Java 9模块中使用不带module-info.class的依赖项

我创建了两个小项目de.app1和de.app2 ,其中来自de.app1的 App使用来自de.app2的 Test 。 ├── de.app1 │ ├── de │ │ └── app │ │ └── App.java │ └── module-info.java └── de.app2 └── de └── test └── Test.java 第一个项目中的module de.app1 {}只包含module de.app1 {} 我编译了第二个项目并创建了一个jar文件: javac de/test/Test.java jar cf app2.jar de/test/Test.class 然后尝试编译第一个项目,如下所示: javac -cp ../de.app2/app2.jar de/app/App.java module-info.java 失败,因为无法找到Test 。 当我在没有module-info.java的情况下编译项目时,一切正常。 是否有可能在Java 9模块中使用不是Java 9模块的jar中的类? 特别是对于依赖第三方项目的项目(例如apache-commons,……),我认为需要这样的东西。

List.of()或Collections.emptyList()

作为List.of(…)或Collections.unmodifiableList()的特例 – 指向空 且不可变列表的首选Java 9方式是什么? 继续写 Collections.emptyList(); 或切换到 List.of();

如何在JavaFX 9中查找TableView中可见行的索引

如何在JavaFX 9中获取TableView中可见行的索引? 在JavaFX 8中,我可以执行以下操作: // — The offending imports in Java 9 // import com.sun.javafx.scene.control.skin.TableViewSkin; // import com.sun.javafx.scene.control.skin.VirtualFlow; /** * This is a total hack. We need it as scrollTo jumps the selected * row to the top of the table. Jarring if the row is already * visible. As a workaround, we only scroll […]

Java中lambda() – > {}的含义

我正在看下面的Stack Overflow答案: 如何在运行时更改Spring的@Scheduled fixedDelay 在代码中有以下行: schedulerFuture = taskScheduler.schedule(() -> { }, this); 我想知道lambda () -> {}在该代码中的含义。 我需要在不使用lambdas的情况下编写它。

Java 9模块和JUnit 4

Eclipse氧气; Windows 7的; JDK 9决赛9月21日; JUnit 4.12和现有的应用程序。 作为起点,可以编译,执行应用程序,并且所有JUnit测试都显示为绿色。 现在我们使用eclipse生成文件module-info.java。 结果如下: module ch.commcity.topsort { exports ch.commcity.topsort; requires junit; } 但是有了错误:junit无法解析为模块。 问题是:如何告诉文件junit没有定义任何模块,它应该在兼容模式下运行?

在jshell中使用C选项有什么用处

我已经阅读了jshell指南的介绍,但在jshell中找不到关于-C选项的描述/示例。 $jshell –help -C Pass to the compiler. Use one -C for each compiler flag or flag argument