Erreur de plugin Maven JaCoCo
J'ai configuré le Maven JaCoCo plugin comme suit dans mon pom.xml fichier:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jacoco.version>0.5.9.201207300726</jacoco.version>
</properties>
<profiles>
<profile>
<id>jacoco4</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration
<destfile>${project.build.directory}/target/jacoco.exec</destfile>
<datafile>${project.build.directory}/target/jacoco.exec</datafile>
<output>file</output>
<append>true</append>
</configuration>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Je suis sous Windows 7 et apache-maven-3.0.4 plugin. Quand je tape mvn -P jacoco4 install
soit à partir d'un terminal cygwin ou à partir d'une invite de commande terminal, Maven télécharge et exécute le JaCoCo plugin, mais alors le jacoco.exec
fichier ne semble pas avoir été créé. Ci-dessous le message d'erreur:
[ERROR] Unable to read execution data file C:\Users\brownru\workspace64new\vps9\vps-fileserver\target\jacoco.exec: C:\Users\brownru\workspace64new\vps9\vps-fileserver\target\jacoco.exec (The system cannot find the file specified)
java.io.FileNotFoundException: C:\Users\brownru\workspace64new\vps9\vps-fileserver\target\jacoco.exec (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at org.jacoco.maven.ReportMojo.loadExecutionData(ReportMojo.java:251)
at org.jacoco.maven.ReportMojo.executeReport(ReportMojo.java:228)
at org.jacoco.maven.ReportMojo.execute(ReportMojo.java:217)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Ce message d'erreur apparaît si oui ou non je inclure le destfile
et datafile
prescripteurs dans la configuration du plugin:
<destfile>${project.build.directory}/target/jacoco.exec</destfile>
<datafile>${project.build.directory}/target/jacoco.exec</datafile>
Quelqu'un peut-il me dire ce que je fais mal?
source d'informationauteur kirigiri
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème avec jacoco et maven.
Cela est lié à un parent pom d'écraser la configuration de surefire.
Dans ce cas, ce plugin n'a pas utilisé l'argument (argument jvm) de la définition de l'agent.
La solution était de mettre le "argLine" configuration de l'élément arrière
Plein de plugin conf ressemble à
Espère que ça vous sera utile
OK je crois que j'ai compris ce qui se passe.
Par défaut, le jacoco plugin "runs" avant la phase de test (il exécute généralement le
prepare-agent
objectif au cours de l' initialiser phase du cycle de vie), et lorsqu'il s'exécute, elle ne fait qu'un maven propriété appelée "argLine" à quelque chose comme-javaagent=jacoco.jar
ex:
Par défaut, maven-surefire-plugin fondamentalement "ajoute" cette propriété (si elle est définie sur quoi que ce soit) à sa fourche java processus de test, de sorte qu'ils obtenir marchandises. Ex:
java ${argLine ends up here}> -jar /xxx/surefirebooter3741906822495182152.jar
Généralement (sans jacoco), si vous voulez aussi ajouter quelque chose de votre propre pour que argLine (par exemple,
-Xmx1G
ou similaire), vous venez de définir dans la meilleure configuration, commeToutefois, si vous utilisez jacoco, vous ne pouvez pas le faire de la façon normale vous le faire en définissant une propriété globale, de cette façon à la place:
Si vous définissez la
<configuration><argLine>
alors qu'il est fondamentalement remplace le système de la propriété, de sorte jacoco arguments ne sont pas transmis à l'enfant de processus. C'est pourquoi vous utilisez la propriété plutôt. Si vous spécifiez une propriétéargLine
puis jacoco allons juste ajouter ses paramètres que vous spécifiez, puis infaillible va l'utiliser.Cependant, si votre parent pom a déjà ensemble du plugin
<configuration><argLine>
à quelque chose? Ou si vous êtes vous-même le définir? Il va utiliser plutôt cette valeur de la propriété que jacoco est de configuration (vous avez spécifié un surpassement manuel).Si vous êtes en précisant
<configuration><argLine>
vous-même, vous pouvez modifier que argLine dans une propriété (voir ci-dessus), puis retirez le<configuration><argLine>
et cela devrait fonctionner. Si vous ne pouvez pas contrôler le parent et le parent indique quelque chose pour argline, alors vous aurez besoin d'aller à l'<configuration><argLine>${argLine} -Xmx1G</argLine>
route. C'est de le charger d'ignorer ce que le parent définir cette valeur, et l'utilisation argLine à la place (l'un jacoco jeux pour vous). (C'est pas clair pour moi si il y a un moyen facile de "ajouter" de la valeur du parent pom a de cette valeur, si quelqu'un sait comment n'hésitez pas à commenter ici).Mais que faire si jacoco ne fonctionne pas pour certaines cibles, ou de certains de profil? Alors la variable
${argLine}
n'est jamais défini, et vous pouvez exécuter dans une erreur comme ceci:Bien il s'avère que jacoco seulement "ajoute" à la propriété nommée argLine, lorsqu'il s'exécute. Vous pouvez ajouter un
<properties><argLine></argLine></properties>
à votre pom (sauf si vous l'avez déjà défini dans le pom parent, alors vous n'avez pas besoin d'ajouter quoi que ce soit). Si jacoco est jamais invoquée, elle ajoute. Si pas, il est fixé à une chaîne vide, ce qui est OK. Il est également difficile de savoir si il existe un moyen de "ajouter" du parent à la valeur d'une propriété, il est donc soit en hériter, si vous savez qu'il existe, ou le définir comme étant vide.Donc, en fin de compte pour moi, depuis mon en amont (inaccessible) parent pom déclaré comme
<configuration><argList>${argList}</argList></configuration>
J'ai été forcé de fondamentalement suivre cette voie, car il était déjà dans un (en dehors de mon contrôle) parent pom, ainsi:
<configuration><argList>${argList} -Xmx1G</argList></configuration>
J'ai aussi rencontré ce problème: JaCoCo ne pas produire une " jacoco.exec " fichier de sortie, ce qui signifie qu'aucune analyse de couverture de code se produit.
Dans mon cas, il était, en outre, à l'aide d'un custom argLine dans le Maven Plugin Surefire qui surdéfini la JaCoCo Plugin Maven argLine, provoquant JaCoCo de ne pas être exécuté.
Pour corriger cela, j'ai utilisé le JaCoCo paramètre facultatif "propertyName" pour exporter ses argLine à une Maven propriété et inclus dans le Surefire argLine:
Cependant cela a provoqué un problème lorsque les tests ont été exécutés dans Netbeans. Parce que le JaCoCo plugin n'a pas été exécuté dans ce scénario, le "jacoco.de l'agent.argLine" variable n'est pas initialisée et Infaillible échoué avant l'exécution des tests.
En ajoutant un espace bien "jacoco.de l'agent.argLine" à la pom a résolu le problème lors de l'exécution d'un seul test, mais c'est aussi arrêté JaCoCo de l'exportation de ses argLine lorsqu'il a été exécuté efficacement la désactivation de JaCoCo.
La dernière partie de la solution que j'ai utilisé était pour ajouter un profil qui crée le vide de la propriété, et ne s'active que lorsqu'un seul test est spécifié:
- Je utiliser la configuration:
Mise à jour:
Configuration généré par sonar (sonar-pom.xml):
Un problème: comment définir le "jacocoagent3671192291664069011.jar" pour chaque construction. Il devrait être dans: