web-dev-qa-db-fra.com

Maven: 'Le paquet n'existe pas' (et autres erreurs)

J'utilise plusieurs tests automatisés Selenium avec Maven. Lorsque je débogue dans Eclipse, je clique généralement avec le bouton droit de la souris sur testing.xml et sur Exécuter en tant que> Suite de TestNG. Mais exécuter dans Jenkins doit être exécuté en utilisant mvn test. Mais quand je lance ça, j'obtiens plusieurs erreurs: 

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (default-compile) on project ecom: Compilation failure: Compilation failure:
[ERROR] /Users/kroe761/Documents/workspace/ecom/src/main/Java/com/company/automation/ecom/HelperMethods.Java:[15,43] package com.company.automation.ecom.pages does not exist
[ERROR] /Users/kroe761/Documents/workspace/ecom/src/main/Java/com/company/automation/ecom/HelperMethods.Java:[16,43] package com.company.automation.ecom.pages does not exist
[ERROR] /Users/kroe761/Documents/workspace/ecom/src/main/Java/com/company/automation/ecom/HelperMethods.Java:[110,13] cannot find symbol
[ERROR] symbol:   class Header
[ERROR] location: class com.company.automation.ecom.HelperMethods
[ERROR] /Users/kroe761/Documents/workspace/ecom/src/main/Java/com/company/automation/ecom/HelperMethods.Java:[110,62] cannot find symbol
[ERROR] symbol:   class Header
[ERROR] location: class com.company.automation.ecom.HelperMethods
[ERROR] /Users/kroe761/Documents/workspace/ecom/src/main/Java/com/company/automation/ecom/HelperMethods.Java:[113,9] cannot find symbol
[ERROR] symbol:   class SignIn
[ERROR] location: class com.company.automation.ecom.HelperMethods
[ERROR] /Users/kroe761/Documents/workspace/ecom/src/main/Java/com/company/automation/ecom/HelperMethods.Java:[113,58] cannot find symbol
[ERROR] symbol:   class SignIn
[ERROR] location: class com.company.automation.ecom.HelperMethods

Je sais que les fichiers sont présents. Lorsque je lance la suite TestNG, tout fonctionne sans problème. De plus, quand je lance quel Java -version je reçois ceci:

Java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

Je sais que c'est un problème de configuration quelque part, mais je ne connais pas suffisamment la configuration maven/Java pour le résoudre. Les fichiers dont Maven me dit qu'ils sont partis sont mes fichiers, et ils sont absolument présents. Voici mon fichier pom.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">
    <modelVersion>4.0.0</modelVersion>
    <build>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <properties>
                        <property>
                            <name>listener</name>
                            <value>com.kirklands.automation.ecom.retry.MyTestListenerAdapter</value>
                        </property>
                    </properties>
                    <suiteXmlFiles>
                        <suiteXmlFile>testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <groupId>com.kirklands.automation</groupId>
    <artifactId>ecom</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>ecom</name>
    <url>http://maven.Apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.Selenium</groupId>
            <artifactId>Selenium-Java</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>
</project>

Structure du projet:

src/main/Java
    {package com.company.automation.ecom}
        CreditCard.Java
        HelperMethods.Java
src/test/Java
    {package com.company.automation.ecom.pages}
        Header.Java
        SignIn.Java
        (etc...)
    {package com.company.automation.ecom.tests}
        HeaderTests.Java
        (etc...)
5
kroe761

Votre problème semble apparaître car vous essayez d'accéder à partir de votre: 

src/main/Java 

Sources de test - qui se trouvent: 

src/test/Java

Voici l'extrait exact du journal que vous avez posté:

/Users/kroe761/Documents/workspace/ecom/src/main/Java/com/company/automation/ecom/HelperMethods.Java:[15,43] package inexistant

Cela fonctionnera d'un autre côté: si vous utiliserez vos sources (src/main/Java) à partir de la portée du test (src/test/Java).

Maven a son propre cycle de vie

Il a une conséquence stricte:

  • compile - compile le code source du projet
  • test - teste le code source compilé en utilisant un framework de tests unitaires approprié. Ces tests ne devraient pas exiger que le code soit empaqueté ou déployé

Et pendant compile, vous ne pouvez compiler que vos sources. Cependant, cela dépend de vos tests (paquet de pages), qui ne peuvent pas être compilés pour le moment, car ils ne seront compilés qu’à la phase test.
Ainsi la compilation échoue.

Pour résoudre ce problème, essayez de changer un peu la structure de votre projet:

src/main/Java
    {package com.company.automation.ecom}
        CreditCard.Java
        HelperMethods.Java
    {package com.company.automation.ecom.pages}
        Header.Java
        SignIn.Java
        (etc...)
src/test/Java
    {package com.company.automation.ecom.tests}
        HeaderTests.Java

Et vos tests doivent utiliser des sources (principales et pages) sans aucun problème.

10
nazar_art

Vous devez d'abord exécuter la commande maven clean install.

Cette commande compilera votre package missing et exécutera même les tests.

UPDATE: Vous devriez changer votre paquet com.company.automation.ecom.pages dans votre dossier src/main/Java. afin qu'il puisse être compilé dans la phase maven compile.

1
alayor