SPRING BOOT - Как получить доступ к классам из Super POM

Я создал родительский проект, поэтому у меня могут быть все общие зависимости, DTO, сервисы, помощники и т. д., которые я буду использовать во всех своих общих проектах.

Этот родительский проект импортируется как POM:

 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.whitehawk</groupId>
<artifactId>hawk-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hawk-parent</name>
<packaging>pom</packaging>
<description>Parent configuration for microservices</description>

В других проектах у меня есть:

 <parent>
    <groupId>com.whitehawk</groupId>
    <artifactId>hawk-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<artifactId>customers</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>customers</name>
<description>Customers microservice</description>

Зависимости были импортированы правильно, но я не могу получить доступ, например, к моему перечислению Role, даже если оно имеет модификатор открытого доступа.

public enum Role {
    CUSTOMER,
    ADMIN,
    SUPERADMIN
}

Или моя @UserRole аннотация:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface UserRole {
    Role[] value();
}

Любая идея о том, что я делаю неправильно?

Ваше здоровье!

Обновлять:

Следуя предложениям, я добавил новый модуль: hawk-core

Его POM выглядит так:

    <?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>
    <parent>
        <groupId>com.whitehawk</groupId>
        <artifactId>hawk-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/>
    </parent>
    <artifactId>hawk-core</artifactId>
    <name>hawk-core</name>
    <description>Core libraries for microservices</description>
    <packaging>jar</packaging>
</project>

И включил это в родителя:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.whitehawk</groupId>
<artifactId>hawk-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hawk-parent</name>
<packaging>pom</packaging>
<description>Parent configuration for microservices</description>

<modules>
    <module>hawk-core</module>
</modules>

так что вы упаковали родительский проект в файл jar и добавили его в библиотеки путей к классам?

Deadpool 15.07.2019 13:36

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

M. Deinum 15.07.2019 13:37

Привет, @M.Deinum. Итак, вы имеете в виду, что у меня есть что-то вроде: hawk-parent POM - утилиты POM <modules> <utilities> </modules> Что это отличает?

Griffith_WhiteHawk 15.07.2019 13:42

Ваш родитель может быть pom, а не jar с классами. Даже если бы это было возможно, вам нужно было бы объявить его как зависимость, а не только родитель. Ваш проект будет наследовать зависимости, информацию о сборке и т. д. только от родительских НЕ классов, определенных там, если он также не определен как зависимость.

M. Deinum 15.07.2019 13:45

Здравствуйте, @M.Deinum. Я обновил пост с новой структурой, но у меня все еще не получилось. Я не могу его построить, потому что отсутствуют основные классы. Должен ли я действительно включать их? Для меня это не имеет особого смысла. Ваше здоровье!

Griffith_WhiteHawk 15.07.2019 14:55

Основной проект должен быть зависимым от других проектов, которым требуются эти классы. Кроме того, это, вероятно, не должно быть проектом весенней загрузки, поскольку вы не хотите запускать его с помощью Spring Boot (вам нужны зависимости, а не упаковка!).

M. Deinum 15.07.2019 14:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
522
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что здесь есть недоразумение по 2 вещам:

1- упаковка: это поле используется как POM, если у вас нет классов для упаковки в файл jar/war, это используется, например, для родительского проекта, который не используется в качестве зависимостей или не упакован для развертывания.

2- зависимости: эти приличия используются для добавления пакетов lib, необходимых для вашего проекта, из примера, который у вас есть здесь, вы не включаете это, поэтому классы не будут видны в вашем проекте.

предложите иметь родительский проект, который не имеет каких-либо классов и имеет 2 модуля: один из ваших основных классов должен быть jar как lib, а второй - как весенняя загрузка, вы можете ссылаться на https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-build-systems.html#using-boot-maven-без-родителя и иметь первый модуль как зависимость во втором модуле, который будет подобно:

parent
 |
 |-core
    |-pomt.xml
 |-app
    |-pomt.xml
 |-pom.xml

Привет, я обновил пост с изменениями, которые я сделал по вашему совету. Проблема в том, что я не могу сейчас это построить, так как получаю сообщение «Невозможно найти основной класс». Мне действительно нужно добавлять основные классы в эти пакеты? Для меня это не имеет особого смысла. Ваше здоровье!

Griffith_WhiteHawk 15.07.2019 14:52

Во-первых, вы используете 2 разных родителя, я просто поделился ссылкой, чтобы не использовать весеннюю загрузку в качестве родителя, во-вторых, в проекте весенней загрузки должен быть класс с @SpringBoot

Bassem Reda Zohdy 15.07.2019 14:58

Вот ссылка для основного класса, у вас должен быть docs.spring.io/spring-boot/docs/current/reference/html/…

Bassem Reda Zohdy 15.07.2019 15:02

Здравствуйте, наконец-то я смог это сделать. Спасибо за вашу помощь. Мне просто нужно понять, почему я сломал плагин Spring Boot ("mvn spring-boot: run"), так как я импортирую его в своих "детях", но теперь приложение не запускается, а только собирается. Я буду продолжать смотреть на это. Ваше здоровье

Griffith_WhiteHawk 16.07.2019 12:15

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

Griffith_WhiteHawk 16.07.2019 13:02

Правильный родитель будет только контейнером для проектов

Bassem Reda Zohdy 17.07.2019 12:44

Другие вопросы по теме