我目前正在测试将现有应用程序迁移到Jigsaw Modules.我的一个模块使用ElasticSearch及其Groovy插件.
不幸的是,他们共享一个拆分包,所以mvn install给我:
x从lang.groovy和elasticsearch读取包org.elasticsearch.script.groovy
对于描述符中的每个必需模块,其中x是每个模块的名称.
我假设一个较新的elasticsearch版本将在Java 9最终版本的时候取消拆分包,但是通常有一种方法来处理遗留依赖项中的拆分包吗?
我希望能够在类路径而不是模块路径上有那些,但是在邮件列表上阅读这个对话后,似乎没有办法告诉Maven编译器这样做.
maven 3.3.9 - maven-compiler-plugin 3.6.0 - jdk9-ea + 149 - elasticsearch 2.3.3
maven java-platform-module-system maven-compiler-plugin java-9
我正在使用jdk9-ea 149并创建了一个示例javafx应用程序
IntelliJ不理解java库,它以红色显示所有import语句,并且它们都是灰色的.对于java.util.List,java.util.ArrayList它有同样的问题.
我可以在外面编译表单,但我无法从IntelliJ 2016.3.2 Ultimate Edition编译代码.
看起来我们需要向IntelliJ项目添加一些库,但是使用java9 build 149 jigsaw我不知道该怎么做.
我正在使用实验功能仍然不理解import语句 - 请参阅下面的intellij设置
IntelliJ版本:IntelliJ 2016.3.2 Ultimate Edition
Java版本:java 9-ea build:149

java javafx intellij-idea java-platform-module-system java-9
我在Mac OS上安装了JDK 9的发行版.
jshell工作得很好,Jigsaw模块支持工作,但没有jlink:
? java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
Run Code Online (Sandbox Code Playgroud)
这是空的:
find /System/Library/Frameworks/JavaVM.framework/Versions/Current/ -iname jlink\*
Run Code Online (Sandbox Code Playgroud)
供参考:
? ls -l $(which java)
lrwxr-xr-x 1 root wheel 74 Nov 7 2016 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
Run Code Online (Sandbox Code Playgroud) 考虑maven项目中的以下代码:
import org.w3c.dom.css.CSSStyleDeclaration;
public class Test {
public static void main(String[] args) {
CSSStyleDeclaration styleDeclaration = null;
}
}
Run Code Online (Sandbox Code Playgroud)
哪里pom.xml包含maven-compiler-plugin插件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.serce.jdk10mvntest</groupId>
<artifactId>jdk10mvntest</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
可以使用maven编译该项目,没有错误.但是,当它使用带有JDK10 SDK的IntelliJ编译时,会Error:(1, 27) java: package org.w3c.dom.css does not exist出错.如果源更改为<source>10</source>错误消失.我希望问题可能与拼图相关,但我无法使用--add-modules ...因为javac错误option --add-modules not allowed with target 1.8.
是否有任何变通方法允许我使用IntelliJ与JDK10 SDK以及 …
java compilation intellij-idea java-platform-module-system java-10
具有依赖于自动模块的显式模块化项目,例如,依赖于java.activation。仍然可以使用jlink吗?
请参阅以下module-info.java:
module hello {
requires java.activation;
}
Run Code Online (Sandbox Code Playgroud)
然后,Jlink无法添加模块:
$ jlink --module-path target/modules --add-modules hello --output target/jlink
Error: automatic module cannot be used with jlink: java.activation from file:///C:/Development/jlinkExample/target/modules/javax.activation-api-1.2.0.jar
Run Code Online (Sandbox Code Playgroud)
根据我的理解,自动模块无论如何都将包含整个类路径,所以我猜想用jlink创建运行时映像没有好处吗?另请参阅:什么是自动模块?
有没有可能解决这个问题的方法,也许为那些依赖项生成一个模块信息?
我正在使用jdk-9,我想sun.reflect.*在我的代码中使用包,但我得到以下异常
Exception in thread 'main' java.lang.IllegalAccessError : class Test (in moudle: Unnamed Module) cannot access class sun.reflect.Reflaction (in module:java.base), sun.reflect is not exported to Unnamed module
Run Code Online (Sandbox Code Playgroud)
当我使用JDK-9运行下面的示例代码时
public static void main(String args[]){
System.out.println(Reflection.getCallerClass(3));
}
Run Code Online (Sandbox Code Playgroud) 组件详细信息 - 使用IntelliJ IDEA 2017.1 CE和jdk-9-ea + 154
main() -
Set<String> set2 = Set.of("a", "b", "c");
set2.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
module-info.java
module collection {
requires java.base;
}
Run Code Online (Sandbox Code Playgroud)
日志 -
Error occurred during initialization of VM
java.lang.RuntimeException: Package jdk.internal.jimage.decompressor in both module jrt.fs and module java.base
at jdk.internal.module.ModuleBootstrap.fail(java.base@9-ea/ModuleBootstrap.java:699)
at jdk.internal.module.ModuleBootstrap.boot(java.base@9-ea/ModuleBootstrap.java:329)
at java.lang.System.initPhase2(java.base@9-ea/System.java:1928)
Run Code Online (Sandbox Code Playgroud)
对VM的初始化实施感到怀疑,我的问题是我还没有包含模块jrt.fs- 图片来自哪里?如何调试此类模块包含/排除?如何进一步解决当前异常?
java intellij-idea java-platform-module-system java-9 intellij-17
我正在尝试使用Java 9并查看以下场景:
实验1
从'C'运行main会产生运行时错误:
java.lang.RuntimeException:在模块B和模块A中包com.foo
实验2
和以前一样,但这次都导出了com.foo.
从C执行main的结果:
java.lang.module.ResolutionException:模块B和A将包com.foo导出到模块C.
实验3
与2相同,但这次我在模块C中声明了包com.foo.
现在我得到一个编译错误: 错误:(4,1)java:module C从A和B读取包com.foo
为什么前两个案例在编译期间没有被捕获?在执行程序之前是否有运行时属性我不知道这是否排除解决方案?
此外,就错误消息而言:实验2中的错误消息以何种方式优于实验1中给出的错误消息.如果其中一个模块没有导出它,那么最终结果将是不同的.换句话说,产生不同错误消息背后的考虑是什么?
我有以下情况:
模块地址:
module org.abondar.experimental.address {
exports org.abondar.experimental.address;
}
Run Code Online (Sandbox Code Playgroud)
模块人:
module org.abondar.experimental.person {
requires org.abondar.experimental.address;
exports org.abondar.experimental.person;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Maven构建它们,所以每个模块都有自己的目标目录和jar文件.
我正在尝试运行具有这样的主类的模块Person
java --module-path Address/target/Address-1.0.jar;Person/target/Person-1.0.jar -m org.abondar.experimental.person/org.abondar.experimental.person.Main
Run Code Online (Sandbox Code Playgroud)
但我得到了许可否认.如何设置包含多个模块的模块路径?
我正在将 Java 桌面应用程序升级到 JDK10,并且需要利用模块来使用javapackager构建本机包。
一切都很好,直到我使用 Proguard (6.0.2) 添加了一个混淆步骤。一旦我启用了混淆(使用来自 < JDK9 项目的工作 proguard 配置文件),它就会按预期工作,但 Proguardmodule-info.class从输出 JAR 中删除了,这会阻止javapackager找到模块。
根据 Proguard 的injars参数文档
默认情况下,任何非类文件都将被复制而不做任何更改。
这里的问题是 module-info.class是一个“类”文件(尽管很奇怪)。“保留”规则取决于类名,所以我认为没有任何规则可以用来防止这种删除。
如何让 Proguard 保留module-info.class文件?
java-platform-module-system ×10
java ×9
java-9 ×7
jlink ×2
maven ×2
compilation ×1
gradle ×1
intellij-17 ×1
java-10 ×1
javafx ×1
macos ×1
proguard ×1