Cela ne répond pas directement à la question de l'OP, mais skuro a mentionné quelque chose dans son dernier paragraphe qui peut être très utile, c'est-à-dire rendre les ressources disponibles sur le classpath pendant le développement, mais ne pas les inclure dans le jar/uberjar de la version.
La raison en est que vous pouvez alors placer les ressources séparément en dehors du jar - par exemple, placer les fichiers de configuration sous /etc
- puis de les lier au moment de l'exécution en listant ces dossiers de ressources dans le classpath.
Définitions dans project.clj
- supprimer le niveau supérieur
:resource-paths
de votre projet.clj ;
-
- ajoutez les lignes suivantes dans le project.clj au niveau supérieur :
profiles {:dev {:resource-paths ["src/main/resources"]}}
De cette façon, les ressources seront disponibles sur le classpath pendant le développement (compiler, tester, repl), mais ne seront pas incluses dans les jars de la version.
En guise d'alternative, vous pourriez vouloir regrouper certaines ressources avec le jar de la version, comme les icônes et les graphiques de l'application, mais pas d'autres, comme les fichiers de configuration. Dans ce cas, vous pouvez diviser le dossier des ressources en sous-répertoires et déclarer ceux que vous souhaitez inclure au niveau supérieur, tandis que le reste se trouve dans le répertoire dev
profil :
:resource-paths ["src/main/resources/icons"
"src/main/resources/images"]
:profiles {:dev {:resource-paths ["src/main/resources/config"]}}
Référencement des ressources dans le code
En utilisant la méthode ci-dessus, vous pourriez référencer les ressources à la fois pendant le développement et la production de manière uniforme en les recherchant sur le classpath (comme indiqué par Kevin y Valerii ), et non directement sur le système de fichiers :
(require '[clojure.java.io :as jio])
(jio/file (jio/resource "relative/path/to/resource.xml"))
Chemin de classe de l'exécution
Au cours du développement, Leiningen inclurait à la fois le niveau supérieur et le niveau inférieur de l'interface. dev
ressources du profil sur le classpath. Pour le runtime publié, vous devrez configurer vous-même le classpath pour le JRE :
java -cp "/etc/myapp:/usr/local/lib/myapp.jar" myapp.core $*
En outre, vous pouvez également laisser toutes les ressources incluses dans le bocal. De cette façon, les ressources incluses seront utilisées par défaut. Si vous configurez le classpath de sorte que le fichier .jar vienne après le dossier de configuration ( /etc/myapp
dans l'exemple), les fichiers de ressources ayant le même chemin de ressources relatif dans le dossier de configuration auront la priorité sur ceux inclus dans le jar.
0 votes
Vérifiez ma réponse. J'ai eu le même problème.
0 votes
Existe-t-il un bon exemple de mise en page des ressources ou un exemple de projet qui l'utilise ?