Я создал родительский проект, поэтому у меня могут быть все общие зависимости, 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>
Определяйте общие классы не в родительском проекте, а в другом дочернем проекте, который вы определяете как обычную зависимость.
Привет, @M.Deinum. Итак, вы имеете в виду, что у меня есть что-то вроде: hawk-parent POM - утилиты POM <modules> <utilities> </modules> Что это отличает?
Ваш родитель может быть pom, а не jar с классами. Даже если бы это было возможно, вам нужно было бы объявить его как зависимость, а не только родитель. Ваш проект будет наследовать зависимости, информацию о сборке и т. д. только от родительских НЕ классов, определенных там, если он также не определен как зависимость.
Здравствуйте, @M.Deinum. Я обновил пост с новой структурой, но у меня все еще не получилось. Я не могу его построить, потому что отсутствуют основные классы. Должен ли я действительно включать их? Для меня это не имеет особого смысла. Ваше здоровье!
Основной проект должен быть зависимым от других проектов, которым требуются эти классы. Кроме того, это, вероятно, не должно быть проектом весенней загрузки, поскольку вы не хотите запускать его с помощью Spring Boot (вам нужны зависимости, а не упаковка!).




Я думаю, что здесь есть недоразумение по 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
Привет, я обновил пост с изменениями, которые я сделал по вашему совету. Проблема в том, что я не могу сейчас это построить, так как получаю сообщение «Невозможно найти основной класс». Мне действительно нужно добавлять основные классы в эти пакеты? Для меня это не имеет особого смысла. Ваше здоровье!
Во-первых, вы используете 2 разных родителя, я просто поделился ссылкой, чтобы не использовать весеннюю загрузку в качестве родителя, во-вторых, в проекте весенней загрузки должен быть класс с @SpringBoot
Вот ссылка для основного класса, у вас должен быть docs.spring.io/spring-boot/docs/current/reference/html/…
Здравствуйте, наконец-то я смог это сделать. Спасибо за вашу помощь. Мне просто нужно понять, почему я сломал плагин Spring Boot ("mvn spring-boot: run"), так как я импортирую его в своих "детях", но теперь приложение не запускается, а только собирается. Я буду продолжать смотреть на это. Ваше здоровье
Хорошо, исправлено! Я просто забыл удалить плагин из родителя, поэтому он почему-то не переопределяется в дочерних. Я просто удалил из родителя, так как он мне там никогда не понадобится, и теперь работает нормально. Спасибо!
Правильный родитель будет только контейнером для проектов
так что вы упаковали родительский проект в файл jar и добавили его в библиотеки путей к классам?