2014-01-08 1 views
3

Я пытаюсь следовать этому Apache CXF – JAX-WS – Simple Tutorial, но, строящей скачана образца создает клиент, который при вызове отказывается работать, выдав эту ошибку:ClassNotFoundException: (! Из коробки) org.springframework.context.support.AbstractApplicationContext

Failed to load Main-Class manifest attribute from SampleWSCxfClient-0.0.1-SNAPSHOT.jar

Я искал, чтобы узнать больше об этой проблеме и выяснил this SO answer, которые побудили меня взломать 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 можно загрузить с here.

+1

Просто чтобы проверить: вы используете Maven для его сборки, не так ли? –

+0

@JoeRinehart Да, я знаю. и 'pom.xml' уже содержит зависимость« spring-context ». Фактически вы можете увидеть весь пакет проектов дословно [здесь] (https://dl.dropboxusercontent.com/u/1737239/SampleWSCxf.zip). Почему полный учебный пакет не работает из коробки вне меня. Благодаря! – Introspective

+0

Да, это то, что меня бросило - я загрузил его, и он прямо там, в POM. Как вы пытаетесь запустить его/что создает classpath, чтобы включить все? –

ответ

3

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

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

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

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

CREATING RUNNABLE JAR for maven based eclipse project

0

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

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