标签: java-platform-module-system

如何处理自动模块中的拆分包?

我目前正在测试将现有应用程序迁移到Jigsaw Modules.我的一个模块使用ElasticSearch及其Groovy插件.

  • org.elasticsearch:elasticsearch
  • org.elasticsearch.module:郎常规

不幸的是,他们共享一个拆分包,所以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

8
推荐指数
1
解决办法
601
查看次数

IntelliJ不了解Java9-ea上的java库

我正在使用jdk9-ea 149并创建了一个示例javafx应用程序

IntelliJ不理解java库,它以红色显示所有import语句,并且它们都是灰色的.对于java.util.List,java.util.ArrayList它有同样的问题.

我可以在外面编译表单,但我无法从IntelliJ 2016.3.2 Ultimate Edition编译代码.

看起来我们需要向IntelliJ项目添加一些库,但是使用java9 build 149 jigsaw我不知道该怎么做.

使用jdk9-ea在Intellij上使用JavaFx代码示例

我正在使用实验功能仍然不理解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

8
推荐指数
1
解决办法
796
查看次数

JDK 9 + Mac OS + jlink?

我在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)

java macos jlink java-platform-module-system java-9

8
推荐指数
1
解决办法
1512
查看次数

使用JDK10 SDK的IntelliJ无法编译1.8目标的maven项目

考虑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

8
推荐指数
1
解决办法
926
查看次数

将jlink与自动模块一起使用

具有依赖于自动模块的显式模块化项目,例如,依赖于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创建运行时映像没有好处吗?另请参阅:什么是自动模块?

有没有可能解决这个问题的方法,也许为那些依赖项生成一个模块信息?

java jlink java-platform-module-system

8
推荐指数
1
解决办法
2108
查看次数

如何在jdk9/java-9中使用sun.reflect包?

我正在使用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)

java java-platform-module-system java-9

7
推荐指数
4
解决办法
5621
查看次数

RuntimeException:在模块jrt.fs和模块java.base中打包jdk.internal.jimage.decompressor

组件详细信息 - 使用IntelliJ IDEA 2017.1 CEjdk-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

7
推荐指数
4
解决办法
8257
查看次数

在Java 9中,为什么在某些情况下包冲突的处理方式有点不同?

我正在尝试使用Java 9并查看以下场景:

实验1

  • 模块A.
  • 模块B.
  • 两者都声明一个名为com.foo的非空包,但不导出它.
  • 第三个模块C都需要这两个模块

从'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中给出的错误消息.如果其中一个模块没有导出它,那么最终结果将是不同的.换句话说,产生不同错误消息背后的考虑是什么?

java java-platform-module-system java-9

7
推荐指数
1
解决办法
429
查看次数

如何将几个罐子添加到模块路径?

我有以下情况:

模块地址:

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 maven java-platform-module-system java-9

7
推荐指数
1
解决办法
1685
查看次数

如何防止 proguard 从输出 jar 中删除“module-info.class”?

我正在将 Java 桌面应用程序升级到 JDK10,并且需要利用模块来使用javapackager构建本机包。

一切都很好,直到我使用 Proguard (6.0.2) 添加了一个混淆步骤。一旦我启用了混淆(使用来自 < JDK9 项目的工作 proguard 配置文件),它就会按预期工作,但 Proguardmodule-info.class从输出 JAR 中删除了,这会阻止javapackager找到模块。

根据 Proguard 的injars参数文档

默认情况下,任何非类文件都将被复制而不做任何更改。

这里的问题是 module-info.class是一个“类”文件(尽管很奇怪)。“保留”规则取决于类名,所以我认为没有任何规则可以用来防止这种删除。

如何让 Proguard 保留module-info.class文件?

java proguard gradle java-platform-module-system

7
推荐指数
1
解决办法
2508
查看次数