выполнение файла JAR: Причина: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext - PullRequest
0 голосов
/ 07 октября 2011

Я создал проект Maven. После того, как я напечатал: mvn clean package, все работает нормально, и я вижу мой jar-файл в target. Но если я щелкаю файл, я получаю следующее сообщение об ошибке:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/c
ontext/ApplicationContext
Caused by: java.lang.ClassNotFoundException: org.springframework.context.Applica
tionContext
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: comt.test.Test. Program will exit

Я могу запустить проект под Eclipse и работает нормально, но файл jar не работает.

Это содержание Манифеста:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Build-Jdk: 1.6.0_23
Main-Class: com.stlpo.App
Class-Path: commons-httpclient-3.1.jar commons-codec-1.2.jar h2-1.2.138.jar 
commons-lang-2.5.jar spring-core-3.0.3.RELEASE.jar spring-asm-3.0.3.RELEASE.jar co
 mmons-logging-1.1.1.jar spring-context-3.0.3.RELEASE.jar spring-beans
 -3.0.3.RELEASE.jar spring-expression-3.0.3.RELEASE.jar spring-orm-3.0
 .3.RELEASE.jar spring-tx-3.0.3.RELEASE.jar spring-aop-3.0.3.RELEASE.j
 ar aopalliance-1.0.jar spring-jdbc-3.0.3.RELEASE.jar spring-test-3.0.
 3.RELEASE.jar cglib-nodep-2.2.jar logback-core-0.9.24.jar logback-cla
 ssic-0.9.24.jar slf4j-api-1.6.0.jar hibernate-annotations-3.5.4-Final
 .jar hibernate-core-3.5.4-Final.jar antlr-2.7.6.jar commons-collectio
 ns-3.1.jar jta-1.1.jar hibernate-commons-annotations-3.2.0.Final.jar 
 hibernate-jpa-2.0-api-1.0.0.Final.jar hibernate-entitymanager-3.5.4-F
 inal.jar cglib-2.2.jar asm-3.1.jar javassist-3.9.0.GA.jar opencsv-2.1
 .jar jfreechart-1.0.13.jar jcommon-1.0.16.jar commons-beanutils-1.8.3
 .jar beansbinding-1.2.1.jar poi-3.6.jar log4j-1.2.13.jar
  poi-ooxml-3.6.jar poi-ooxml-schemas-3.6.jar xmlbeans-2.3.0.jar stax-
 api-1.0.1.jar geronimo-stax-api_1.0_spec-1.0.jar dom4j-1.6.1.jar xml-
 apis-1.0.b2.jar commons-dbcp-1.4.jar commons-pool-1.5.4.jar TableLayo
 ut-20050920.jar

Заранее спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

Когда вы создаете JAR, в нем есть только ваши классы.Он не содержит все остальные библиотеки, от которых зависит ваш проект.(Это возможно, но это не распространено и в основном не рекомендуется.) Чтобы запустить класс в вашем JAR, который зависит от Spring, вы должны быть уверены, что Spring находится в classpath, либо передавая classpath в исполняемый файл java (нене работает, если используется аргумент -jar) или путем добавления атрибута "Class-Path" в файл манифеста JAR.Конечно, это не просто весна.Вы должны будете включить запись пути к классу для каждого фляги, от которой зависит ваш проект.

0 голосов
/ 11 октября 2011

см. Другой пост , касающийся той же проблемы. вам нужно создать classPath (для вас затмение автоматически для вас, и поэтому у вас нет проблем уничтожить проект из затмения) для зависимостей.(в твоем случае пружина)

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>fully.qualified.MainClass</mainClass> 
                <addClasspath>true</addClasspath>
                <!-- use class path prefix if your dependencies are out side the jar)
                <classpathPrefix>lib/</classpathPrefix> -->          
            </manifest>

            <manifestEntries>
                <Class-Path>conf/</Class-Path>
            </manifestEntries>
        </archive>

    </configuration>
</plugin>
...