Пакет ошибок не существует в Intellij, но работает в Spring Tool Suite STS

Хорошо, это сводит меня с ума... Я работаю над проектом Maven, и у меня есть сторонние JAR-зависимости, которые дают мне ошибки компиляции в IntelliJ, но не в STS.

Моя упрощенная структура проекта выглядит так:

FERPAPortlet
-src
--main
---java
----edu.sandiego.parent
-----FERPAPortlet
---resources
---webapp
----META-INF
----WEB-INF
-----jsp
-----lib <----- 3rd Party JARS are here
-----liferay-display.xml
-----liferay-plugin-package.xml
-----liferay-portlet.xml
-----portlet.xml
-----web.xml
--test
-pom.xml

В SpringSource Tool Suite, если я запускаю compile/package, все работает нормально! На самом деле, если я сначала запущу его в STS, а затем снова открою с помощью IntelliJ, проблема будет решена. Тем не менее, я предпочитаю IntelliJ STS...

Образец ошибки, который я получаю, будет примерно таким, когда я запускаю компиляцию maven:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] C:\Users\rico.r-10\Documents\GitHub\github.sandiego.edu\FERPAPortlet\src\main\java\edu\sandiego\parent\FERPAPortlet.java:[3,35] error: package com.sghe.luminis.core.spring does not exist

Однако, когда я перехожу к этой строке, IntelliJ не выделяет ее красным как ошибку, и я действительно могу нажать Ctrl+щелчок, и IntelliJ перейдет к библиотеке.

Я уже добавил библиотеки через «Структура проекта» > «Настройки проекта» > «Модули» > «MyModule» > вкладка «Зависимости».

Что делает STS, чего мне не хватает в IntelliJ?

РЕДАКТИРОВАТЬ: Получилось! Это то, что я сделал. Я удалил папку lib со сторонними банками. Затем я вручную добавил эти файлы Jar через командную строку, например:

mvn install:install-file "-Dfile=C:\luminis5libs\luminis-dal.jar" "-DgroupId=com.sghe.luminis" "-DartifactId=luminis-dal" "-Dversion=1.6.0" "-Dpackaging=jar"

Наконец, я изменил POM, чтобы включить эти зависимости, например:

<dependency>
            <groupId>com.sghe.luminis</groupId>
            <artifactId>luminis-dal</artifactId>
            <version>1.6.0</version>
        </dependency>

person RommelTJ    schedule 30.04.2014    source источник
comment
У вас не должно быть каталога lib. С maven все jar-файлы поступают из вашего локального репозитория и копируются в каталог lib в целевом (сборочном) каталоге. Проверьте свои зависимости maven и удалите lib и все, что под ним. Ваши ошибки связаны с тем, что intellij не видит банки по указанному вами пути. STS основан на eclipse, который позволяет вам избавиться от любого дрянного старого процесса, который вы хотите - Intellij более профессионален и в проектах maven требует переносимых проектов.   -  person Software Engineer    schedule 30.04.2014
comment
@EngineerDollery, спасибо! Я попробую. Я преувеличиваю вашу помощь, но не могли бы вы указать мне документы или ссылки, определяющие хорошие процессы? Мне придется поспорить с моим коллегой о лучших практиках...   -  person RommelTJ    schedule 30.04.2014
comment
В этом случае практика, о которой я упоминал, заключается в предоставлении полного списка ваших зависимостей jars/wars, чтобы кто-то, развертывающий ваше приложение, мог принять решение о том, как удовлетворить эти зависимости. Например, если одна из библиотек в вашем каталоге web-inf/lib была огромной, и ваш клиент хотел развернуть множество веб-приложений, использующих ее, он может выбрать, чтобы веб-контейнер предоставлял эту библиотеку, чтобы оставалось только одна его копия. Если они не знают, что вы его используете, они не могут его предоставить. Хуже, если они не знают, что вы его используете, и предоставляют свои, немного отличающиеся   -  person Software Engineer    schedule 01.05.2014
comment
[продолжение] немного другая версия, тогда вы можете столкнуться с небольшими ошибками в своем приложении.   -  person Software Engineer    schedule 01.05.2014
comment
Кроме того, у нас, как правило, есть наборы веб-приложений, а не одно, и все они, как правило, зависят от одних и тех же библиотек. Если все они указаны в главном pom, то относительно просто обновить все веб-приложения для одновременного использования новой версии библиотеки. Иногда это очень желательно, иногда менее, но maven дает нам возможность. Встраивание библиотек в проект сильно ограничивает наши возможности в этом. Это даже ограничивает нашу способность знать, что веб-приложение даже использует определенную версию библиотеки.   -  person Software Engineer    schedule 01.05.2014
comment
Все это задокументировано на веб-сайте maven и в соответствующей книге maven sonatype (бесплатно): sonatype.com/resources/books/maven-the-complete-reference   -  person Software Engineer    schedule 01.05.2014
comment
@EngineerDollery Успех! Просто хотел сказать большое спасибо за вашу помощь. Я не только избавился от ошибки, но и пакет увеличился с ~ 9 МБ до ~ 6 МБ после того, как я просмотрел все зависимости и вручную проверил их в POM. Я многому научился в процессе.   -  person RommelTJ    schedule 01.05.2014
comment
@EngineerDollery Как мне отметить вас как правильный ответ? Я собираюсь отредактировать свой пост с тем, что я сделал, и я хочу отдать вам должное за вашу помощь.   -  person RommelTJ    schedule 01.05.2014
comment
Пожалуйста. Я поместил свой ответ в качестве ответа, вы можете поставить галочку и проголосовать за него, если хотите.   -  person Software Engineer    schedule 01.05.2014


Ответы (2)


У вас не должно быть каталога lib. С maven все jar-файлы поступают из вашего локального репозитория и копируются в каталог lib в целевом (сборочном) каталоге. Проверьте свои зависимости maven и удалите lib и все, что под ним. Ваши ошибки связаны с тем, что intellij не видит банки по указанному вами пути.

person Software Engineer    schedule 01.05.2014

Нажмите «Проекты Maven» на правой границе intellij, после чего нажмите «Повторно импортировать все проекты Maven» (синяя круглая стрелка).

person Chaya    schedule 11.12.2014