Java с Maven в IntelliJ IDEA: как правильно импортировать зависимость

Кажется, я не могу импортировать какие-либо из моих добавленных зависимостей. В следующем коде (pom.xml) мы видим зависимости JavaFX, которые работают, и зависимость MongoDB, которую я добавил сам, но она не работает.

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.jonathan.woollettlight</groupId>
    <artifactId>CS-235 A3</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>12.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>12.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>3.10.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.1</version>
                <configuration>
                    <mainClass>com.jonathan.woollettlight.App</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Операторы JavaFX import, которые работают:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;

Это не работает.

import org.mongodb.*;
import org.bson.*;
import com.mongodb.*;

С import org.bson.*; выдает ошибку: Package 'org.bson' is declared in module 'org.mongodb.bson', but module 'com.jonathan.woollettlight' does not read it. И import com.mongodb.*; отдавая Package 'com.mongodb' is declared in module 'org.mongodb.driver.sync.client', but module 'com.jonathan.woollettlight' does not read it

Моя файловая структура:

введите здесь описание изображения

Расширены внешние зависимости для MongoDB.

введите здесь описание изображения

Я пробовал другие зависимости и даже следил за этим видео (https://www.youtube.com/watch?v=NP6AnvZ0CTA), и это не сработало. Я не могу сделать какое-либо заявление import о зависимости, которую я добавил.

Я должен отметить, что проект изначально был создан с использованием архетипа Maven JavaFX. Чтобы добавить архетип, используйте идентификатор группы org.openjfx, идентификатор артефакта javafx-maven-archetypes и версию 0.0.1.

Я в недоумении, что делать здесь, любая помощь будет принята с благодарностью. Ссылка на проект, загруженный на гугл диск, если вам интересно/приятно (https://drive.google.com/file/d/1WKNg1G81dpOhrtO9W3OyRkL-rv10fbvO/view?usp=sharing)


person Jonathan Woollett-light    schedule 03.05.2019    source источник
comment
Что вы имеете в виду под MongoDB dependency which I added myself and don't work.? Как я вижу на вашем снимке экрана из IDE, зависимости mongodb правильно размещены под External Libraries?   -  person Piotr S    schedule 03.05.2019
comment
Каждое importstatement, которое я пытаюсь использовать с зависимостью MongoDB, не работает.   -  person Jonathan Woollett-light    schedule 03.05.2019
comment
Было бы хорошо обновить описание, чтобы показать, какие утверждения не работают, потому что теперь мы можем догадаться, что вы имеете в виду.   -  person Piotr S    schedule 03.05.2019
comment
@PiotrS Я добавил несколько примеров операторов import, которые не работают.   -  person Jonathan Woollett-light    schedule 03.05.2019
comment
Не могли бы вы расширить зависимости maven mongodb в каталоге внешних библиотек? Классы Java, похоже, находятся в пакете com.mongodb.* вместо org.mongodb.*.   -  person Maxime    schedule 03.05.2019
comment
Я хотел бы убедиться, что у вас установлена ​​последняя версия IntelliJ, поскольку Java 12 очень новая. Я бы сначала попробовал Java 11 и попытался заставить это работать.   -  person Peter Lawrey    schedule 03.05.2019
comment
@Maxime Добавил фотографию расширенных зависимостей и добавил немного о том, что import не работает с com.mongodb.*;   -  person Jonathan Woollett-light    schedule 03.05.2019
comment
@PeterLawrey Пытался использовать JDK11, к сожалению, ничего не изменилось.   -  person Jonathan Woollett-light    schedule 03.05.2019


Ответы (2)


Я только что скачал ваш проект и вижу, что module-info.java содержит только javafx.*.

requires javafx.controls;
requires javafx.fxml;

Попробуйте добавить org.mongodb.bson, который вы сможете импортировать, или вы можете удалить файл module-info.java для тестирования.

Я пробовал как удалить module-info.java для тестирования, так и добавить операторы requires, я смог добавить операторы импорта, такие как import org.bson.*;. Я также использую Intellij IDE.

модуль-info.java

module-info.java

App.java

App.java

person Sachin    schedule 03.05.2019

Прежде всего, убедитесь, что зависимость, которую вы добавили, действительно доступна для maven, даже без IDE: просто запустите что-то вроде: mvn package, чтобы увидеть, что maven загружает зависимость

Теперь, если проект был импортирован в идею путем открытия pom.xml, предполагается, что intelliJ создаст свои внутренние данные на основе информации, найденной в pom.xml.

Итак, может помочь следующее:

Maven -> «Повторно импортировать все проекты maven» — это запустит процесс синхронизации.

Настройки -> Сборка, выполнение, развертывание -> Инструменты сборки -> Maven: Домашний каталог Maven — intellij может быть настроен с использованием другого maven, чем вы думаете (имеет что-то в комплекте с ide). Ваш maven может быть предварительно настроен с некоторыми пользовательскими свойствами, прокси, учетными данными и т. д.)

Файл -> Закрыть проект, а затем снова откройте его, конечно, откройте pom.xml (только если два пункта выше не помогли). Это может исправить ситуацию, если по какой-то причине intelliJ уходил в проблемы синхронизации своих внутренних структур данных с данными из pom.xml, со мной пару раз случалось, поэтому упоминаю об этом.

person Mark Bramnik    schedule 03.05.2019
comment
Вот результат mvn package hastebin.com/ugagukudoz.cs. Ни одно из других предложенных решений, похоже, не имеет никакого влияния. - person Jonathan Woollett-light; 03.05.2019
comment
Я также добавил ссылку, чтобы кто-то мог скачать проект, если ему было так любопытно/приятно. - person Jonathan Woollett-light; 03.05.2019