ClassNotFoundException: org.springframework.context.support.AbstractApplicationContext

Я пытаюсь следовать этому Apache CXF - JAX-WS - Simple Tutorial, но сборка загруженного примера (из коробки!) Создает клиента, который при вызове отказывается работать, выдавая эту ошибку:

Не удалось загрузить атрибут манифеста основного класса из SampleWSCxfClient-0.0.1-SNAPSHOT.jar

Я искал, чтобы узнать больше об этой проблеме и нашел этот SO-ответ, который побудил меня взломать SampleWSCxfClient-0.0.1-SNAPSHOT.jar, открыв его с помощью 7-zip и добавление в имя файла META-INF/MANIFEST.MF следующая строка:

Main-Class: com.areyes.sample.client.SampleWSClient

Я выяснил этот основной класс, просто взглянув на единственный Java-файл в проекте:

package com.areyes.sample.client;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sample.service.SampleWebService;

public class SampleWSClient {


    public SampleWSClient() {

        ClassPathXmlApplicationContext classPathXmlAppContext = new ClassPathXmlApplicationContext("classpath:META-INF/beans.xml");
        classPathXmlAppContext.start();

        SampleWebService sampleWebService = (SampleWebService)classPathXmlAppContext.getBean("client");

        System.out.println(sampleWebService.getDataFromWebService().getName());
        System.out.println(sampleWebService.getDataFromWebService().getDescription());
        System.out.println(sampleWebService.getDataFromWebService().getAge());

    }

    public static void main(String[] args){
        new SampleWSClient();
    }
}

Затем я попытался снова вызвать SampleWSCxfClient-0.0.1-SNAPSHOT.jar, но на этот раз он завершился неудачно с:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/support/AbstractApplicationContext
Caused by: java.lang.ClassNotFoundException: org.springframework.context.support.AbstractApplicationContext
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com.areyes.sample.client.SampleWSClient. Program will exit.

Как мне сделать этот пример работы?


Для вашего удобства весь образец пакета ZIP можно скачать здесь.

3 ответа

Решение

Однажды я столкнулся с подобной проблемой, и после того, как я не смог расшифровать магию запуска "банки с множеством зависимостей" из командной строки, я обошел ее, пропустив через Maven.

Попробуй это:

mvn exec:java -Dexec.mainClass=com.areyes.sample.client.SampleWSClient

У меня была та же проблема, но она была исправлена ​​после того, как я обновил classpathPrefix в моем pom.xml. Support_lib /.

После того, как вы собрали проект с использованием maven, в папке 'target' был этот Support_lib / dir со всеми файлами весенних jar. поэтому я использовал это имя dir в classpathPrefix, и это сработало.

Для проектов на основе maven, пожалуйста, пройдите по ссылке ниже, чтобы создать работоспособную флягу. Для проекта на основе maven создание jar с использованием опции export->jar не работает. Это работает для меня успешно.

СОЗДАНИЕ ПЕРЕКЛЮЧАТЕЛЯ JAR для проекта затмения на основе Maven

Другие вопросы по тегам