Corriente de depuración rastro en código funcional lanza IncompatibleClassChangeError

progonkpa:

Cuando trataba de depurar la corriente en el código de abajo a través de la corriente de seguimiento en IntelliJ, el depurador no puede evaluar el foreach porque el error a continuación se tira. No tengo ni idea de qué se trata, el código por sí mismo funciona muy bien.

Totalmente actualizado IntelliJ edición de la comunidad, JUnit 5, Primavera de arranque, Maven, Java 11.

El error que ocurre durante Corriente único rastro de depuración:

java.lang.IncompatibleClassChangeError: Tipo com.progonkpa.file.FileService $ GeneratedEvaluationClass $ 5 no es un miembro de nido de com.progonkpa.file.FileService: tipos están en diferentes paquetes

El código que contiene la secuencia:

public class FileService {

    public void createDirs(File parentDir, String[] fileNames) {
        Stream.of(fileNames)
                .map(fileName -> new File(parentDir, fileName))
                .forEach(file -> {
                    if (file.mkdirs())
                        System.out.println("Created file: " + file);
                    else
                        System.err.println("Failed to create file: " + file);
                });
    }
}

La prueba que invoca el método anterior:

public class FileServiceTest {

    private FileService fileService = new FileService();

    @Test
    public void generateDirs_createsList() {
        File tmpDir = new File("/tmp");
        String[] dirNamesList = {"dir1", "dir2"};
        File createdDir1 = new File(tmpDir, dirNamesList[0]);
        File createdDir2 = new File(tmpDir, dirNamesList[1]);

        fileService.createDirs(tmpDir, dirNamesList);

        assertTrue(createdDir1.exists());
        assertTrue(createdDir2.exists());
        assertTrue(createdDir1.delete());
        assertTrue(createdDir2.delete());
        assertTrue(tmpDir.delete());
    }
}

pom.xml

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.unknown.somefunction</groupId>
    <artifactId>joske</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-test</artifactId>-->
            <!--<scope>test</scope>-->
        <!--</dependency>-->
        <!--Data processing-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-csv</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>org.simplejavamail</groupId>
            <artifactId>simple-java-mail</artifactId>
            <version>5.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.simplejavamail</groupId>
            <artifactId>outlook-message-parser</artifactId>
            <version>1.1.17</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>com.github.vatbub</groupId>
            <artifactId>mslinks</artifactId>
            <version>1.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.3.2</version>
            <scope>test</scope>
        </dependency>
        <!--Testing-->

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

Traza corriente en IntelliJ Community Edition

LppEdd:

The Stream debugger apparently generates bytecode and defines classes on the fly to evaluate expressions. Relevant source files are

CompilingEvaluator.java
CompilingEvaluatorImpl.java

And there is a currently opened issue on YouTrack, with the exact same exception

Type some.Type$GeneratedEvaluationClass$1 is not a nest member of some.Type: types are in different packages

IDEA-204665

This manifests itself only on JDK versions greater than 10, and unfortunately you have

<java.version>11</java.version>

As the Issue suggest, it happens because

JDK 11 has "Nest-based Access Control" feature
(https://cr.openjdk.java.net/~dlsmith/nestmates.html)

The JEP 181 says

Impact on Other Tools

Cualquier herramienta que opera en archivos de clase, o que genera o procesos bytecodes es potencialmente afectados por estos cambios. Como mínimo este tipo de herramientas deben tolerar la presencia de los nuevos atributos de archivo de clase y permitir el cambio de las reglas de código de bytes. Por ejemplo:

La herramienta javap archivo de clase de inspección, la aplicación Pack200, y el marco de la manipulación ASM código de bytes, que también se utiliza internamente en el JDK.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=233679&siteId=1
Recomendado
Clasificación