#java #spring-boot #maven #microservices
Вопрос:
Я пытаюсь создать java — проект микрослужб с помощью springboot. Моя идея состоит в том, чтобы создать отдельный проект maven, который будет содержать все классы DTOs и utils, общие для всех микросервисов. (Я знаю, что многие будут критиковать этот выбор, но именно так я решил поступить в данный момент).
Поэтому я создал проект lib и базовый проект. Работая над базовым проектом, моя среда IDE может правильно считывать классы, содержащиеся в модуле lib. На этапе компиляции я выполняю чистую установку проекта lib, а затем чистую установку базового проекта: на этом этапе я получаю следующую ошибку:
[ERROR] symbol: class Test [ERROR] location: interface slt.mytest.base.services.TestsService [ERROR] /C:/workspace/mytest/slt-base-be/src/main/java/slt/mytest/base/services/impl/TestsServiceImpl.java:[8,47] package slt.mytest.libs.entities.base does not exist [ERROR] /C:/workspace/mytest/slt-base-be/src/main/java/slt/mytest/base/services/impl/TestsServiceImpl.java:[9,45] package slt.mytest.libs.models.base does not exist [ERROR] /C:/workspace/mytest/slt-base-be/src/main/java/slt/mytest/base/repositories/TestsRepository.java:[5,47] package slt.mytest.libs.entities.base does not exist [ERROR] /C:/workspace/mytest/slt-base-be/src/main/java/slt/mytest/base/repositories/TestsRepository.java:[10,60] cannot find symbol [ERROR] symbol: class TestEntity
Как я могу сделать lib базовым проектом видимым? Есть ли способ автоматически начинать компиляцию библиотек при каждой базовой установке?
в общем… как бы вы справились с этим делом?
Спасибо
проект lib pom.xml
lt;?xml version="1.0" encoding="UTF-8"?gt; lt;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 https://maven.apache.org/xsd/maven-4.0.0.xsd"gt; lt;modelVersiongt;4.0.0lt;/modelVersiongt; lt;parentgt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-parentlt;/artifactIdgt; lt;versiongt;2.6.0lt;/versiongt; lt;relativePath/gt; lt;!-- lookup parent from repository --gt; lt;/parentgt; lt;groupIdgt;slt.mytestlt;/groupIdgt; lt;artifactIdgt;libslt;/artifactIdgt; lt;versiongt;0.0.1-SNAPSHOTlt;/versiongt; lt;namegt;libslt;/namegt; lt;descriptiongt;Libs Module of mytestlt;/descriptiongt; lt;propertiesgt; lt;java.versiongt;1.8lt;/java.versiongt; lt;org.mapstruct.versiongt;1.2.0.Finallt;/org.mapstruct.versiongt; lt;org.projectlombok.versiongt;1.18.22lt;/org.projectlombok.versiongt; lt;/propertiesgt; lt;dependenciesgt; lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-data-jpalt;/artifactIdgt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-weblt;/artifactIdgt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-devtoolslt;/artifactIdgt; lt;scopegt;runtimelt;/scopegt; lt;optionalgt;truelt;/optionalgt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-testlt;/artifactIdgt; lt;scopegt;testlt;/scopegt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.apache.commonslt;/groupIdgt; lt;artifactIdgt;commons-lang3lt;/artifactIdgt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.projectlomboklt;/groupIdgt; lt;artifactIdgt;lomboklt;/artifactIdgt; lt;optionalgt;truelt;/optionalgt; lt;versiongt;${org.projectlombok.version}lt;/versiongt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.mapstructlt;/groupIdgt; lt;artifactIdgt;mapstruct-jdk8lt;/artifactIdgt; lt;versiongt;${org.mapstruct.version}lt;/versiongt; lt;/dependencygt; lt;/dependenciesgt; lt;buildgt; lt;pluginsgt; lt;plugingt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-maven-pluginlt;/artifactIdgt; lt;configurationgt; lt;excludesgt; lt;excludegt; lt;groupIdgt;org.projectlomboklt;/groupIdgt; lt;artifactIdgt;lomboklt;/artifactIdgt; lt;/excludegt; lt;/excludesgt; lt;/configurationgt; lt;/plugingt; lt;/pluginsgt; lt;/buildgt; lt;/projectgt;
базовый проект pom.xml
lt;?xml version="1.0" encoding="UTF-8"?gt; lt;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 https://maven.apache.org/xsd/maven-4.0.0.xsd"gt; lt;modelVersiongt;4.0.0lt;/modelVersiongt; lt;parentgt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-parentlt;/artifactIdgt; lt;versiongt;2.6.0lt;/versiongt; lt;relativePath/gt; lt;!-- lookup parent from repository --gt; lt;/parentgt; lt;groupIdgt;slt.mytestlt;/groupIdgt; lt;artifactIdgt;baselt;/artifactIdgt; lt;versiongt;0.0.1-SNAPSHOTlt;/versiongt; lt;namegt;baselt;/namegt; lt;descriptiongt;Base Module of mytestlt;/descriptiongt; lt;propertiesgt; lt;java.versiongt;1.8lt;/java.versiongt; lt;org.mapstruct.versiongt;1.2.0.Finallt;/org.mapstruct.versiongt; lt;org.projectlombok.versiongt;1.18.22lt;/org.projectlombok.versiongt; lt;/propertiesgt; lt;dependenciesgt; lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-data-jpalt;/artifactIdgt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-weblt;/artifactIdgt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-devtoolslt;/artifactIdgt; lt;scopegt;runtimelt;/scopegt; lt;optionalgt;truelt;/optionalgt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-testlt;/artifactIdgt; lt;scopegt;testlt;/scopegt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.projectlomboklt;/groupIdgt; lt;artifactIdgt;lomboklt;/artifactIdgt; lt;optionalgt;truelt;/optionalgt; lt;versiongt;${org.projectlombok.version}lt;/versiongt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.mapstructlt;/groupIdgt; lt;artifactIdgt;mapstruct-jdk8lt;/artifactIdgt; lt;versiongt;${org.mapstruct.version}lt;/versiongt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;slt.mytestlt;/groupIdgt; lt;artifactIdgt;libslt;/artifactIdgt; lt;versiongt;0.0.1-SNAPSHOTlt;/versiongt; lt;/dependencygt; lt;/dependenciesgt; lt;buildgt; lt;pluginsgt; lt;plugingt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-maven-pluginlt;/artifactIdgt; lt;configurationgt; lt;excludesgt; lt;excludegt; lt;groupIdgt;org.projectlomboklt;/groupIdgt; lt;artifactIdgt;lomboklt;/artifactIdgt; lt;/excludegt; lt;/excludesgt; lt;/configurationgt; lt;/plugingt; lt;/pluginsgt; lt;/buildgt; lt;/projectgt;
Комментарии:
1. Если вы хотите создать lib, что является хорошей идеей, не делайте его упакованным с помощью плагина spring-boot-maven, потому что он создаст банку, которую не смогут использовать другие…
2. Создайте отдельный проект maven и добавьте в него dto и другие утилиты. Добавьте spring boot starter в качестве зависимости, но не в качестве родителя в свою библиотеку. Импортируйте и в своем клиенте создайте класс конфигурации, в который вы будете импортировать пакеты spring boot, которые хотите включить. Взгляните на @import в весенней загрузке. Библиотека будет добавлена в виде банки, поэтому убедитесь, что она компилируется независимо
3. Это стандартная практика, и @khmarbaise прав
Ответ №1:
TL;DR: Возможно, вам потребуется установить свой lib
проект в локальное хранилище ( .m2/repository
). Вы можете сделать это, выполнив mvn install
(или используя функции графического интерфейса вашей среды разработки) в lib
проекте. Если base
все еще не компилируется, выполните mvn dependency:resolve
on base
.
Ваша среда IDE может идентифицировать зависимость, и именно поэтому в редакторе кода нет ошибок, но Maven не будет этого делать, если он не сможет устранить зависимость. Он попытается разрешить из вашего локального репозитория и удаленных репозиториев (которые в вашем случае, поскольку вы не определили их в своем POM, являются просто Maven Central).
Комментарии:
1. Привет, Оливер, я уже выполняю чистую установку mvn в проекте libs перед компиляцией базового проекта. К сожалению, это не сработало
2. Вы проверили свое локальное хранилище, чтобы убедиться, что банки были размещены?
3. Да, я подтверждаю, что мой libs-0.0.1-SNAPSHOT.jar находится в моем каталоге .m2
4. Попробуйте сделать это без бита-SNAPSHOT, как в библиотеке, так и в клиентском проекте