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