Пакет com.google.inject доступен из нескольких модулей - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь обновить приложение до Java 11.0.2, с Java 8. Так что это мои самые первые шаги с модулями Jigsaw!

Мое приложение использует Guice , иAssistedinject и Throwingproviders.

Вот мои текущие module-info.java:

`

module com.example.mymodule {

    requires com.google.guice;
    requires com.google.guice.extensions.assistedinject;
    requires com.google.guice.extensions.throwingproviders;

    //...
}


`

Приложение основано на Maven, и когда я запускаюmvn package Я не получаю ошибки.Но в Eclipse (2018-12) у меня есть эта ошибка «Пакет com.google.inject доступен из более чем одного модуля»:

error

enter image description here

Я попытался прокомментировать каждый из необходимых модулей в module-info.java, но мне явно нужны три из них.

Есть ли что-то, что я могу сделатьубрать эту ошибку?Или это ошибка Eclipse?

Вот мой 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>

    <groupId>com.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.7</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>
        <dependency>
            <groupId>commons-validator</groupId>
            <artifactId>commons-validator</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.11.3</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.26</version>
        </dependency>

        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>4.2.2</version>
        </dependency>
        <dependency>
            <groupId>com.google.inject.extensions</groupId>
            <artifactId>guice-throwingproviders</artifactId>
            <version>4.2.2</version>
        </dependency>
        <dependency>
            <groupId>com.google.inject.extensions</groupId>
            <artifactId>guice-assistedinject</artifactId>
            <version>4.2.2</version>
        </dependency>

    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration>
                        <source>11</source>
                        <target>11</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
        </plugins>
    </build>
</project>

Вот минимальный проект для воспроизведения моей ошибки.

А вот видео выпуска (для ясности в 1080P!).

Ответы [ 4 ]

0 голосов
/ 16 мая 2019

Лучший способ справиться с такой проблемой - просто перейти к иерархии зависимостей в pom.xml, где вы можете найти дубликат jar, иногда бывает сложно найти дубликат jar, так как сам jar имеет зависимости pom и «Иерархия зависимостей»поможет вам разобраться с проблемой maven `enter image description here

0 голосов
/ 08 марта 2019

Eclipse использует свой собственный компилятор, который в соответствии со спецификациями еще строже, чем javac.Вам требуются разные Модули / Банки в вашей информации о модуле, которые все используют пакет com.google.inject.Это какая-то ситуация с разделенным пакетом, которая не допускается в спецификации JPMS.AFAIK javac выдает ошибку только в том случае, если в одних и тех же пакетах с разными модулями есть фактические классы, но компилятор eclipse здесь еще более требователен.

Существуют некоторые решения для решения проблем с разделенными пакетами.Если вы не найдете более новую версию библиотек, в которых проблема решена (что, к сожалению, не очень вероятно для большинства зависимостей сегодня), вы можете объединить модули в один пользовательский модуль, но это, конечно, не идеальное решение.

Для получения дополнительной информации об этой проблеме см. Также Eclipse не может найти связанные с XML классы после переключения пути сборки на JDK 10 и https://bugs.openjdk.java.net/browse/JDK-8215739

0 голосов
/ 08 марта 2019

Ваш тестовый проект уже работает в RC2 версии 4.11 (который будет выпущен 20 марта 2019 г.)

Вы можете скачать кандидат на релиз по адресу https://download.eclipse.org/eclipse/downloads/drops4/S-4.11RC2-201903070500/

0 голосов
/ 08 марта 2019

Я могу воспроизвести ошибку на моей машине (та же версия Eclipse, OpenJDK 11), отлично работает в Apache NetBeans IDE 10.0.

Кажется, что это ошибка в Eclipse, вы должны подать ее здесь.У вас уже есть минимальный проект, который воспроизводит ошибку, которая очень помогает.

...