J'ai la structure de projet suivante:

Je veux utiliser la même dépendance (appelons-la: **dep-for-B-and-C**) dans les modules B et C.

 A
 ├── B
 │   └── pom.xml
 ├── C
 │   └── pom.xml
 │
 └── pom.xml

racine 'A' pom.xml:

...
<groupId>my-group-id</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
    <module>B</module>
    <module>C</module>
</modules>
...

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>***</groupId>
            <artifactId>dep-for-B-and-C</artifactId>
            <version>***</version>
        </dependency>
    </dependencies>
</dependencyManagement>

Modules enfants 'B' et 'C' pom.xml:

  ...
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <dependency>
    <groupId>***</groupId>
    <artifactId>dep-for-B-and-C</artifactId>
  </dependency>
  ...

Si je mets dep-for-B-and-C comme dépendance de A et B, après avoir exécuté mvn clean install, j'ai l'erreur suivante:

[ERROR]     'dependencies.dependency.version' for ***:dep-for-B-and-C-jar:jar is missing. @ line 39, column 21

Si je ne mets pas la dépendance (j'utilise dependencyManagement, elle devrait donc être placée mais je n'ai pas besoin de spécifier la version (c'est ce que je comprends)) dans mon enfant pom.xml alors, j'ai une erreur de compilation car je peux n'utilise pas ma dépendance.

Veuillez noter que j'ai spring-boot-starter-parent comme parent pour B et C, car les projets B et C seront un projet de démarrage Spring. La raison pour laquelle je ne mets pas cela à la racine (A pom.xml) est que j'aurai peut-être un autre module qui ne sera pas un projet Java.

Cela peut être la raison? Si oui, dois-je créer une structure de projet comme celle-ci?

A
├───Backend
│    ├── B
│    │   └── pom.xml
│    ├── C
│    │   └── pom.xml
│    │
│    └── pom.xml (spring-boot-starter as parent)
│
├───Frontend (using: eirslett mvn plugin)
│
└──pom.xml
0
Balázs Fodor-Pap 31 août 2020 à 17:31

2 réponses

Meilleure réponse

Voici le problème:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

Dans les modules B et C . Veuillez ajouter le module A en tant que parent de B et C

3
Prashant 31 août 2020 à 14:37

Si vous n'utilisez pas A comme POM parent, vous ne pouvez pas utiliser dependencyManagement de A.

2
J Fabian Meier 31 août 2020 à 14:37