Поэтому я работал над тем, чтобы выяснить, как создать многомодульный проект maven, который позволяет нескольким проектам зависеть от одного основного модуля, который также будет упакован в JAR. Какова правильная структура для этого?
Для справки: изначально у меня не было pom-агрегатора, и он отлично строит/отлаживает, но я не могу собрать банку. И после игры с этим теперь я не могу даже импортировать один и тот же модуль в 2 отдельных проекта и больше не могу даже отлаживать/запускать.
Я думаю, что моя проблема связана с тем, что я неправильно создаю зависимости в intellij, но это всего лишь предположение. Исторически я заходил в настройки модуля -> зависимости и импортировал проект maven, чтобы мои помпы распознавали другие модули. Кажется, Intellij это не нравится, поскольку он постоянно удаляет мои модули из других проектов.
Итак, должны быть соблюдены следующие критерии:
- один центральный основной модуль
- Один модуль для конкретного проекта на каждого родителя
- несколько проектов в зависимости от основного модуля
- Все мавен проекты
- Должна быть упакована в виде баночки
- основной + вторичный модуль должны быть доступны для редактирования в каждом экземпляре Intellij
Итак, я перепробовал массу структур, но моя последняя попытка здесь следующая:
Родительский POM/проект, который указывает на 2 существующих модуля. Один из этих модулей будет использоваться в другом проекте аналогичной структуры.
Я пытался установить зависимости maven для всех этих poms в разных конфигурациях, но я все еще не получаю манифеста или noclassdeffound при сборке и/или вообще не могу строить или получать циклические зависимости.
вот родительский помпон:
<?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>
<groupId>TEST</groupId>
<artifactId>CLIENT-PARENT</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../TEST-SHARED-CORE</module>
<module>../TEST-CLIENT-CLI</module>
</modules>
</project>
Это дочерний элемент A (основной) 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>
<groupId>TEST</groupId>
<artifactId>TEST-SHARED-CORE</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
...
</dependencies>
</project>
и второй дочерний модуль 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>
<groupId>TEST</groupId>
<artifactId>TEST-CLIENT-CLI</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>TEST</groupId>
<artifactId>CLIENT-PARENT</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../TEST-CLIENT-PARENT</relativePath>
</parent>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>TEST</groupId>
<artifactId>TEST-SHARED-CORE</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
У меня сложилось впечатление, что моя структура ужасно неверна. Итак, какова правильная структура?
РЕДАКТИРОВАТЬ:
Когда это делает пакет/сборку, это то, что происходит при запуске JAR, он не находит классы в общем ядре.
Exception in thread "main" java.lang.NoClassDefFoundError: com/shared/networking/contexts/NetworkContext
at com.Main.main(Main.java:23)
Caused by: java.lang.ClassNotFoundException
.../
- person J Fabian Meier   schedule 22.12.2019