2014-12-02 11 views
7

Ho un progetto che funziona correttamente utilizzando lein run. Ora voglio compilarlo in un vaso standalone usando lein uberjar. Tuttavia, ci sono un paio di file sorgente nella mia directory src/projectname/ chiamata ad es. playground.clj e stats.clj che uso per sperimentare con emacs & il repl, ma che non voglio compilare per il progetto finale.esclude determinati spazi dei nomi clj dalla compilazione in leiningen

Con qualcosa come make, vorrei specificare tutti i file che dovrebbero essere compilati. Con clojure/leiningen, a quanto pare, tutti i file sono compilati di default - come posso escludere i file? Non ho trovato nulla nei documenti leiningen.

Attualmente sto utilizzando :aot :all. È questo il posto dove cambiare qualcosa? Ancora una volta, non sono riuscito a trovare documentazione dettagliata su questo.

UPDATE:

I suggerimenti finora non hanno funzionato. Ciò che ha funzionato, tuttavia, è include tutti gli spazi dei nomi desiderati invece di escludere quelli che non dovrebbero essere compilati. Ad esempio:

(defproject myproject "version" 
    ;; ... 
    :profiles {:uberjar {:aot [myproject.data 
          myproject.db 
          myproject.util]}}) 

risposta

0

Prova questa (ns ^:skip-aot my-ns)

si può anche fare

(ns ^{:skip-aot true} my-ns 
    (require [...])) 

Source

+1

Non ha funzionato per me. Questo ha qualcosa a che fare con questo? -> Dallo stesso file sorgente: "^: skip-aot non disabiliterà la compilazione AOT di: main quando: aot is: all o contiene la classe principale." Cioè Dovrei quindi sostituire: tutto con un vettore di tutti i file da includere? – pholz

+0

Questo è corretto. È possibile spostare il codice dal ns principale a un altro e aggiungere '^: skip-aot' allo spazio dei nomi – runexec

+0

Bene, il mio ns principale è chiamato' myproject.core'. Ho aggiunto '^: skip-aot' alla direttiva' ns' in 'myproject.stats', ma quando eseguo' lein uberjar' vuol comunque compilare 'stats'. Ho potuto risolvere il problema solo rinominando 'stats.clj' in' stats.bak'. – pholz

2

Date un'occhiata a leiningen's sample project.clj, che descrive come utilizzare :jar-exclusions o :uberjar-exclusions di escludere percorsi arbitrari quando si creano vasi (o uberjars).

;; Files with names matching any of these patterns will be excluded from jars. 
    :jar-exclusions [#"(?:^|/).svn/"] 
    ;; Files with names matching any of these patterns will included in the jar 
    ;; even if they'd be skipped otherwise. 
    :jar-inclusions [#"^\.ebextensions"] 
    ;; Same as :jar-exclusions, but for uberjars. 
    :uberjar-exclusions [#"META-INF/DUMMY.SF"] 
+0

ha provato ': uberjar-exclusions [#". * Stats.clj "#". * Playground.clj "]', non ha modificato nulla – pholz