Невозможно скомпилировать с maven при импорте локального проекта в качестве зависимости - PullRequest
2 голосов
/ 30 января 2020

Я создаю общую библиотеку, которая будет использоваться в нескольких приложениях Spring. Я извлек общие классы, которыми я хочу поделиться между этими приложениями, в новое приложение Spring с именем «Common». Я использовал mvn install в этом приложении, чтобы поместить его в мой локальный репозиторий Maven. В моем основном проекте я добавил зависимость maven с той же версией в pom. xml.

Теперь, если я попытаюсь запустить mvn compile на моем Основной проект, я получил эту ошибку:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project recruitment: Compilation failure: Compilation failure:
[ERROR] /D:/[...]/application/src/main/java/com/example/application/service/Service.java:[8,37] package com.example.common.exception does not exist

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

Если я пытаюсь запустить приложение Spring с основного (с использованием Spring Boot), он запускается отлично и ведет себя как раньше.

Я использую IntelliJ на Windows, maven поставляется с IntelliJ с установкой по умолчанию. Если я проверю свой локальный репозиторий Maven, я найду банку с общей библиотекой. IntelliJ не показывает никаких ошибок при импорте, он распознает мою библиотеку.

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

Я использовал mvn compile -X, чтобы получить больше информации, и забавно то, что maven использует общий jar библиотеки из локального репозитория:

[INFO] Changes detected - recompiling the module!
[DEBUG] Classpath:
[DEBUG]  D:\[...]\application\target\classes
[DEBUG]  C:\[...]\.m2\repository\com\example\common\0.0.1\common-0.0.1.jar
  • Есть ли у вас какие-либо идеи, почему я не могу скомпилировать свой проект с помощью maven, когда я могу запустить его как приложение Spring?

Вот моя зависимость в моем pom. xml:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>common</artifactId>
    <version>0.0.1</version>
    <scope>compile</scope>
</dependency>

И определение общей библиотеки:

<groupId>com.example</groupId>
<artifactId>common</artifactId>
<version>0.0.1</version>
<name>common</name>
<description>Common project with generic technical modules</description>

1 Ответ

0 голосов
/ 30 января 2020

Хорошо, это стыдно ... Я только что нашел решение! Два дня я искал решение этой сложной ситуации, и я просто нашел, чего не хватало, а точнее, того, что было слишком много.

Этот плохой мальчик:

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

Пружинная загрузка Плагин maven позволяет запускать загрузочное приложение Spring из maven, и похоже, что он влияет на то, как создается общая библиотека jar или как она импортируется.

Я не совсем понимаю, почему именно влияет на мой импорт, но я удалил плагин выше в моей общей библиотеке pom. xml, я переустановил в своем локальном репозитории, и я снова запускаю mvn install в моем основном приложении ... И теперь он работает !

Я думаю, что для запуска через Spring boot использовалось немного Spring boot magi c, чтобы заставить его работать, чего не хватает maven way.

Если кто-то понимает это лучше и может объяснить Это было бы здорово, и я думаю, что это принятый ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...