Почему не работает работающий JAR, экспортированный из Eclipse? - PullRequest
3 голосов
/ 16 июня 2011

У меня есть проект, который прекрасно работает в Eclipse.Но когда я экспортирую его в работающий JAR с упакованными в него зависимостями, он не запустится.Ошибка при запуске JAR из консоли:

EDIT (раньше он не запускался с -jar):

INFO: Loading XML bean definitions from class path resource [applicationContext-
framework.xml]
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOExc
eption parsing XML document from class path resource [applicationContext-framewo
rk.xml]; nested exception is java.io.FileNotFoundException: class path resource
[applicationContext-framework.xml] cannot be opened because it does not exist
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:349)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:310)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
        at org.springframework.context.support.AbstractXmlApplicationContext.loa
dBeanDefinitions(AbstractXmlApplicationContext.java:113)
        at org.springframework.context.support.AbstractXmlApplicationContext.loa
dBeanDefinitions(AbstractXmlApplicationContext.java:80)
        at org.springframework.context.support.AbstractRefreshableApplicationCon
text.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
        at org.springframework.context.support.AbstractApplicationContext.obtain
FreshBeanFactory(AbstractApplicationContext.java:422)
        at org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.java:352)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<i
nit>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<i
nit>(ClassPathXmlApplicationContext.java:93)
        at com.horstmann.violet.UMLEditorApplication.getApplicationContext(UMLEd
itorApplication.java:111)
        at com.horstmann.violet.UMLEditorApplication.<init>(UMLEditorApplication
.java:94)
        at com.horstmann.violet.UMLEditorApplication.main(UMLEditorApplication.j
ava:84)
        ... 5 more
Caused by: java.io.FileNotFoundException: class path resource [applicationContex
t-framework.xml] cannot be opened because it does not exist
        at org.springframework.core.io.ClassPathResource.getInputStream(ClassPat
hResource.java:143)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:336)
        ... 20 more 

, но файл находится в resources/ из корня JAR.

Что я пропускаю или делаю неправильно?

Ответы [ 3 ]

6 голосов
/ 16 июня 2011

Попробуйте выбрать опцию «Упаковать необходимые библиотеки в сгенерированный JAR».

Файл JAR представляет собой обычный сжатый архив.Убедитесь, что все необходимые библиотеки в вашем файле MANIFEST.MF присутствуют в созданном файле.

5 голосов
/ 16 июня 2011

Попробуйте запустить JAR из командной строки - скорее всего, будет отображаться полезное сообщение об ошибке.

Вероятно, существуют некоторые зависимости, о которых Eclipse не знает или которые неправильно настроены в нем, и поэтому отсутствуют в JAR.

В общем случае не стоит полагаться на функциональность IDE для получения результатов - это зависит от слишком большого количества скрытых факторов и не может быть автоматизировано для сервера сборки. Любой проект, выходящий за рамки экспериментальной / игрушечной стадии, должен иметь автоматическую сборку через Ant или Maven.

1 голос
/ 16 июня 2011

Сообщение

Could not find the main class: violet-0.21.2-SVN.jar.  Program will exit.

указывает, что вы неправильно указали строку Main-Class: MyPackage.MyClass в манифесте при упаковке файла JAR. Вам нужно дать полное имя класса с помощью метода main (String [] args).

Подробнее см. http://download.oracle.com/javase/tutorial/deployment/jar/appman.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...