2016-08-30 2 views
0

J'ai un plugin qui crée un fichier zip spécial dans le cadre du processus de construction.
Pour ce faire, il définit un type d'emballage personnalisé 'wcc' et un cycle de vie personnalisé pour l'accompagner.
Quand j'exécute mvn package l'applicaton construit mon fichier zip très bien et tout fonctionne.
(Note: il est sauter tests unitaires pour le faire.)Custom Lifecycle breaks Surefire: test dans Maven

Cependant, quand je lance mvn test il échoue.

et recrache le journal suivant:

[ERROR] Failed to execute goal 
org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test 
(default-test) on project LowesMMU: 
    A type incompatibility occured while executing 
    org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test: 
     java.io.File cannot be cast to java.lang.String 
[ERROR] ----------------------------------------------------- 
[ERROR] realm = plugin>org.apache.maven.plugins:maven-surefire-plugin:2.19.1 
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy 
[ERROR] urls[0] = file:/.m2/repository/org/apache/maven/plugins/maven-surefire-plugin/2.19.1/maven-surefire-plugin-2.19.1.jar 
[ERROR] urls[1] = file:/.m2/repository/org/apache/maven/surefire/maven-surefire-common/2.19.1/maven-surefire-common-2.19.1.jar 
[ERROR] urls[2] = file:/.m2/repository/org/apache/maven/surefire/surefire-booter/2.19.1/surefire-booter-2.19.1.jar 
[ERROR] urls[3] = file:/.m2/repository/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.jar 
[ERROR] urls[4] = file:/.m2/repository/junit/junit/4.12/junit-4.12.jar 
[ERROR] urls[5] = file:/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar 
[ERROR] urls[6] = file:/.m2/repository/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar 
[ERROR] urls[7] = file:/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.11/plexus-interpolation-1.11.jar 
[ERROR] urls[8] = file:/.m2/repository/org/slf4j/slf4j-jdk14/1.5.6/slf4j-jdk14-1.5.6.jar 
[ERROR] urls[9] = file:/.m2/repository/org/slf4j/slf4j-api/1.5.6/slf4j-api-1.5.6.jar 
[ERROR] urls[10] = file:/.m2/repository/org/slf4j/jcl-over-slf4j/1.5.6/jcl-over-slf4j-1.5.6.jar 
[ERROR] urls[11] = file:/.m2/repository/org/apache/maven/reporting/maven-reporting-api/3.0/maven-reporting-api-3.0.jar 
[ERROR] urls[12] = file:/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar 
[ERROR] urls[13] = file:/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar 
[ERROR] urls[14] = file:/.m2/repository/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar 
[ERROR] urls[15] = file:/.m2/repository/org/apache/maven/surefire/surefire-api/2.19.1/surefire-api-2.19.1.jar 
[ERROR] urls[16] = file:/.m2/repository/org/apache/maven/plugin-tools/maven-plugin-annotations/3.3/maven-plugin-annotations-3.3.jar 
[ERROR] Number of foreign imports: 1 
[ERROR] import: Entry[import from realm ClassRealm[project>com.lowes.ecm:LowesMMU:1.0.0-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]] 
[ERROR] 
[ERROR] ----------------------------------------------------- 
[ERROR] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException 

Si je change <packaging> à jar de wcc alors mes tests courent et passent très bien. Alors, pourquoi ai-je cette erreur, et plus important encore, comment puis-je résoudre ce problème?


L'enquête plus approfondie

plugin Maven Surefire ne supporte que java.lang.String propriétés. Mon plugin a une paire de propriétés java.io.File.

@Parameter(property = "componentZip", defaultValue = "${componentLocation}") 
protected File componentZip; 

@Parameter(property = "manifestFile", defaultValue = "${project.basedir}/manifest.hda") 
protected File manifestFile; 

Ces propriétés sont utilisées par mon plug-in pour emballer le fichier zip, ainsi que l'emballage du fichier de manière appropriée et en vous assurant qu'il est construit dans le format attendu.

Comment puis-je être sûr d'ignorer ces propriétés de configuration? Ai-je besoin de les faire String et d'ajouter des conversions à File dans mon plugin où il est utilisé de cette façon?

Répondre

0

J'ai trouvé mon problème. J'ai eu un Mojo défini pour la phase initialize. Il était en train de traiter ma configuration et de définir les valeurs par défaut. l'une des valeurs qu'il définissait était componentZip. Pour s'assurer qu'il a été migré vers les phases ultérieures, il le stocke dans Properties, UserProperties et SystemProperties. La conversion et le code de mise à jour des propriétés à String ont résolu mon problème.