J'ai une application Springboot où j'ai Application.Properties Fichier en dehors du projet (ce n'est pas dans un endroit habituel SRC / Main / Ressources).
Tandis que Construire une application avec gradle Clean Build code>, il échoue à mesure que le code n'est pas capable de trouver des fichiers de propriétés.
J'ai essayé de nombreuses commandes à transmettre VM args, gradlé OPTS, mais cela ne fonctionne pas.
gradle clean build -Djvmargs="-Dspring.config.location=/users/home/dev/application.properties" //not working
3 Réponses :
Si j'étais vous, je n'aurais pas impliqué les propriétés réelles au test Junit. Donc, je créerais des propriétés de test pour le projet sous Exemple: fort> p> src / test / ressources / applications-test.properties code> et dans le test JUnit, je chargerais les propriétés de test.
Je ne peux pas avoir de fichiers de propriétés à l'intérieur du projet. C'est un repo séparé contenant des fichiers de propriétés d'application. Avoir également différents fichiers de propriétés pour le test le dupliqueraient.
Pouvez-vous essayer la commande suivante à votre projet gradle propre build -dspring.config.location = / users / home / dev / application.propert ies code>
Peut-être que ce poste vous aidera à réussir Application.Property externe Stackoverflow.com/a/52099774/13167832
J'avais déjà essayé cela. Ça ne marche pas. J'ai besoin de "construire" de ne pas "bootrun".
Si rien ne fonctionne, je suppose que je dois créer différents fichiers de configuration pour le test JUnit comme suggéré par @ NIKOB-BOB
Je pense qu'il y a un malentendu.
comme vous validez: p>
Lorsque votre application de démarrage à ressort construit, une application Dans ce cas, comme @ Nikos-Bob a dit, vous devez utiliser une autre propriété, couramment à l'intérieur de votre Nous ne voulons pas avoir de valeurs codées dans notre référentiel git principal printemps et autres cadres nous donnent une alternative: Donc, au lieu de la création manuelle externe de Java -Jar Api.jar - -spring.config.location = fichier: /users/home/dev/applylication.properties code> p>
Spring.config.location = fichier ... code> p>
pour les tests d'unité h1>
SRC / Test / Ressources Code>
variables d'environnement à la place des propriétés externes h1>
spring.datasource.url=jdbc:oracle:thin:@${DATABASE_HOST}:${DATABASE_PORT}:${DATABASE_SID}
spring.datasource.username=${DATABASE_USER}
spring.datasource.password=${DATABASE_PASSWORD}
spring.mail.host = ${MAIL_HOST}
spring.mail.username =${MAIL_USERNAME}
spring.mail.password =${MAIL_PASSWORD}
Merci pour vos intrants. Sur l'application.Propertoires N'EST PAS UTILISÉ SUR LE TEMPS DE BUREAU, si je mettez l'application.Properties Fichier à SRC / Main / Ressources, OUVERTURE DE BAILLE NETTOYEZ. Mais si je ne l'ai pas dans le dossier Ressources, puis nommez la construction propre. Cela signifie au moment de la construction des fichiers d'application.Properties. C'est en fait la façon dont nous avons écrit le cas de test. Comme je l'ai dit à la phase de test, il démarre l'application. Mais la question est de savoir comment spécifier un fichier de configuration externe afin que la construction de gradle Clean Build fonctionne. Peut-être que nous ne pouvons pas spécifier Spring.Config.Location = fichier à la hauteur de la construction, que ce que je vais déterminer.
Qu'en est-il d'une propriété avec des valeurs factices telles que mot de passe = changeme code> juste pour la construction. Pour votre problème de test, si vous codez un référentiel minimal à Github, je peux peut-être essayer de reproduire. Êtes-vous dans Windows?
Comme mentionné par vous et @ Nikos-Bob, si je crée un fichier de propérisse différent pour le test et que vous l'utilisez dans Test, puis la construction fonctionne bien. Je l'ai testé. Il semble donc que je puisse aller avec cette approche. Mais cela aurait été parfait si je pouvais simplement spécifier le chemin de configuration du fichier de configuration pour la ligne de commande gradle dans la ligne de commande ou dire dans le fichier Build.Gradle. Et mon code est en société Hébergé Git Repo.
Les propriétés du système pour les grades en cours d'exécution ne sont pas automatiquement transmises au cadre de test. Je suppose que cela consiste à isoler les tests autant que possible, de sorte que les différences dans l'environnement ne conduiront pas à des différences dans le résultat, sauf configuration explicite de cette façon.
Si vous regardez l'API de gradle pour le Testez la tâche , vous pouvez voir que vous pouvez configurer les propriétés du système Grâce à la méthode si vous souhaitez également lire une propriété système à partir de la ligne de commande des grades et puis transmettez-le que le test, vous devez la lire de la gradle en premier, par exemple En tant que propriété de projet, puis transmettez cette valeur sur le test: p> exécutez avec Cependant, je découragerais à l'aide des propriétés du système sur la ligne de commande de construction si vous pouvez l'éviter. À tout le moins, cela vous dérangera grandement à long terme. Si le fichier de configuration peut être dans des endroits différents sur différentes machines (selon l'endroit où vous avez le référentiel et s'il n'est pas dans le même chemin relatif de votre référentiel de démarrage à ressort), vous pouvez le spécifier dans un systemproperty code> sur la tâche (groovy dsl): p>
gradle -pestconfig = "/ chemin / à la configuration / à la configuration / à la configuration / référentiel /application.properties "Catégorie Code> P>
gradle.properties code> fichier à la place. p> p>
Grande solution, ça a fonctionné. Exactement ce que je cherchais. Merci Bjorn vester.