使用maven打包jar后 执行jar包问题,Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefi

本文介绍了作者在使用Maven打包项目后遇到的执行jar包问题,详细讨论了错误原因,并提供了解决这个问题的关键步骤,即在maven-shade-plugin配置中添加特定设置。
部署运行你感兴趣的模型镜像

    本人第一次发帖写的不是很好。希望大家体谅体谅。。。
最近研究maven,然后用maven管理项目,打包项目后发现执行就报错,上网差了很久终于解决了。
废话不多说了,看下面。
很多人使用maven打包后执行jar出现一个错误;


Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
Offending resource: class path resource [applicationContext.xml]

        at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70)
        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:316)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1421)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1414)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:187)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:141)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:110)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:251)
        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(AbstractRefreshableApplicationContext.java:129)
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:542)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at hotdata.dmp.match.run.DataMatch.main(DataMatch.java:17)

在打包时后面的会把前面的覆盖,使得这两个文件中永远只保存最后一个spring依赖的schema和handler。

主要把这两个加上就没问题了

<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
	<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>

这是maven的shade打包

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-shade-plugin</artifactId>
	<version> 1.7.1</version>
	<executions>
		<execution>
			<phase>package</phase>
			<goals>
				<goal>shade</goal>
			</goals>
			<configuration>
				<transformers>
					<transformer
						implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
						<resource>META-INF/spring.handlers</resource>
					</transformer>
					<transformer
						implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
						<resource>META-INF/spring.schemas</resource>
					</transformer>
					<transformer
						implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
						<mainClass>com.chenzhou.test.Main</mainClass>
					</transformer>
				</transformers>
			</configuration>
		</execution>
	</executions>
</plugin>

 这是maven的assemby打包

<build>
        <plugins>
           <!-- <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.payplat.dacq.impl.AutoJob</mainClass>
                        </manifest>
                    </archive>
                </configuration>

                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>-->

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlers</resource>
                                </transformer>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemas</resource>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

然后重新打包 mvn package就没问题了。




您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

### Spring Boot 应用启动时报 `BeanDefinitionStoreException` 的解决方案 在 Spring Boot 应用中,如果启动时报 `BeanDefinitionStoreException: IOException parsing XML document from class path resource`,通常是因为应用尝试加载某个 XML 配置文件时,该文件在类路径中不存在或路径配置不正确。以下是可能的原因和解决方案。 #### 1. 检查 XML 文件是否存在 确保配置文件(如 `applicationContext.xml` 或 `springMVC.xml`)存在于 `src/main/resources` 目录下。Spring Boot 默认从该目录加载资源文件。如果文件不在正确的位置,应用将无法找到它,从而导致 `FileNotFoundException` [^4]。 #### 2. 检查 XML 文件路径配置 在代码中加载 XML 文件时,确保路径正确。例如: ```java ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml"); ``` 如果 XML 文件位于子目录中,路径应含目录名,例如: ```java ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:spring/applicationContext.xml"); ``` 使用 `classpath*:` 而不是 `classpath:` 可以确保在多个类路径中查找配置文件,这在模块化项目中特别有用 [^4]。 #### 3. 检查 `pom.xml` 中的资源过滤配置 确保 `src/main/resources` 目录中的 XML 文件在 Maven 构建过程中没有被排除。在 `pom.xml` 文件中,检查 `<build>` 部分是否配置了正确的资源过滤: ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> ``` #### 4. 清理并重新构建项目 有时候,旧的构建文件可能会导致问题。运行以下 Maven 命令清理并重新构建项目: ```bash mvn clean install ``` #### 5. 检查 IDE 中的资源路径配置 确保 IDE(如 IntelliJ IDEA 或 Eclipse)中的资源路径配置正确。有时 IDE 可能没有正确同步 Maven 配置,导致资源文件未被正确加载。可以尝试重新导入项目或刷新 Maven 配置。 #### 6. 检查多模块项目的配置 如果项目是多模块的,确保 XML 文件在正确的模块中,并且主模块能够访问该文件。在某些情况下,可能需要使用 `classpath*:` 来确保跨模块加载资源 [^4]。 #### 7. 检查 Spring Boot 启动类的注解 如果使用的是基于 Java 的配置而不是 XML 文件,确保启动类上有正确的注解,例如: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 如果项目中混合使用了 XML 和 Java 配置,确保没有冲突的配置项。 #### 8. 日志分析 查看详细的错误日志,确定具体是哪个文件导致了问题。日志中通常会含文件路径信息,这有助于定位问题。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值