eclipse ResolutionException: модули A и B экспортируют пакет P в модуль C

Я пытаюсь перенести свой весенний проект java8 на java11. Теперь я получаю следующее исключение, когда пытаюсь запустить его из eclipse:

Error occurred during initialization of boot layer
java.lang.module.ResolutionException: Modules java.activation and jakarta.activation export package javax.activation to module spring.boot.starter.web

В разделе Библиотеки, на которые ссылаются, я нашел только jakarta.activation-api-1.2.2.jar, который экспортирует пакет javax.activation. Другой модуль java.activation понятия не имею, откуда он взялся. Судя по названию, он должен быть внутри JavaSE-11/JDK? Я проверил запись Системная библиотека JRE, но не вижу там этого пакета.

Теперь любопытно, что с Gradle 6.5 я могу запустить проект, используя gradlew bootRun, и он выполняется хорошо. Однако в eclipse происходит сбой с ошибкой.

Итак, в eclipse я просто попытался удалить Jakarta.activation, щелкнув правой кнопкой мыши удалить из пути сборки. Попытка импортировать что-либо из javax.activation дает мне, что импорт не может быть разрешен, пока все в порядке. Однако запуск по-прежнему жалуется на вышеупомянутое ResolutionException.

Итак, чтобы решить проблему:

  • Где другой исходный код, который экспортирует пакет javax.activation? И как мне это найти?
  • Как я могу предотвратить затмение от этих двух модулей во время выполнения?
  • Могу ли я исключить модуль в gradle, чтобы проект работал после запуска gradlew eclipse, как всегда?

Спасибо за вашу помощь! Я потратил часы на поиск и пока не нашел ничего полезного.

build.gradle выглядит следующим образом:


plugins {
    id 'org.springframework.boot' version '2.2.5.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
    id 'eclipse'
}

group = 'example'
version = '0.3.0'
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

repositories {
    mavenCentral()
}

configurations.all {
    // fix multiple slf4j dependencies are present
    exclude group: 'org.slf4j', module: 'slf4j-log4j12'
    //TODO: 1st approach to fix ResolutionException
    //exclude group: 'jakarta.activation', module: 'jakarta.activation-api'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:2.3.1.RELEASE'
    implementation ('org.springframework.boot:spring-boot-starter-web:2.3.1.RELEASE') {
        //TODO: 2nd approach to fix ResolutionException
        exclude group: 'jakarta.activation', module: 'jakarta.activation-api'
    }
    implementation 'org.springframework.boot:spring-boot-starter-security:2.3.1.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.3.1.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter-actuator:2.3.1.RELEASE'
    implementation 'mysql:mysql-connector-java:5.1.46'
    implementation 'com.querydsl:querydsl-jpa:4.1.4'
    implementation 'com.querydsl:querydsl-apt:4.1.4:jpa'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'org.flywaydb:flyway-core:5.2.4'
    compileOnly 'org.springframework.boot:spring-boot-devtools:2.3.1.RELEASE'

    // https://mvnrepository.com/artifact/org.apache.odftoolkit/simple-odf
    implementation 'org.apache.odftoolkit:simple-odf:0.8.2-incubating'
    // https://mvnrepository.com/artifact/org.apache.commons/commons-text
    implementation 'org.apache.commons:commons-text:1.1'
    // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
    implementation 'org.apache.commons:commons-lang3:3.7'
    // https://mvnrepository.com/artifact/org.apache.commons/commons-csv
    implementation 'org.apache.commons:commons-csv:1.5'
    // https://mvnrepository.com/artifact/org.apache.commons/commons-collections4/4.3
    implementation 'org.apache.commons:commons-collections4:4.3'

    implementation 'javax.validation:validation-api:2.0.0.Final'
    // Dependencies that are no longer in java11
    // implementation 'javax.xml.bind:jaxb-api:2.3.0'
    // implementation 'com.sun.xml.bind:jaxb-core:2.3.0'
    // implementation 'com.sun.xml.bind:jaxb-impl:2.3.0'

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
    testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.5.2'

}

eclipse {
    classpath {
        downloadJavadoc = true
        downloadSources = true
    }
}

Другие ссылки, которые я нашел, но пока мне не помогли:


person judos    schedule 24.06.2020    source источник


Ответы (1)


Хорошо, я нашел часть ответа, пытаясь создать пример для воспроизведения проблемы.

Сначала я попытался очистить проект, чтобы убедиться, что в eclipse не кэшируется ничего плохого:

gradlew clean eclipse

Тем не менее проблема возникла.

Теперь я сделал все возможное и удалил все файлы сборки, .project, .classpath и перезапустил gradlew eclipse, и при добавлении новой конфигурации запуска проект теперь запускается нормально. Так что наверное виноват кеш запуска-конфигурации.

Может быть, это или перекрестные ссылки на другие сообщения о той же проблеме все еще кому-то помогают.

person judos    schedule 25.06.2020