2017-09-06 1 views
1

J'ai créé une application Web Java qui reçoit une URL d'un formulaire et effectue des tests TestNG sur ces URL en utilisant une installation Maven locale à partir de la ligne de commande. Mes classes de test sont en src/main/java ce qui n'est pas conventionnel, mais puisque mes tests sont exécutés après ma compilation, je les ai déplacés là. Lorsque j'utilise l'invocateur Maven de mon servlet dans Tomcat d'Eclipse, mes tests s'exécutent sans problème et fournissent un résultat généré dans mon application Web. Le problème que je rencontre est que lorsque j'exporte mon application en tant que fichier .war et la place dans le dossier webapps de mon serveur Tomcat local sur mon ordinateur Windows, mon installation Maven locale est introuvable.Maven Invoker ne trouve pas la variable d'environnement MAVEN_HOME sur le serveur Tomcat

HTTP Status 500 - Maven application directory was not specified, and ${maven.home} is not provided in the system properties. Please specify at least on of these. 

...

java.lang.IllegalStateException: Maven application directory was not specified, and ${maven.home} is not provided in the system properties. Please specify at least on of these. 
    org.apache.maven.shared.invoker.MavenCommandLineBuilder.checkRequiredState(MavenCommandLineBuilder.java:127) 
    org.apache.maven.shared.invoker.MavenCommandLineBuilder.build(MavenCommandLineBuilder.java:62) 
    org.apache.maven.shared.invoker.DefaultInvoker.execute(DefaultInvoker.java:100) 
    com.xxxxx.qa.servlets.RunTestServlet.doPost(RunTestServlet.java:104) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Voici le code Maven Invocateur que je me sers:

InvocationRequest invocationRequest = new DefaultInvocationRequest(); 
invocationRequest.setPomFile(new File("pom.xml")); 
invocationRequest.setGoals(Collections.singletonList("test surefire-report:report " + formatTest)); 
Invoker invoker = new DefaultInvoker(); 
invoker.setMavenHome(new File(System.getenv("MAVEN_HOME")));       
InvocationResult result = invoker.execute(invocationRequest); 

Je n'ai pas les problèmes en cours d'exécution des commandes Maven à partir de la ligne de commande et ont ajouté correctement mon répertoire Maven à ma variable d'environnement MAVEN_HOME.

J'ai essayé quelques-unes des réponses proposées sur cette page, mais n'a pas de succès - Maven Invoker: IllegalStateException

J'ai aussi essayé l'exécution d'un fichier batch Tomcat setevn.bat dans Tomcat-Home/bin:

set "maven.home=C:\XXXXX\XXXXX\apache-maven-3.5.0-bin\apache-maven-3.5.0" 

...

set "MAVEN_HOME=C:\XXXXX\XXXXX\apache-maven-3.5.0-bin\apache-maven-3.5.0" 

Toutes les idées?

+0

Essayez-vous d'implémenter un plugin maven? Ou sont-ils tester une sorte de tests d'intégration? Et quel est le rôle de Tomcat ici? – khmarbaise

Répondre

0

Voir cette réponse sur comment définir Environment variables for java installation (ou toute autre chose). Vous n'avez pas besoin de Maven pour exécuter TestNG, voir run TestNg programmatically.

+0

Exécution de TestNG par programmation est une excellente solution de contournement et fonctionne mieux que d'invoquer Maven à partir de ce que je peux voir. Je trouve toujours étrange que je ne peux pas accéder à la variable d'environnement MAVEN_HOME. Comme je l'ai déjà noté, j'ai déjà configuré la variable d'environnement pour cela et n'ai aucun problème à lancer Maven depuis la ligne de commande. – Omar

+0

Il semble qu'après quelques tests, exécuter TestNg par programmation fonctionne pour moi dans Tomcat d'Eclipse mais ne fonctionne pas sur mon Tomcat local, donc ce n'est pas résolu pour moi. – Omar