Многомодульный проект maven — используйте один модуль только как зависимость

#spring #eclipse #maven

#весна #затмение #maven

Вопрос:

Я дал следующую структуру (Maven Spring). Для DependencyService меня интересуют только некоторые модели (классы Java, которые я хочу использовать повторно, а не только копировать и вставлять). Из-за некоторых вещей docker я не могу запустить DependencyService из eclipse, мне нужно настроить несколько вещей. Вот почему я хочу использовать только классы и не включать весь проект.

Учитывая следующую структуру:

 MainFolder
 |
  ----MainApplication
          |
          ----Backend1
               |
               ----pom.xml
          |
          ----Backend2
               |
               ----pom.xml
 |
 ----DependencyService
          |
          ----someModelsAreInHere
          |
          ----pom.xml
 |
 ----pom.xml
 

На данный момент соответствующие части pom выглядят следующим образом:

MainFolder Pom

 <!-- Inherit defaults from Spring Boot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.0</version>
</parent>
<modules><module>Backend1</module><module>Backend2</module></modules>
...
<!-- root pom settings -->
<groupId>GROUP</groupId>
<artifactId>MainProject</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>MainProjectName</name>
...
<!-- Manages Dependencies -->
<dependencyManagement>
    <dependencies>      
        <dependency>  <!-- Import the dependency here -->
            <groupId>GROUP.MainProject</groupId>
            <artifactId>DependencyService</artifactId>
            <version>${dependency.service.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
... </project>
 

Например, Backend1, Backend2 и DependencyService pom.xml выглядят очень похоже.

 <!-- Inherit defaults from MainFolder -->
<parent>
    <artifactId>MainProject</artifactId>
    <groupId>GROUP</groupId>
    <version>${revision}</version>
</parent>


<!-- data-processor pom settings -->
<groupId>GROUP</groupId>
<artifactId>backend1</artifactId>
<name>Backend1Name</name>
<packaging>jar</packaging>
<version>${revision}</version>

    <!-- Add required dependencies -->
<dependencies>    
    <!--  include DependencyService here but JUST for the classes, not for compiling! -->
    <dependency>
        <groupId>GROUP.MainProject</groupId>
        <artifactId>dependencyService</artifactId>
    </dependency>
</dependencies>
 

Вопрос

Как я могу включить DependencyService , чтобы использовать там классы для Backend1 и Backend2 , но НЕ компилировать его при компиляции Backend1 и Backend2? (Потому что он не будет компилироваться без докеров и т. Д. …)

Комментарии:

1. Если вы определяете зависимость, это означает, что она станет частью пути к классу…

2. Ммм, разве нет какого-то решения? Моя единственная цель — использовать эти классы (из DependencyService) в других каталогах. Разве это не возможно каким-то образом? Мне также было бы неплохо оставить это вне зависимости, но я также не знаю, как использовать эти классы

3. Честно говоря, я не понимаю, для какой цели вы хотели бы использовать классы, но не через classpath? Пожалуйста, более подробно объясните, почему / как вы их используете…

4. Конечно, никаких проблем. Это DependencyService было дано моим научным руководителем (университет). Эта служба предоставляет api для базы данных mysql и классы для базы данных (например, класс «customer» с переменными, такими как name, age, …). (По крайней мере, я) не могу разрешить запуск этой службы в eclipse, потому что сначала мы создаем контейнер docker, который запускает базу данных а затем еще один, который запускает api. И с моей точки зрения, этот процесс невозможен в eclipse. Это главная причина, почему я хочу использовать только эти классы. Я должен получить доступ к api, получить данные из этих классов и обработать их 🙂

5. Дополнение: основная причина этого заключается в том, что если я попытаюсь запустить данную службу, я получу сообщение об ошибке типа «не удалось определить подходящий класс драйвера, если вам нужна встроенная база данных, пожалуйста, укажите itt в пути к классу, …». И я немного погуглил для этой ошибки и затем подумал, что было бы проще просто использовать классы, не добавляя все это в путь к классу. Как я уже сказал, это было дано, поэтому нет реальной необходимости компилировать его каждый раз, я в основном просто хочу получить данные: D