Définition des propriétés via Maven en ligne de commande
Je suis confus au sujet de la bonne façon de définir une propriété de certains tests unitaires via la ligne de commande lors de l'utilisation de Maven. Il y a un certain nombre de questions (par exemple,La spécification de Maven paramètre de mémoire, sans réglage de MAVEN_OPTS variable d'environnement, Est-il un moyen de passer de la jvm arguments via la ligne de commande à maven?, Comment définir les paramètres de la JVM pour Junit Tests Unitaires?) qui portent sur ce sujet, mais aucun n'a la réponse, je suis à la recherche pour.
Je veux bien java.util.logging.config.class
à une certaine valeur, mais je ne veux pas définir la MAVEN_OPTS
variable d'environnement.
Je peux configurer le plugin surefire dans mon pom fichier avec la propriété:
<argLine>-Djava.util.logging.config.class=someClass</argLine>
de sorte qu'il est défini à chaque fois que la phase de test est exécuté.
Cependant, si je supprimer le paramètre de l'pom fichier et ajoutez la ligne suivante à la ligne de commande:
mvn package -DargLine="java.util.logging.config.class=someClass"
le message d'erreur suivant dans la phase de test est signalée et l'échec de la construction:
Erreur: impossible de trouver ou charger la classe principale de java.util.la journalisation.config.class=someClass
Si je exécuter les opérations suivantes à partir de la ligne de commande:
mvn package -Djava.util.logging.config.class=someClass
le message d'erreur suivant est affiché au début de la construire mais la construction et les tests sont concluants:
La configuration de la journalisation de la classe "someClass" a échoué
java.lang.ClassNotFoundException: someClass
Je ne comprends pas vraiment le comportement. Quelqu'un peut-il m'éclairer?
Vous devez vous connecter pour publier un commentaire.
Oui, vous devriez avoir
Remarquer l'ajout de
-D
à l'intérieur de laargLine
.Nous allons expliquer pourquoi.
argLine
est en effet un attribut de lamaven-surefire-plugin
correspondant à la propriété de l'utilisateurargLine
. Cela signifie que vous pouvez définir cette propriété directement sur la ligne de commande avec-DargLine
. Mais alors, la valeur de cette propriété est-Djava.util.logging.config.class=someClass
. C'est exactement ce que vous aviez lorsque vous avez configuré le plugin dans le POM directement avecEn outre, lorsque vous appelez
alors vous n'êtes pas le réglage de la
argLine
de la propriété. L'ajout d'un système de propriété.Sur votre approche de la configuration des tests
Si vous voulez passer de la configuration de vos tests, utilisez par exemple un fichier dans src/test/resources/myTestConfig.xml. Ou utiliser les fonctionnalités avancées de Test-ng. Vos tests n'ont aucune valeur sur le centralisée serveur de build, ou ceux qui veulent courir/tester votre code, où config valeurs ne peuvent pas être modifiés (facilement).
L'utilisation recommandée des arguments de ligne de commande pour Maven est pour la configuration des plugins Maven, de construire, de l'environnement et de Java config pour la construire.
Utilisez aussi peu de fonctionnalités, de configuration et les plugins que possible. Ou vous ferez face à une tonne de questions en bas de la ligne, et le tweak-tous-vous-voulez-Un-normalisé-build-ne pas-dire-sh*t-pour-moi-Gradle seront plus à l'aise.
java.util.logging.config.class
propriété pour contrôler l'enregistrement de la sortie d'un 3ème partie de la bibliothèque de mon application dépend.