Невозможно импортировать классы, IntelliJ показывает префикс BOOT-INF, и это, похоже, связано - PullRequest
0 голосов
/ 08 декабря 2018

Есть ли кто-нибудь с опытом, который скажет мне, почему я не могу импортировать какой-либо класс из зависимого проекта?Это с Java и Maven - я пытаюсь импортировать некоторые классы из проекта, который я мог бы либо собрать на своей машине в локальный репозиторий mvn, либо я могу загрузить его из внешнего репозитория mvn компании, уже упакованного jar.Я заметил при взгляде на IntelliJ на левой панели «проект» при просмотре «Внешние библиотеки» и при расширении рассматриваемой библиотеки, что есть префикс «BOOT-INF.classes» для всех классов под рассматриваемой флягой.Это также проект Springboot, если это помогает, хотя я могу импортировать все классы Springboot и все другие классы из внешнего репозитория просто отлично.

(внутри представления проекта IntelliJ на левой панели в разделе «Внешние библиотеки»)

Maven: org.springframework.boot: spring-boot-starter-test: 2.0.0.RELEASE

Maven: com.fasterxml.jackson.datatype: jackson-datatype-jdk8: 2.8.1

--- jackson-core-2.8.1.jar

------ com.faster.xml.jackson.core

------ com.faster.xml.jackson.core.async

........ (перечислены другие пакеты)

Maven: com.mycompany.my.project: component-two-1.0.0-SNAPSHOT

Maven: com.mycompany.my.project: component-three-1.0.0-SNAPSHOT

--- com.mycompany.my.project: component-1.0.0-20181201.jar

------ BOOT-INF.classes

------ BOOT-INF.classes .com.mycompany.project.my.package.one

--------- MyClassOne

--------- MyClassTwo

------ BOOT-INF.classes .com.mycompany.project.my.package.one

------ BOOT-INF.classes .com.mycompany.project.my.package.one.alpha

------ BOOT-INF.classes .com.mycompany.project.my.package.one.bravo

1 Ответ

0 голосов
/ 08 декабря 2018

Похоже, вы пытаетесь использовать приложение Spring Boot в качестве зависимости.Вообще говоря, это не рекомендуется, поскольку, как и файл war, приложение Spring Boot не предназначено для использования в качестве зависимости.

В документации Spring Boot сказано следующее:

Если ваше приложение содержит классы, которыми вы хотите поделиться с другими проектами, рекомендуется переместить этот код в отдельный модуль.Затем отдельный модуль может зависеть от вашего приложения и других проектов.

Если это не вариант, вам нужно будет сконфигурировать ваш проект для создания как jar приложения, так и того, который подходит дляиспользовать в качестве зависимости.Из того же раздела документации:

Если вы не можете перестроить свой код, как рекомендовано выше, плагины Spring Boot Maven и Gradle должны быть настроены для создания отдельного артефакта, который подходит для использования в качестве зависимости.Исполняемый архив нельзя использовать в качестве зависимости, поскольку исполняемый формат jar упаковывает классы приложений в BOOT-INF / classes.Это означает, что их нельзя найти, когда исполняемый файл jar используется в качестве зависимости.

Чтобы создать два артефакта, один из которых может использоваться как зависимость, а другой - исполняемый, необходимо указать классификатор.Этот классификатор применяется к имени исполняемого архива, оставляя архив по умолчанию для использования в качестве зависимости.

Вы используете Maven, поэтому соответствующая конфигурация будет выглядеть примерно так:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <classifier>exec</classifier>
            </configuration>
        </plugin>
    </plugins>
</build>

Теперь исполняемый толстый файл вашего приложения будет опубликован с классификатором exec.Обычный jar, который можно использовать в качестве зависимости, будет не классифицирован.

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