代码之家  ›  专栏  ›  技术社区  ›  Hank Gay

是否有人使用本地maven repo中的snakeyaml成功加载了yaml文件?

  •  1
  • Hank Gay  · 技术社区  · 17 年前

    如果我引用 SnakeYAML 直接从一个测试程序(见底部)JAR,一切正常。如果我在Maven创建的项目中,我将从单元测试中获得以下输出:

    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)
    

    由于Maven在中央回购协议中找不到snakeyaml,我手动将其安装到本地回购协议中。如果重要的话,我在Mac上使用snakeyaml 0.9和maven 2.0.9。

    示例yaml文件

    - 
        accountCode: foo
        accountId: 1
        email: foo@bar.com
        userId: 1
    

    工作测试程序

    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);
                    }
                }
            }
        }
    }
    
    2 回复  |  直到 17 年前
        1
  •  3
  •   Olivier    17 年前

    似乎是JDK版本问题: LinkedList#push introduced in Java 6 .

    尝试设置 JAVA_HOME 在运行maven之前返回正确的版本。

        2
  •  2
  •   Andrey    17 年前

    修正版本1.0RC1

    从SnakeYAML中删除所有Java 6依赖项。

    推荐文章