web-dev-qa-db-fra.com

Maven: Le type ne peut pas être résolu. Il est indirectement référencé à partir des fichiers .class requis.

J'ai changé certains projets existants de fourmi à projets maven . Jusqu'ici tout va bien.

Tous les projets ont le même groupId . Un projet nommé "ServerBase" et artifactId "server-base" . Ce projet contient une classe abstraite "BaseService" qui définit un enregistreur via:

import org.jboss.logging.Logger;
[...]
protected Logger log = Logger.getLogger(this.getClass());

Un autre projet portant les noms "Server" et artifactId "server" . Dans ce projet, une classe ConfigurationDAOImpl étend la classe BaseService ci-dessus . Dans ConfigurationDAOImpl, le journal de journalisation est utilisé pour créer certaines sorties.

Dans le fichier POM du "serveur", j'ai déclaré:

    <dependency>
        <groupId>com.tcom.amadeus</groupId>
        <artifactId>server-base</artifactId>
        <version>${project.version}</version>
    </dependency>

Sous BuildPath, la dépendance est très gentille sous MavenDependencies. J'ai supprimé l'ancienne dépendance dirct/natural/ant-du chemin de construction avant le ........ Si je le supprime, j'obtiens beaucoup d'erreurs sur les classes manquantes, etc . Mais même si j'ai cette dépendance, j'obtiens l'erreur suivante. dans Eclipse (sous les marqueurs d’onglet):

The type org.Apache.commons.logging.Log cannot be resolved. It is indirectly referenced from required .class files

Resource: ConfigurationDAPImpl.Java

Path: /Server/src/main/...

Location: Line 24

Type: Java Problem

J'ai essayé de supprimer la dépendance et de l'ajouter à nouveau, mais sans succès . Les deux projets font référence à Java 1.8 . Les deux projets ont été générés avec des cibles nettoyant un package à plusieurs reprises . Les deux projets ont été mis à jour par Cliquez avec le bouton droit ou appuyez sur F5 . J'utilise la version Eclipse: Neon.1a Release (4.6.1) J'utilise Apache-maven-3.3.9 J'utilise m2e Plugin.

Toute aide supplémentaire serait reconnaissante ... Merci d'avance.

7
Kaspatoo

Il y a deux façons de "résoudre" ceci:

1) Ajoutez explicitement la dépendance requise dans le pom-file serveur-projets: 

<dependency>
  <groupId>org.jboss.logging</groupId>
  <artifactId>jboss-logging</artifactId>
</dependency>

2) Changez l’étendue de la dépendance requise dans le fichier pom serveur-projets-base en remplaçant le mot "fournissez" à "compiler" ou effacez la balise scope de telle sorte que Je suppose que c'est 'compiler')

vieux:

<dependency>
  <groupId>org.jboss.logging</groupId>
  <artifactId>jboss-logging</artifactId>
  <scope>provided</scope>
</dependency>

nouveau:

<dependency>
  <groupId>org.jboss.logging</groupId>
  <artifactId>jboss-logging</artifactId>
  <scope></scope>
</dependency>

ou:

<dependency>
  <groupId>org.jboss.logging</groupId>
  <artifactId>jboss-logging</artifactId>
</dependency>

Quelques informations à ce sujet dans la documentation:

http://maven.Apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies

Fourni Ceci ressemble beaucoup à la compilation, mais indique que vous vous attendez à ce que le JDK ou un conteneur fournisse la dépendance au moment de l'exécution. Par exemple, lors de la création d’une application Web pour Java Enterprise Edition, vous définirait la dépendance sur l'API Servlet et les API Java EE associées to scope fourni car le conteneur Web fournit ces classes . Cette étendue est uniquement disponible sur le chemin de classe de compilation et de test, et n'est pas transitif.

Merci a tous.

3
Kaspatoo

Il semble que la bibliothèque de journalisation Apache n’ait pas été importée de manière transitoire à partir de votre projet server-base. Vérifiez si dans le projet server sous MavenDependencies vous voyez le fichier jar commons-logging (journalisation Apache). Sinon, ajoutez ceci en tant que dépendance maven dans le projet server-base

Répétez ce qui précède pour tous les fichiers JAR dont dépend server-base

0
GauravJ