Qualcuno ha caricato con successo un file YAML usando SnakeYAML da un repository Maven locale?
Domanda
Se faccio riferimento al vaso SnakeYAML direttamente da un programma di test (vedi in basso), tutto funziona. Se sono all'interno del mio progetto creato da Maven, ottengo il seguente output dai miei test unitari:
java.lang.NoSuchMethodError: java.util.LinkedList.push(Ljava/lang/Object;)V
at org.yaml.snakeyaml.scanner.ScannerImpl.addIndent(ScannerImpl.java:482)
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchBlockEntry(ScannerImpl.java:653)
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:268)
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:178)
at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:213)
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:172)
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:143)
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:163)
at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:66)
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:60)
at org.yaml.snakeyaml.Loader.load(Loader.java:35)
at org.yaml.snakeyaml.Yaml.load(Yaml.java:134)
Dato che Maven non è riuscito a trovare SnakeYAML nei repository centrali, l'ho installato manualmente nel mio repository locale. Nel caso in cui sia importante, sono su un Mac con SnakeYAML 0.9 e Maven 2.0.9.
File YAML di esempio
-
accountCode: foo
accountId: 1
email: foo@bar.com
userId: 1
Programma di test di lavoro
import java.io.*;
import java.util.*;
import org.yaml.snakeyaml.Yaml;
/**
* Testing SnakeYAML.
*
* @author Hank Gay
*/
public final class Foo {
public static void main(final String[] args) throws Exception {
final Yaml yaml = new Yaml();
Reader reader = null;
try {
reader = new FileReader("/tmp/foo.yaml");
System.out.println(yaml.load(reader));
} catch (final FileNotFoundException fnfe) {
System.err.println("We had a problem reading the YAML from the file because we couldn't find the file." + fnfe);
} finally {
if (null != reader) {
try {
reader.close();
} catch (final IOException ioe) {
System.err.println("We got the following exception trying to clean up the reader: " + ioe);
}
}
}
}
}
Soluzione
Sembra un problema con la versione JDK: LinkedList # push
era introdotto in Java 6 .
Prova a impostare JAVA_HOME
sulla versione corretta prima di eseguire Maven.
Altri suggerimenti
risolto nella versione 1.0rc1
Tutte le dipendenze Java 6 vengono rimosse da SnakeYAML.