2009-09-16 12 views
13

Sto lavorando a un progetto che coinvolge maven, java e clojure. Il problema che sto affrontando è questo, ho alcuni caratteri UTF-8 nei miei file di origine clojure a causa dei quali il mio codice sorgente non è interpretato correttamente dal compilatore java, ho funzionato impostando la variabile di ambiente JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8, ma quello che voglio è passare questa proprietà attraverso MAVEN.abilitazione codifica UTF-8 per file sorgente clojure

Ho già provato a impostare MAVEN_OPTS=-Dfile.encoding ma questo non sembra funzionare.
Ho anche provato la configurazione impostazione per il plug-in compilatore di Maven ... qualcosa di simile:

<configuration> 
     <compilerArgument>-Dfile.encoding=UTF8</compilerArgument> 
</configuration> 

Questo non funziona neanche.

Sto facendo qualcosa di sbagliato, o c'è un altro modo.

grazie,
RD

Ok, ecco qualche dettaglio in più. Questo è il mio pom genitore,

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>1.5</source> 
     <target>1.5</target> 
     <encoding>UTF-8</encoding> <! also tried <encoding>UTF8</encoding> 
    </configuration> 
    </plugin> 

Niente di interessante nel pom del bambino, tranne ...

<resources> 
    <resource> 
    <directory>src/main/clojure</directory> 
    </resource> 
</resources> 

;; Codice clojure frammento che causa problemi

(let [char "대"] 
    (not (empty? (filter #(s/contains? % char) <some-list>))) 
;; The list is always empty because I never find a match if I do not set the env. variable 
+0

Lo stesso problema qui. L'hai risolto? – chrisapotek

risposta

1

Hai provato passing compiler options? [-encoding UTF-8]

+0

In realtà l'ho fatto, ... (l'ho menzionato nella parte superiore, ma in qualche modo non è stato stampato. Riprova) -Dfile.encoding = UTF8

0

Hai impostato il parametro tramite il plug-in compilatore in questo modo?

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <compilerArgument>-Dfile.encoding=UTF8</compilerArgument> 
    </configuration> 
    </plugin> 
</plugins> 
+0

sì, ho provato esaclty come quello (anche se questo conf è in un pom padre), ma senza fortuna. –

1

Aggiornamento: in base ai commenti, questo è un runtime, non un problema di compilazione. Per ovviare al problema, puoi provare a sfuggire al personaggio come unicode.

Ad esempio, modificare il carattere in "\ uXXXX" nel file clojure, dove XXXX è il punto Unicode in esadecimale.

Se il problema si verifica nei test dell'unità. Puoi configurare il plugin surefire impostando argLine property. Ciò consente di impostare opzioni JVM arbitrarie sulla riga di comando.

+0

Hi Rich, Non sto compilando i file clojure (come per generare una classe). Sto chiamando il codice del clojure come questo RT.var (, ) .invoke (args *). Ancora più importante, il codice funziona se imposto JAVA_TOOL_OPTIONS su -Dfile.encoding = UTF8. In particolare, il mio file sorgente clojure ha un carattere UTF-8, che cerco di abbinare con un altro carattere letto da una stringa. Se JAVA_TOOL_OPTIONS non è impostato, la corrispondenza non avviene mai. –

+0

@RD sei in grado di aggiornare la tua domanda con qualche dettaglio in più, magari un POM semplificato e i file con i quali stai riscontrando il problema. –

+0

@RD grazie per l'aggiornamento, il mio approccio alle competenze Clojure 0, mi dispiace per tutte le domande. Se posso riassumere, hai un file sorgente clojure (.clj?) In src/main/clojure, questo file viene copiato in target/classi durante il file delle risorse del processo, quindi lo invochi da qualche codice java chiamando sul Tipo di RT che hai menzionato sopra? –

0

Tenuto conto del fatto che in realtà Clojure hardcodes la codifica di file di input atteso a UTF8 (vedi src/JVM/clojure/lang/Compiler.java, loadFile -Metodo), sono sorpreso che l'uso file.encoding non ha alcun effetto tutti.

+0

pmf, grazie per le informazioni, proverò a postare questa domanda al gruppo clojure e vedere cosa succede. –

0

Prova ad aggiungere questo immobile alla sua pom UTF-8

0

Per me, questo codice funziona senza problemi in sidro REPL in Emacs.

;; returns sequence ("대") 
(filter #(= % "대") ["대" "한" "민" "국"]) 

È possibile fornire un codice che emette un errore?

Problemi correlati