#java #maven #kotlin #module #dependencies
Вопрос:
У меня есть проект maven, в котором есть основной модуль POM, например Main. Main содержит два pom-модуля: «core» и «app». «ядро» содержит jar-модуль «A», «приложение» содержит jar-модуль «B» У меня есть следующие классы:
- app.B.src.main.java.di.AModule.kt // модуль внедрения зависимостей
- app.B.src.main.java.domain.App.java // основное приложение
- core.A.src.main.java.domain.BModule.kt // другие инъекции
Когда я импортирую модуль.kt и BModule.kt в App.java , это выглядит как
import di.AModule;
import di.BModule;
Maven не может завершить этап установки и сообщает «Не удается найти символ», указывающий на модуль импорта, который семантически ближе к App.java
Что мне делать с pom-файлами или пакетами, чтобы решить эту проблему?
PS Также у меня проблема с тем, что maven не видит core.A.src.test.java.SomethingTest.kt на этапе тестирования
Комментарии:
1. Откуда берется
di.BModule
второй импорт? Вы упоминаете только adi.AModule
(1.) и adomain.BModule
(3.).2. Вы объявили
A
себя<dependency>
вB
качестве ПОМ?3. @GeroldBroser core.A.src.main.java.di.BModule.kt*
4. Является
app.B.src.main.java.di
ли и т.д. действительно вашей структурой пакета?
Ответ №1:
Ваши проекты (в соответствии с тем, что можно извлечь из вашего вопроса):
- Main
- core
- src/main/java
| - di
| - AModule.kt
- target
| - A.jar
- pom.xml ... <artifactId>A
- app
- src/main/java
| - domain
| - App.java
| - BModule.kt
- target
| - B.jar
- pom.xml ... <artifactId>B
Проекты A
и B
независимы друг от друга. Будучи одновременно a <module>
of Main
, вы можете создавать их за один раз (через сборку Main
).
Чтобы иметь возможность ссылаться AModule
на in App
, вы должны объявить его JAR A
как <dependency>
in’ B
s POM:
...
<artifactId>B</artifactId>
...
<dependencies>
<dependency>
<groupId>...</groupId>
<artifactId>A</artifactId>
<version>...</version>
</dependency>
...
<packaging>
Тип проектов, которые содержат код и должны создавать артефакт, должен быть jar
, war
, и т.д., не . pom
Также рекомендуется разделять разные типы источников, такие как:
...
- app
| - src/main
| - java
| | - domain
| | - App.java
| - kotlin
| - domain
| - BModule.kt
...
Комментарии:
1. Хотите исправить свою нарисованную структуру: ядро содержит jar-упаковочный модуль A , который имеет src… Модуль и ядро — это pom-упаковка. приложение содержит jar-упаковку B с src… BModule и App , а приложение — это pom-упаковка. Я объявил зависимость от всего основного модуля в app/pom.xml а также объявленная зависимость от A -модуля в app/B/pom.xml
2. @ShpilevojArsenij Код в проектах с
<packaging>pom
не компилируется, Не тестируется и т. Д. И артефакт не создается. Этот тип упаковки предназначен только для родительских проектов, которые содержат объявления для наследования (суб-)<module>
s. Измените тип упаковкиA
иB
наjar
.