web-dev-qa-db-fra.com

Erreur de compilation Maven: le package n'existe pas

J'essaie d'ajouter un support maven à un projet d'entreprise existant. C'est un projet multi-module, et les 2 premiers modules sont compilés et empaquetés sans problèmes, mais je fais face à l'erreur de compilation. J'essaie d'utiliser la même dépendance dans plusieurs modules. Ma structure est la suivante:

> + parent
>    - pom.xml
>    - module-1
>    -   pom.xml
>    - module-2  (Depends on module-1)
>    -   pom.xml
>    - module-3
>    -   pom.xml (Depends on both modules 1 and 2)

Je suis avec le projet ouvert sur Eclipse et il ne montre aucune erreur. Lorsque j'exécute mvn clean install à partir du parent, il installe avec succès les modules 1 et 2, mais échoue sur le module 3 en indiquant que package xxx.yyy does not exist et Cannot find symbol XXXYYY. Le package xxx.yyy et le symbole XXXYYY se trouvent dans un fichier jar répertorié dans les dépendances des modules 2 et 3.

Puisque les deux modules dépendent du même fichier jar, j'ai essayé d'ajouter la dépendance uniquement au module 2 et je pense que le module 3 devrait le voir en raison des dépendances transitives, mais il ne pouvait pas voir le package. J'ai donc essayé d'ajouter la dépendance aux modules 2 et 3 de Poms et le problème a persisté.

J'ai déjà vérifié/essayé ces:

  • Le pot demandé est répertorié dans mes dépendances. J'ai exécuté la commande suivante et je peux ensuite voir le fichier .jar requis dans la liste des dépendances: mvn dependency:copy-dependencies
  • Comme je l'ai dit plus haut, j'ai essayé d'insérer dans mon chemin de classe la dépendance transitive et de la référencer directement sur mon pom. Les deux solutions ne fonctionnaient pas.
  • J'ai essayé de supprimer tout mon dépôt et de tout télécharger à nouveau, mais cela ne fonctionnait pas non plus.

La seule particularité de mon projet est que le module 3 dépend du module 2 et dépend d'une lib dont le module 2 dépend également.

Ci-dessous, je colle les noms des modules 2 et 3. J'ai changé certains noms en raison de la politique de l'entreprise.

Module-2

<project xmlns="http://maven.Apache.org/POM/4.0.0" ... >  
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>Module2</artifactId>    
  <dependencies>

      <dependency>
          <groupId>com.company</groupId>
          <artifactId>Module1</artifactId>
          <version>0.0.1-SNAPSHOT</version>
      </dependency>         

    <dependency>
        <groupId>com.company</groupId>
        <artifactId>SharedArtifact</artifactId>
        <version>1.1</version>
     </dependency>

    ...

Module-3

<project xmlns="http://maven.Apache.org/POM/4.0.0" ... >  
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>Module3</artifactId>    
  <dependencies>

      <dependency>
          <groupId>com.company</groupId>
          <artifactId>Module2</artifactId>
          <version>0.0.1-SNAPSHOT</version>
      </dependency>         

    <!--<dependency>
        <groupId>com.company</groupId>
        <artifactId>SharedArtifact</artifactId>
        <version>1.1</version>
     </dependency>-->

    ...

Et le paquet qui ne peut pas être vu est à l'intérieur du 'SharedArtifact'. Lorsque je supprime la dépendance de Module2, cela ne génère pas l'erreur package does not exist du package 'SharedArtifact'. Mais ensuite, il donne le package does not exist à partir du fichier java Module2. 

Il semble que les dépendances se perdent puisque le Module3 en dépend à la fois.

J'utilise Java 1.6.0_29 et Maven 3.0.5. Et je ne peux pas mettre à niveau vers Java 7, car le projet nécessite Java 6. Et ne peut pas mettre à niveau Maven, car Maven mis à niveau ne fonctionne qu'avec Java 7 et versions ultérieures.

Update 1:

L'erreur donnée lors de la compilation est la suivante:

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] \Users\usuario\Documents\workspaces\myworkspace\qa\Module3\src\com\company\sharedartifact\package\SomeClass.Java:[8,55] 
package com.company.sharedartifact.package  does not exist
[ERROR] \Users\usuario\Documents\workspaces\myworkspace\qa\Module3\src\com\company\sharedartifact\package\SomeClass.Java:[9,55] 
package com.company.sharedartifact.package does not exist
[ERROR] \Users\usuario\Documents\workspaces\myworkspace\qa\Module3\src\com\company\sharedartifact\package\SomeClass.Java:[17,85] 
cannot find symbol
symbol  : class SomeOtherClass

Je ne peux pas coller le journal entier -X en raison de la stratégie de l'entreprise, mais si une partie est nécessaire, je peux modifier certains noms.

Update 2:

Aujourd'hui, je viens de comprendre que si une exécution mvn clean install, la compilation échoue. Mais si je lance mvn clean, alors (dans Eclipse), je lance Maven Update project et ensuite `mvn install, cela compile!

Depuis que j'ai trouvé cela, j'ai déjà évoqué cette question et je crois que quelque chose ne va pas avec mon classpath. Étant donné que je travaille avec une application de portail Weblogic, je dois conserver certaines bibliothèques partagées (celles qui sont nécessaires à la fois par projet et par moment d'exécution) sur Eclipse. Peut-être qu'une bibliothèque est en train d'être oubliée sur mon pom. Ce qui est étrange, c’est que le paquet qui, selon la compilation, n’existe pas, existe.

4
cristianorbs

Comme j'étais à court d'options, j'ai suivi les suggestions de @ user944849 et updated Maven vers la version 3.3.9 et mon JDK vers 1.8.0_60, tout en conservant les sources et cibles sur la configuration du compilateur du POM pointant vers 1.6.

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>        
  <configuration>
     <source>1.6</source>
     <target>1.6</target>
  </configuration>
</plugin>

Après cela, le module 3 a commencé à compiler, mais les modules 4 et 5 ont éclaté à cause de dépendances sur certaines bibliothèques de JRockit. Pour résoudre ce problème, j'ai mis à jour le code obsolète et le projet a finalement été entièrement compilé.

Donc, je pense qu'il y avait un problème avec la version Maven que j'utilisais. Il semble en quelque sorte se perdre lorsque 2 projets dépendent de la même bibliothèque et que l’un dépend de l’autre. Je n'ai pas testé d'autres versions, mais la version 3.3.9 fonctionne bien pour ces cas.

0
cristianorbs