Maven - добавить модуль maven как зависимость от другого модуля maven - PullRequest
1 голос
/ 14 июля 2020

У меня есть 2 проекта Spring boot maven (модуль A, модуль B). И оба они добавляются как модули в родительский проект. Оба модуля имеют некоторые общие зависимости и классы java (объекты домена), поэтому я создал третий модуль Module C и поместил туда все общие файлы java и зависимости.

Я добавил модуль C родительскому pom как одному из модулей. И добавил Module C как зависимость от Module A и Module B. В модуле A, B, где бы там ни упоминались классы Module C, он был разрешен и указывает на Module C Classes (при нажатии ctrl + щелчок). В eclipse не было показано никаких ошибок, и зависимости maven обновлены. Но когда я создаю проекты либо из родительского pom, либо только из модуля A (после сборки модуля c), я получаю ошибку cannot find symbol в тех местах, где упоминались классы модуля C.

Ниже это мой пом. xml

Родительский пом. xml

<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">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example.services</groupId>
    <artifactId>cloud-services</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>ModuleC</module> <!-- Project where common dependencies and Common java classes are placed -->
        <module>ModuleA</module>
        <module>ModuleB</module>
    </modules>
</project>

Модуль C Пом. xml - Общий Проект

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.example.services</groupId>
    <artifactId>cloud-services</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>ModuleC</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>ModuleC</name>
    
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    </dependencyManagement>
</project>

Модуль A Пом. xml - Зависимый проект от модуля C

<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.example.services</groupId>
        <artifactId>cloud-services</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>ModuleA</artifactId>
    <dependencies>
    <!-- Project where common dependencies and Common java classes are placed -->
        <dependency>
            <groupId>com.example.services</groupId>
            <artifactId>ModuleC</artifactId>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

Модуль B Пом. xml

Same as ModuleA.

Что не так с моей конфигурацией. Любая помощь очень ценится. Спасибо.

Ответы [ 2 ]

1 голос
/ 15 июля 2020

Если это весенний проект, папка root баночки будет BOOT-INF.

Если вы создадите обычную банку проекта, у нее не будет BOOT-INF.

Это работает, если у вас есть Project A и он зависит от x.jar

Скажем, Project A требует com.xyClassA.class из x.jar, он будет искать в папке root x. jar с этим путем x / y / ClassA.class.

В вашем случае, поскольку это был весенний проект, разрешение не сработало, и он жаловался на это.

0 голосов
/ 14 июля 2020

Я предполагаю, что виноват spring-boot-starter-parent.

Используя его в качестве родительского POM для родительского POM, вы строите с ним все свои модули. AFAIK, сборка jar-файлов с spring-boot-starter-parent не может использоваться как зависимости, потому что классы перемещены в другой каталог внутри jar.

Поскольку я не эксперт Spring, я не могу предложить вам хорошее решение для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...