线程“主”中的异常java.lang.NoClassDefFoundError:org / springframework / context / support / ClassPathXmlApplicationContext

时间:2019-03-13 13:20:01

标签: java spring maven

使用命令行运行jar时出现以下错误,它在eclipse上运行,但是一旦我使用以下命令构建项目: mvn clean install 并使用以下命令运行: java -jar target / quartz-example-2.0.0.jar收到错误

错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/support/ClassPathXmlApplicationContext
        at com.example.ExampleTest.main(ExampleTest.java:11)
Caused by: java.lang.ClassNotFoundException: org.springframework.context.support.ClassPathXmlApplicationContext
        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)

主类:

    package com.example;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ExampleTest {
    public static void main(String[] args) {
        new ClassPathXmlApplicationContext("quartz-servlet.xml");
    }
}

quartz-servlet.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">



<bean id="service" class="com.example.Service" />

<bean name="myJob" class="org.springframework.scheduling.quartz.JobDetailBean">

    <property name="jobClass" value="com.example.MyJob" />

    <property name="jobDataAsMap">
        <map>
            <entry key="service" value-ref="service" />
        </map>
    </property>

</bean>

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

    <property name="jobDetail" ref="myJob" />
    <property name="cronExpression" value="0/30 * * * * ?" />

</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="jobDetails">
        <list>
            <ref bean="myJob" />
        </list>
    </property>

    <property name="triggers">
        <list>
            <ref bean="cronTrigger" />
        </list>
    </property>
</bean>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>quartz-example</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>

<name>quartz-example</name>
<description>Quartz Example</description>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.2.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.2.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>
        <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>



    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>1.8.6</version>
    </dependency>

</dependencies>


<build>
    <pluginManagement>
        <plugins>
            <!-- Set JDK Compiler Level -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.0.2</version>
            <executions>
                <execution>
                <id>copy-dependencies</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>false</overWriteSnapshots>
                    <overWriteIfNewer>true</overWriteIfNewer>
                    <includeScope>runtime</includeScope>
                </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.0.2</version>
            <executions>
                <execution>
                <id>copy-dependencies</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>false</overWriteSnapshots>
                    <overWriteIfNewer>true</overWriteIfNewer>
                    <includeScope>runtime</includeScope>
                </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- Build an executable JAR -->
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>com.example.ExampleTest</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>
        </plugins>
    </pluginManagement>

</build>

1 个答案:

答案 0 :(得分:0)

通过命令java -jar target/quartz-example-2.0.0.jar运行jar时,您没有指定类路径,因此JVM不知道在哪里搜索spring类。

您可以使用2种方法:

  • 通过此命令java -cp YOUR_PATH_TO_ALL_NEEDED_JAR -jar target/quartz-example-2.0.0.jar指定类路径
  • 创建一个完整的jar,其中包含您需要的所有类(也 春天的),通过使用一些Maven插件(如此处所述) Including dependencies in a jar with Maven

我个人更喜欢第一种方法,因为它可以划分范围。...jar是您的,而jar属于spring