Класс SnakeYaml не найден, исключение

Когда я анализирую config.yaml с помощью SnakeYaml 1.14, я получаю исключение «Класс не найден». Ниже приведен код, используемый для синтаксического анализа. Я использовал maven для создания проекта.

public class AppConfigurationReader 
{
    private static final  String CONFIG_FILE = "config.yaml";
    private static String fileContents = null;
    private static final Logger logger = LoggerFactory.getLogger(AppConfigurationReader.class);

    public static synchronized AppConfiguration getConfiguration() {
        return getConfiguration(false);
    }

    public static synchronized AppConfiguration getConfiguration(Boolean forceReload) {
        try {
            Yaml yaml = new Yaml();

            if(null == fileContents || forceReload) {
                fileContents = read(CONFIG_FILE);
            }
            yaml.loadAs(fileContents, AppConfiguration.class);
            return yaml.loadAs(fileContents, AppConfiguration.class);
        }
        catch (Exception ex) {
            ex.printStackTrace();
            logger.error("Error loading fileContents {}", ex.getStackTrace()[0]);
            return null;
        }
    }

    private static String read(String filename) {
        try {
            return new Scanner(new File(filename)).useDelimiter("\\A").next();
        } catch (Exception ex) {
            logger.error("Error scanning configuration file {}", filename);
            return null;
        }
    }
}

person abcd    schedule 20.10.2014    source источник


Ответы (3)


Я обнаружил аналогичную ошибку, но выгружает файл.

Вы можете написать полное имя класса в инструкции yaml.load.

Например, если бы AppConfiguration.class было в org.example.package1, вы бы написали что-то вроде:

yaml.loadAs(fileContents, org.example.package1.AppConfiguration.class);
person kiuby_88    schedule 23.10.2014

Может быть, я немного опоздал с ответом, но это поможет другим в будущем.

Эта проблема возникает, когда ваш класс не может загрузить класс, иногда даже если он также присутствует в вашем пути к классам.

Я столкнулся с этой проблемой, и ее можно решить таким образом.

package my.test.project;
import java.io.InputStream;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor;
public class MyTestClass {
    public static void main(String[] args) {
        InputStream input = MyTestClass.class.getClassLoader().getResourceAsStream("test.yml");
        Yaml y = new Yaml(new CustomClassLoaderConstructor(MyTestClass.class.getClassLoader()));
        TestConfig test =y.loadAs(input, TestConfig.class);
        System.out.println(test);
    }
}

Вам нужно инициализировать объект Yaml с помощью CustomClassLoaderConstructor, это поможет загрузить класс компонента до того, как он будет фактически использоваться внутри.

person Shankar Saran Singh    schedule 30.08.2019

Похоже, что библиотеки змеи не включены в ваш файл jar, вам нужно использовать плагин сборки maven, а не просто пакет, чтобы включить все банки зависимостей.

person harsha    schedule 09.09.2018