当前位置: 首页 > 知识库问答 >
问题:

Maven Spring Jar项目java.lang.ClassNotFoundExceptiona

郭思淼
2023-03-14

我的Spring应用程序有一个奇怪的问题。我使用Eclipse,当我单击RUn as Java Application时,我的应用程序运行得非常好,但当我在打包到jar并尝试运行后单击maven build(mvn install)时,我得到的结果是:

   Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/c
ontext/ApplicationContext
at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.springframework.context.Applica
tionContext
        at java.net.URLClassLoader$1.run(Unknown Source)
        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)
        ... 6 more

我认为问题出在这一行:public static void main(String[]args){

ModernSoft ms = new ModernSoft();
StringBuffer classpath = new StringBuffer();
 ClassLoader applicationClassLoader = ms.getClass().getClassLoader();
 if (applicationClassLoader == null) {
     applicationClassLoader = ClassLoader.getSystemClassLoader();
 }
 URL[] urls = ((URLClassLoader)applicationClassLoader).getURLs();
  for(int i=0; i < urls.length; i++) {
      classpath.append(urls[i].getFile()).append("\r\n");
  }    
  System.out.println(classpath.toString());
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:**/applicationContext*.xml");
//org.springframework.context.ApplicationContext ctx = new FileSystemXmlApplicationContext("C:\\Documents and Settings\\BK\\workspace\\ModernSoft\\src\\main\\resources\\applicationContext.xml");
DataSource ds = (DataSource) ctx.getBean("dataSource", DataSource.class);
String[] beans = ctx.getBeanDefinitionNames();

我在maven依赖项中拥有所有jar,但仍然无法解决这个有线问题。请帮帮我.

更新:My pom.xml

<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>ModernSoft</groupId>
    <artifactId>pl.modern</artifactId>
    <version>0.0.1</version>
    <name>ModernSoft</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                    <descriptorRefs>  
                        <descriptorRef>jar-with-dependencies</descriptorRef>  
                    </descriptorRefs>  
                </configuration>
            </plugin>
        </plugins>
        <finalName>ModernSoft</finalName>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.2.5.Final</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.26</version>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.3.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>javax.persistence</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.2.0.Final</version>
        </dependency>



    </dependencies>
</project>
Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to lo
cate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/jpa]                                  
Offending resource: class path resource [applicationContext.xml]                                                                        

        at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)                     
        at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)                                         
        at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)                                         
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:318)              
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1435)

        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428)

        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentR
eader.java:185)                                                                                                                         
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocu
mentReader.java:139)                                                                                                                    
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocume
ntReader.java:108)                                                                                                                      
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)      
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)        
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)          
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)          
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:
174)                                                                                                                                    
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:
209)                                                                                                                                    
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:
180)                                                                                                                                    
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:
243)                                                                                                                                    
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)

        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) 
        at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationCo
ntext.java:130)                                                                                                                         
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)   
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)                  
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)           
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)            
        at pl.modern.ModernSoft.main(ModernSoft.java:27) 
Hibernate: select max(id) from customers

但DB中没有记录显示。

共有1个答案

龙兴学
2023-03-14

我相信您正在使用java-jar从命令行运行jar文件。在本例中,您需要使用-classpath选项指定需要包含在类路径中的所有jar。

另一个选择是使用Maven uber jar(包含所有依赖项的jar)

 类似资料:
  • sbt子项目是否可以有自己的目录?或者只有根项目可以用。Scala帮助器文件为构建项目的目录?。下面是我目前的建筑结构。无法访问中定义的对象。 更新:sub-project-1/build.sbt中的以下sbt定义 由于以下错误而失败 Common在/my-project/projects/Common.scala中定义,没有问题。但是Localhost是在/my-project/sub-proj

  • 项目是资源的拥有者,云联壹云平台上的资源都是以项目向用户提供服务。 项目是资源的拥有者,云管平台上的计算资源(如虚拟机、裸金属、镜像、硬盘、快照等)等都以项目为单位向用户提供,用户只有加入项目后才可以使用项目中所有的资源。 项目来源: 系统部署完成后,默认创建system项目。 在域下新建项目。 同步公有云上的项目。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “认证与安全/认证

  • 以项目的维度展示每个项目的费用分析情况。 以项目的维度展示每个项目的费用分析情况. 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “费用/费用分析/项目” 菜单项,进入项目菜单项。 查看项目的费用 该功能用于查看系统中所有项目的费用情况。 在项目列表中默认展示系统中每个项目的本月消费和本年消费,支持单击顶部图标查看本月、上月、本季度、上季度、本年或自定义时间的消费情况。 当平台只存

  • Commercial Support Commercial support is provided by Typesafe <http://www.typesafe.com>. Akka is part of the Typesafe Reactive Platform <http://www.typesafe.com/platform>. Mailing List Akka User Googl

  • 默认 Library 只会发布 release variant(变种)版本。该版本将会被所有引用它的项目使用,无论编译出多少个版本。由于 Gradle 的限制,我们正在努力解决这个问题。你可以控制哪一个 Variant 版本作为发行版: android { defaultPublishConfig "debug" } 注意这里的发布配置对应的值是完整的 variant 版本名称。reles

  • 引用 Library 项目与引用其他项目一样: dependencies { compile project(':libraries:lib1') compile project(':libraries:lib2') } 注意: 如果要引用多个 Library,那么引用的先后顺序将非常重要。这类似于旧的构建系统的 project.properties 文件中的依赖顺序。

  • Library 项目跟常规的 Android 项目只有小部分差异。 既然构建 Library 跟构建应用不同,那肯定用不同的插件,但是两个插件内部其实共享大部分同样的代码,且由同一个 jar 包提供:com.android.tools.build.gradle buildscript { repositories { jcenter() } dependen

  • 上面提到的构建文件中有默认的文件夹结构。Gradle 遵循约定优先于配置的概念,在尽可能的情况下提供合理的默认配置参数。最基本的项目有两个 “source sets” 组件,分别存放应用代码及测试代码。它们分别位于: src/main/ src/androidTest/ 里面每个存在的文件夹对应相应的源组件。对于 Java plugin 和 Android plugin 来说,它们的 Java 代